
Тестируйте и эксплуатируйте серверы STUN/TURN на предмет неправильных конфигураций, обеспечивая перемещение по внутренней сети через SOCKS-прокси, атаки утечки памяти и внутреннее сканирование портов.
Stunner — это инструмент для тестирования и эксплуатации STUN, TURN и TURN поверх TCP серверов. TURN — это протокол, в основном используемый в видеоконференциях и аудиочатах (WebRTC).
Если вы найдёте неправильно настроенный сервер, вы сможете использовать этот инструмент для запуска локального socks-прокси, который будет перенаправлять весь трафик через протокол TURN во внутреннюю сеть за сервером.
Я разработал этот инструмент во время тестирования Cisco Expressway, что привело к обнаружению нескольких уязвимостей: https://firefart.at/post/multiple_vulnerabilities_cisco_expressway/
Чтобы получить необходимые имя пользователя и пароль, их нужно извлечь с помощью внешнего метода, например, перехватив запрос Connect из веб-браузера с помощью Burp. Я добавил пример рабочего процесса внизу readme, показывающий, как бы вы тестировали такой сервер.
Эта работа лицензирована в соответствии с Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. Чтобы просмотреть копию этой лицензии, посетите http://creativecommons.org/licenses/by-nc-sa/4.0/ или отправьте письмо в Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
STUN: RFC 5389
TURN: RFC 5766
TURN для TCP: RFC 6062
Расширение TURN для IPv6: RFC 6156
Эта команда выводит информацию о STUN или TURN сервере, такую как поддерживаемые протоколы и атрибуты, например, используемое ПО.
--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
Эта команда проверяет несколько частных и ограниченных диапазонов, чтобы определить, настроен ли TURN сервер на разрешение соединений с указанными IP-адресами. Если конкретный диапазон не запрещён, вы можете дополнительно просканировать его с помощью других команд. Если IP-адрес достижим, это означает, что TURN сервер будет перенаправлять трафик на этот 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)
TCP-подключение к TURN (соединение от вас к TURN серверу):
./stunner range-scan -s x.x.x.x:3478 -u username -p password --protocol tcp
UDP-подключение к TURN (соединение от вас к TURN серверу):
./stunner range-scan -s x.x.x.x:3478 -u username -p password --protocol udp
Это одна из самых полезных команд для TURN серверов, поддерживающих TCP-соединения к внутренним серверам. Она запускает локальный socks5 сервер без аутентификации и перенаправляет весь TCP-трафик через протокол TURN (UDP через SOCKS в настоящее время не поддерживается). Если сервер неправильно настроен, он будет перенаправлять трафик на внутренние адреса, поэтому это можно использовать для доступа к внутренним системам и использования сервера в качестве прокси во внутреннюю сеть. Если вы также настроите выполнение DNS-запросов через socks, они будут разрешаться с помощью вашего локального DNS-сервера, поэтому лучше работать с частными IPv4 и IPv6 адресами. Учтите, что этот модуль может перенаправлять только 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
После запуска прокси откройте браузер, укажите в настройках прокси socks5 с IP 127.0.0.1:1080 (обязательно не отключайте опцию "обход прокси для локальных адресов", так как нам нужно обращаться к удалённым локальным адресам) и перейдите по нужному IP в браузере.
Пример: https://127.0.0.1, https://127.0.0.1:8443 или https://[::1]:8443 (это вызовет порты на тестируемом TURN сервере через локальные интерфейсы).
Вы также можете настроить proxychains на использование этого прокси (но это будет очень медленно, так как каждый запрос приводит к множеству запросов для установки проксирования). Просто отредактируйте /etc/proxychains.conf и добавьте значение socks5 127.0.0.1 1080 в раздел ProxyList.
Пример nmap через этот socks5 прокси с правильно настроенным proxychains (обратите внимание на -sT для TCP SYN, иначе прокси не будет использоваться)
sudo proxychains nmap -sT -p 80,443,8443 -sV 127.0.0.1
Эта команда, скорее всего, не даст полезной информации, но может быть полезна для перечисления всех доступных транспортов (=протоколов для внутренних систем), поддерживаемых сервером. Это может показать некоторые нестандартные реализации протоколов, но в основном вернёт только значения по умолчанию.
--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
Эта команда перебирает все пароли из указанного файла для заданного имени пользователя через протокол TURN (UDP). Это может быть полезно при анализе pcap-файла, где видно имя пользователя, но не пароль. Обратите внимание, что офлайн-брутфорс в этом случае будет намного быстрее.