
Testez et exploitez les serveurs STUN/TURN pour les mauvaises configurations, permettant le pivotement du réseau interne via un proxy SOCKS, les attaques par fuite de mémoire et le scan de ports internes.
Stunner est un outil pour tester et exploiter les serveurs STUN, TURN et TURN over TCP. TURN est un protocole principalement utilisé dans la visioconférence et les chats audio (WebRTC).
Si vous trouvez un serveur mal configuré, vous pouvez utiliser cet outil pour ouvrir un proxy socks local qui relaye tout le trafic via le protocole TURN dans le réseau interne derrière le serveur.
J'ai développé cet outil lors d'un test de Cisco Expressway qui a révélé plusieurs vulnérabilités : https://firefart.at/post/multiple_vulnerabilities_cisco_expressway/
Pour obtenir le nom d'utilisateur et le mot de passe requis, vous devez les récupérer en utilisant une méthode hors bande comme l'écoute de la requête Connect d'un navigateur web avec Burp. J'ai ajouté un exemple de workflow en bas du readme sur la façon de tester un tel serveur.
Ce travail est sous licence Creative Commons Attribution - Pas d'Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International. Pour voir une copie de cette licence, visitez http://creativecommons.org/licenses/by-nc-sa/4.0/ ou envoyez une lettre à Creative Commons, PO Box 1866, Mountain View, CA 94042, États-Unis.
STUN : RFC 5389
TURN : RFC 5766
TURN pour TCP : RFC 6062
Extension TURN pour IPv6 : RFC 6156
Cette commande affiche des informations sur le serveur stun ou turn, comme les protocoles supportés et les attributs tels que le logiciel utilisé.
--debug, -d active la sortie de débogage (défaut : false)
--turnserver value, -s value serveur turn auquel se connecter au format hôte:port
--tls Utiliser TLS/DTLS pour la connexion au serveur STUN ou TURN (défaut : false)
--timeout value délai d'attente de connexion au serveur turn (défaut : 1s)
--help, -h afficher l'aide (défaut : false)
./stunner info -s x.x.x.x:443
Cette commande essaie plusieurs plages privées et restreintes pour voir si le serveur TURN est configuré pour autoriser les connexions vers les adresses IP spécifiées. Si une plage spécifique n'est pas interdite, vous pouvez énumérer cette plage plus en détail avec les autres commandes fournies. Si une IP est accessible, cela signifie que le serveur TURN transférera le trafic vers cette IP.
--debug, -d active la sortie de débogage (défaut : false)
--turnserver value, -s value serveur turn auquel se connecter au format hôte:port
--tls Utiliser TLS/DTLS pour la connexion au serveur STUN ou TURN (défaut : false)
--protocol value protocole à utiliser pour la connexion au serveur TURN. Valeurs supportées : tcp et udp (défaut : "udp")
--timeout value délai d'attente de connexion au serveur turn (défaut : 1s)
--username value, -u value nom d'utilisateur pour le serveur turn
--password value, -p value mot de passe pour le serveur turn
--help, -h afficher l'aide (défaut : false)
Connexion TURN basée sur TCP (connexion de vous au serveur TURN) :
./stunner range-scan -s x.x.x.x:3478 -u username -p password --protocol tcp
Connexion TURN basée sur UDP (connexion de vous au serveur TURN) :
./stunner range-scan -s x.x.x.x:3478 -u username -p password --protocol udp
C'est l'une des commandes les plus utiles pour les serveurs TURN qui supportent les connexions TCP vers les serveurs backend. Elle lancera un serveur socks5 local sans authentification et relayera tout le trafic TCP via le protocole TURN (UDP via SOCKS n'est actuellement pas supporté). Si le serveur est mal configuré, il transférera le trafic vers des adresses internes, ce qui peut être utilisé pour atteindre des systèmes internes et abuser du serveur comme proxy dans le réseau interne. Si vous choisissez également d'effectuer des résolutions DNS via socks, elles seront résolues en utilisant votre serveur de noms local, il est donc préférable de travailler avec des adresses IPv4 et IPv6 privées. Veuillez noter que ce module ne peut relayer que le trafic TCP.
--debug, -d active la sortie de débogage (défaut : false)
--turnserver value, -s value serveur turn auquel se connecter au format hôte:port
--tls Utiliser TLS/DTLS pour la connexion au serveur STUN ou TURN (défaut : false)
--protocol value protocole à utiliser pour la connexion au serveur TURN. Valeurs supportées : tcp et udp (défaut : "udp")
--timeout value délai d'attente de connexion au serveur turn (défaut : 1s)
--username value, -u value nom d'utilisateur pour le serveur turn
--password value, -p value mot de passe pour le serveur turn
--listen value, -l value Adresse et port d'écoute (défaut : "127.0.0.1:1080")
--drop-public, -x Ignorer les requêtes vers des IP publiques. Utile si la cible ne peut pas se connecter à Internet et que votre navigateur souhaite vérifier les certificats TLS via la connexion. (défaut : true)
--help, -h afficher l'aide (défaut : false)
./stunner socks -s x.x.x.x:3478 -u username -p password -x
Après avoir démarré le proxy, ouvrez votre navigateur, pointez le proxy dans vos paramètres vers socks5 avec une IP de 127.0.0.1:1080 (assurez-vous de ne pas activer l'option "ne pas utiliser le proxy pour les adresses locales" car nous voulons atteindre les adresses locales distantes) et appelez l'IP de votre choix dans le navigateur.
Exemple : https://127.0.0.1, https://127.0.0.1:8443 ou https://[::1]:8443 (ces adresses appelleront les ports sur le serveur TURN testé depuis les interfaces locales).
Vous pouvez également configurer proxychains pour utiliser ce proxy (mais ce sera très lent car chaque requête entraîne plusieurs
requêtes pour activer le proxy). Modifiez simplement /etc/proxychains.conf et ajoutez la valeur socks5 127.0.0.1 1080 sous
ProxyList.
Exemple de nmap via ce proxy socks5 avec un proxychains correctement configuré (notez qu'il s'agit de -sT pour effectuer des SYN TCP, sinon il n'utilisera pas le proxy socks5)
sudo proxychains nmap -sT -p 80,443,8443 -sV 127.0.0.1
Cela ne donnera probablement aucune information exploitable mais peut être utile pour énumérer tous les transports disponibles (= protocoles vers les systèmes internes) supportés par le serveur. Cela peut révéler des implémentations de protocoles personnalisés mais ne renverra généralement que les valeurs par défaut.
--debug, -d active la sortie de débogage (défaut : false)
--turnserver value, -s value serveur turn auquel se connecter au format hôte:port
--tls Utiliser TLS/DTLS pour la connexion au serveur STUN ou TURN (défaut : false)
--protocol value protocole à utiliser pour la connexion au serveur TURN. Valeurs supportées : tcp et udp (défaut : "udp")
--timeout value délai d'attente de connexion au serveur turn (défaut : 1s)
--username value, -u value nom d'utilisateur pour le serveur turn
--password value, -p value mot de passe pour le serveur turn
--help, -h afficher l'aide (défaut : false)
./stunner brute-transports -s x.x.x.x:3478 -u username -p password