
Testar e explorar servidores STUN/TURN por configurações incorretas, permitindo o pivoteamento de rede interna via proxy SOCKS, ataques de vazamento de memória e varredura de portas internas.
Stunner é uma ferramenta para testar e explorar servidores STUN, TURN e TURN sobre TCP. TURN é um protocolo usado principalmente em videoconferências e chats de áudio (WebRTC).
Se você encontrar um servidor mal configurado, pode usar esta ferramenta para abrir um proxy socks local que retransmite todo o tráfego via protocolo TURN para a rede interna atrás do servidor.
Desenvolvi esta ferramenta durante um teste do Cisco Expressway, que resultou em algumas vulnerabilidades: https://firefart.at/post/multiple_vulnerabilities_cisco_expressway/
Para obter o nome de usuário e senha necessários, você precisa buscá-los usando um método fora de banda, como farejar a solicitação Connect de um navegador web com Burp. Adicionei um exemplo de fluxo de trabalho no final do readme sobre como você testaria tal servidor.
Este trabalho está licenciado sob a Licença Creative Commons Atribuição-NãoComercial-CompartilhaIgual 4.0 Internacional. Para visualizar uma cópia desta licença, visite http://creativecommons.org/licenses/by-nc-sa/4.0/ ou envie uma carta para Creative Commons, PO Box 1866, Mountain View, CA 94042, EUA.
STUN: RFC 5389
TURN: RFC 5766
TURN para TCP: RFC 6062
Extensão do TURN para IPv6: RFC 6156
Este comando exibirá algumas informações sobre o servidor stun ou turn, como protocolos suportados e atributos, como o 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 tenta várias faixas privadas e restritas para ver se o servidor TURN está configurado para permitir conexões aos endereços IP especificados. Se uma faixa específica não for proibida, você pode enumerar essa faixa com os outros comandos fornecidos. Se um IP for alcançável, significa que o servidor TURN encaminhará tráfego para este 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)
Conexão TURN baseada em TCP (conexão sua para o servidor TURN):
./stunner range-scan -s x.x.x.x:3478 -u username -p password --protocol tcp
Conexão TURN baseada em UDP (conexão sua para o servidor TURN):
./stunner range-scan -s x.x.x.x:3478 -u username -p password --protocol udp
Este é um dos comandos mais úteis para servidores TURN que suportam conexões TCP para servidores de backend. Ele iniciará um servidor socks5 local sem autenticação e retransmitirá todo o tráfego TCP através do protocolo TURN (UDP via SOCKS não é suportado atualmente). Se o servidor estiver mal configurado, ele encaminhará o tráfego para endereços internos, então isso pode ser usado para alcançar sistemas internos e abusar do servidor como um proxy para a rede interna. Se você optar por também fazer consultas DNS via socks, elas serão resolvidas usando seu servidor de nomes local, portanto é melhor trabalhar com endereços IPv4 e IPv6 privados. Esteja ciente de que este módulo só pode retransmitir tráfego 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
Após iniciar o proxy, abra seu navegador, aponte o proxy nas configurações para socks5 com um IP de 127.0.0.1:1080 (certifique-se de não marcar a opção de ignorar endereço local, pois queremos alcançar os endereços locais remotos) e chame o IP de sua escolha no navegador.
Exemplo: https://127.0.0.1, https://127.0.0.1:8443 ou https://[::1]:8443 (esses chamarão as portas no servidor TURN testado a partir das interfaces locais).
Você também pode configurar proxychains para usar este proxy (mas será muito lento, pois cada requisição resulta em múltiplas requisições para habilitar o proxy). Basta editar /etc/proxychains.conf e inserir o valor socks5 127.0.0.1 1080 em ProxyList.
Exemplo de nmap através deste proxy socks5 com proxychains configurado corretamente (note que é -sT para fazer TCP syn, caso contrário não usará o proxy socks5)
sudo proxychains nmap -sT -p 80,443,8443 -sV 127.0.0.1
Provavelmente não produzirá informações úteis, mas pode ser útil para enumerar todos os transportes disponíveis (=protocolos para sistemas internos) suportados pelo servidor. Isso pode mostrar algumas implementações de protocolo personalizadas, mas na maioria das vezes retornará apenas os padrões.
--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 tenta todas as senhas de um arquivo fornecido para um nome de usuário através do protocolo TURN (UDP). Isso pode ser útil ao analisar um pcap onde você pode ver o nome de usuário, mas não a senha. Observe que uma força bruta offline é muito mais rápida neste caso.