
Probar y explotar servidores STUN/TURN por configuraciones incorrectas, permitiendo el pivoteo de red interna a través de proxy SOCKS, ataques de fuga de memoria y escaneo de puertos internos.
Stunner es una herramienta para probar y explotar servidores STUN, TURN y TURN sobre TCP. TURN es un protocolo usado principalmente en videoconferencias y chats de audio (WebRTC).
Si encuentras un servidor mal configurado, puedes usar esta herramienta para abrir un proxy socks local que retransmite todo el tráfico a través del protocolo TURN hacia la red interna detrás del servidor.
Desarrollé esta herramienta durante una prueba de Cisco Expressway que resultó en varias vulnerabilidades: https://firefart.at/post/multiple_vulnerabilities_cisco_expressway/
Para obtener el nombre de usuario y contraseña requeridos, debes obtenerlos usando un método fuera de banda como capturar la solicitud Connect desde un navegador web con Burp. Agregué un flujo de trabajo de ejemplo al final del readme sobre cómo probarías dicho servidor.
Este trabajo está licenciado bajo la Licencia Creative Commons Atribución-NoComercial-CompartirIgual 4.0 Internacional. Para ver una copia de esta licencia, visita http://creativecommons.org/licenses/by-nc-sa/4.0/ o envía una carta a Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
STUN: RFC 5389
TURN: RFC 5766
TURN for TCP: RFC 6062
TURN Extension for IPv6: RFC 6156
Este comando imprimirá información sobre el servidor stun o turn, como los protocolos soportados y atributos como el software utilizado.
--debug, -d enable debug output (default: false)
--turnserver value, -s value turn server to connect to in the format host:port
--tls Use TLS/DTLS on connecting to the STUN or TURN server (default: false)
--timeout value connect timeout to turn server (default: 1s)
--help, -h show help (default: false)
./stunner info -s x.x.x.x:443
Este comando prueba varios rangos privados y restringidos para ver si el servidor TURN está configurado para permitir conexiones a las direcciones IP especificadas. Si un rango específico no está prohibido, puedes enumerar este rango más a fondo con los otros comandos proporcionados. Si una IP es alcanzable, significa que el servidor TURN reenviará tráfico a esa IP.
--debug, -d enable debug output (default: false)
--turnserver value, -s value turn server to connect to in the format host:port
--tls Use TLS/DTLS on connecting to the STUN or TURN server (default: false)
--protocol value protocol to use when connecting to the TURN server. Supported values: tcp and udp (default: "udp")
--timeout value connect timeout to turn server (default: 1s)
--username value, -u value username for the turn server
--password value, -p value password for the turn server
--help, -h show help (default: false)
Conexión TURN basada en TCP (conexión desde ti al servidor TURN):
./stunner range-scan -s x.x.x.x:3478 -u username -p password --protocol tcp
Conexión TURN basada en UDP (conexión desde ti al servidor TURN):
./stunner range-scan -s x.x.x.x:3478 -u username -p password --protocol udp
Este es uno de los comandos más útiles para servidores TURN que admiten conexiones TCP a servidores backend. Iniciará un servidor socks5 local sin autenticación y retransmitirá todo el tráfico TCP a través del protocolo TURN (UDP vía SOCKS actualmente no es compatible). Si el servidor está mal configurado, reenviará el tráfico a direcciones internas, por lo que esto puede usarse para alcanzar sistemas internos y abusar del servidor como proxy hacia la red interna. Si eliges también realizar consultas DNS a través de socks, se resolverán usando tu servidor de nombres local, por lo que es mejor trabajar con direcciones IPv4 e IPv6 privadas. Ten en cuenta que este módulo solo puede retransmitir tráfico TCP.
--debug, -d enable debug output (default: false)
--turnserver value, -s value turn server to connect to in the format host:port
--tls Use TLS/DTLS on connecting to the STUN or TURN server (default: false)
--protocol value protocol to use when connecting to the TURN server. Supported values: tcp and udp (default: "udp")
--timeout value connect timeout to turn server (default: 1s)
--username value, -u value username for the turn server
--password value, -p value password for the turn server
--listen value, -l value Address and port to listen on (default: "127.0.0.1:1080")
--drop-public, -x Drop requests to public IPs. This is handy if the target can not connect to the internet and your browser want's to check TLS certificates via the connection. (default: true)
--help, -h show help (default: false)
./stunner socks -s x.x.x.x:3478 -u username -p password -x
Después de iniciar el proxy, abre tu navegador, apunta el proxy en tu configuración a socks5 con una IP de 127.0.0.1:1080 (asegúrate de no activar la opción de omitir direcciones locales, ya que queremos alcanzar las direcciones locales remotas) y llama a la IP de tu elección en el navegador.
Ejemplo: https://127.0.0.1, https://127.0.0.1:8443 o https://[::1]:8443 (estos llamarán a los puertos en el servidor TURN probado desde las interfaces locales).
También puedes configurar proxychains para usar este proxy (pero será muy lento, ya que cada solicitud resulta en múltiples solicitudes para habilitar el proxy). Solo edita /etc/proxychains.conf e ingresa el valor socks5 127.0.0.1 1080 bajo ProxyList.
Ejemplo de nmap a través de este proxy socks5 con proxychains configurado correctamente (nota que es -sT para hacer TCP syns, de lo contrario no usará el proxy socks5)
sudo proxychains nmap -sT -p 80,443,8443 -sV 127.0.0.1
Esto probablemente no arrojará información utilizable, pero puede ser útil para enumerar todos los transportes disponibles (=protocolos hacia sistemas internos) soportados por el servidor. Esto podría mostrar algunas implementaciones de protocolo personalizadas, pero en su mayoría solo devolverá los valores predeterminados.
--debug, -d enable debug output (default: false)
--turnserver value, -s value turn server to connect to in the format host:port
--tls Use TLS/DTLS on connecting to the STUN or TURN server (default: false)
--protocol value protocol to use when connecting to the TURN server. Supported values: tcp and udp (default: "udp")
--timeout value connect timeout to turn server (default: 1s)
--username value, -u value username for the turn server
--password value, -p value password for the turn server
--help, -h show help (default: false)
./stunner brute-transports -s x.x.x.x:3478 -u username -p password
Este comando prueba todas las contraseñas de un archivo dado para un nombre de usuario a través del protocolo TURN (UDP). Esto puede ser útil al analizar un pcap donde se ve el nombre de usuario pero no la contraseña. Ten en cuenta que un ataque de fuerza bruta offline es mucho más rápido en este caso.