
surf を使用すると、ホストのリストをフィルタリングし、有効なSSRF候補のリストを取得できます。仕組みとしては、各ホストに対して自身のマシンからHTTPリクエストを送信し、応答がなかったすべてのホストを収集し、それらを外部向けホストと内部向けホストに分類します。
その後、SSRF脆弱性が存在する可能性のある場所で、これらのホストを試すことができます。ほとんどのSSRFフィルターは内部IP範囲や制限されたIP範囲のみに焦点を当てているため、自身のマシンからHTTP(s)でアクセスできない外部IPでSSRFを確認できたときは、驚くことでしょう。
多くの場合、クラウド環境を持つ大企業では、内部Webアプリケーションに外部IPが割り当てられていることがあります。従来のSSRFフィルターは、これらのホストがブラックリストに明示的に追加されない限り(通常は追加されません)、捕捉できません。そのため、この手法は非常に強力になり得ます。
このツールは、HTTPプロービングに httpx を利用するため、Go 1.19 以降が必要です。
以下のコマンドでインストールできます:
go install github.com/assetnote/surf/cmd/surf@latest
bigcorp.txt というファイルに bigcorp.com のサブドメインが含まれていると仮定し、それらのサブドメインに対するすべてのSSRF候補を見つけたい場合の例を以下に示します:
# すべてのSSRF候補を検出(HTTPプロービングにより外部IPアドレスも含む)
surf -l bigcorp.txt
# タイムアウトと並行処理数を指定してすべてのSSRF候補を検出(HTTPプロービングにより外部IPアドレスも含む)
surf -l bigcorp.txt -t 10 -c 200
# すべてのSSRF候補を検出し(HTTPプロービングにより外部IPアドレスも含む)、ホストのみを出力
surf -l bigcorp.txt -d
# 内部/プライベートIPアドレスを指すすべてのホストを検出(HTTPプロービングなし)
surf -l bigcorp.txt -x
設定項目の全リストは以下を参照してください:
❯ surf -h
███████╗██╗ ██╗██████╗ ███████╗
██╔════╝██║ ██║██╔══██╗██╔════╝
███████╗██║ ██║██████╔╝█████╗
╚════██║██║ ██║██╔══██╗██╔══╝
███████║╚██████╔╝██║ ██║██║
╚══════╝ ╚═════╝ ╚═╝ ╚═╝╚═╝
by shubs @ assetnote
Usage: surf [--hosts FILE] [--concurrency CONCURRENCY] [--timeout SECONDS] [--retries RETRIES] [--disablehttpx] [--disableanalysis]
Options:
--hosts FILE, -l FILE
アセットのリスト(ホストまたはサブドメイン)
--concurrency CONCURRENCY, -c CONCURRENCY
スレッド数(httpxに渡されます) - デフォルト100 [デフォルト: 100]
--timeout SECONDS, -t SECONDS
タイムアウト秒数(httpxに渡されます) - デフォルト3 [デフォルト: 3]
--retries RETRIES, -r RETRIES
エラー時のリトライ回数(httpxに渡されます) - デフォルト2 [デフォルト: 2]
--disablehttpx, -x httpxを無効にし、内部IPアドレスに解決されるホストのリストのみを出力 - デフォルトfalse [デフォルト: false]
--disableanalysis, -d 分析を無効にし、ホストのリストのみを出力 - デフォルトfalse [デフォルト: false]
--help, -h このヘルプを表示して終了
surf を実行すると、SSRF候補が stdout に出力されますが、実行元のフォルダ内に2つのファイルも保存されます:
external-{timestamp}.txt - 外部解決されるが、自分のマシンからHTTPリクエストを送信できないホストinternal-{timestamp}.txt - 内部解決され、明らかに自分のマシンからHTTPリクエストを送信できないホストこれらの2つのファイルには、ターゲットで試すのに理想的なSSRF候補のホストリストが含まれています。外部ターゲットリストは、内部リストよりも有効である可能性が高くなります。
内部では、このツールはHTTPプロービングに httpx を利用しています。httpxから返されるエラーを取得し、基本的な分析を実行して、最も有効なSSRF候補を特定します。
このツールは、HackerOne(H1-4420 2023)のライブハッキングイベントの成果として作成されました。