
このツールは、リクエストのさまざまな部分(パス、ホスト、ヘッダー、POST/GETパラメータ)に事前定義された設定を使用してSSRFを検索します。
example.app-settings.conf を app-settings.conf にリネームし、設定を調整してください。最も重要な設定はコールバックURLです。Burp Collaboratorの使用をお勧めします。 次に、URLを config/url-to-test.txt に追加できます。このスクリプトはドメインだけでなく、パスやクエリパラメータ付きのURLも受け付けます。 必要に応じて、独自のクッキーを config/cookie-jar.txt に追加し、リクエストに追加ヘッダーを設定できます。POST/GETリクエストで使用されるブルートフォースリストは現在小規模です。2000ものパラメータを追加するのは賢明ではないと思います。脆弱性の可能性が最も高いものに焦点を当てるべきです。そう思わない場合は、ご自身で追加してください!
このツールはCLI経由の引数を想定していないため、次のように入力するだけです:
python3 extended-ssrf-search.py
多くのオプションと設定が可能です。以下にいくつかの説明を示します。
メインの設定ファイルは "app-settings.conf" で、すべての設定はこのファイルで行う必要があります! これとは別に、ヘッダー、URL、クッキーなどより複雑なデータを設定できるファイルがいくつかあります。
config/cookie-jar.txt
このファイルを使用してクッキー文字列を追加します。通常はすべてのBurpリクエストで見られるものをコピーします。"Cookie:"ヘッダーの値だけをコピーしてください。デフォルトのファイルにサンプル入力があります。
config/http-headers.txt
このファイルは、リクエストに追加され操作されるHTTPヘッダーを定義します(各ヘッダーにペイロードが追加されます)。最も重要なものはすでにファイルに含まれています。ただし、自由に追加してください。
config/parameters.txt
このツールには、GETおよびPOSTパラメータをブルートフォースするオプションがあります。その場合、これらのパラメータ(クエリ文字列内のものも含む)が使用されます。各パラメータはペイロードを値として受け取ります。最も重要なものはすでにファイルに含まれています。
config/static-request-headers.txt
これらのヘッダーはすべてのリクエストに追加されますが、操作されることはありません。静的です。認証やBearerクッキーを追加するのに最適な場所です。1行につき1つの (キー: 値) です!
config/urls-to-test.txt
これが必要なファイルです! スキャンするリンクをここに追加してください。以下の形式が許可されています:
最後のケースが検出された場合、"http://" が先頭に追加されます。このツールは適切なURLリストで動作することを意図しています。良いリストを入手する方法の1つは、Burpを使用してエクスポートすることです。そうすれば有効なURLリストが得られます。あとはクッキーを追加するだけです。
app-settings.conf はプログラムのワークフローを定義します。最も重要なファイルであり、ここでさまざまなモジュールを有効/無効にできます。
CallbackHost
すべてのDNSおよびHTTPリクエストが送り返されるURL/ホストです。ここでは主にBurp Collaboratorを使用しますが、DNSBinや独自のサーバーでも問題ありません。
HTTPMethod
リクエストメソッドを定義します。有効なオプション:GET、POST、PUT、DELETE、PATCH、GET、OPTIONS 無効な値は大量のエラーを引き起こします(http.clientが他のメソッドを許可しないため)。間違ったことをしてもチェックしません ;)
HTTPTimeout
一部のリクエストには時間がかかる場合があります。ここで1リクエストの最大実行時間を定義します。2〜6秒の値を推奨します。
MaxThreads
スレッドが多いほどスクリプトは高速になりますが、多くの接続を扱うため、個人のコンピュータでは10未満、VPSでは約30に抑えています。
ShuffleTests
特に大規模なURLリストを扱う場合、これを"true"に設定すると、作成されたすべてのテストがシャッフルされます。これにより、同じホストに過度にアクセスするのを防ぎます。1つのホストだけをスキャンする場合は、関係ありません。
GetChunkSize
より大きなパラメータリストを扱う場合に便利で、400 Too Largeエラーを防ぎます。
各挿入ポイントは、有効(true/1に設定)または無効(false/0に設定)にできます。
InPath
例はGETリクエストを示していますが、設定によってはPOST、PUT、DELETEなどになることもあります。
GET [ここにペイロードを挿入] HTTP/1.1
...
InHost
例はGETリクエストを示していますが、設定によってはPOST、PUT、DELETEなどになることもあります。
GET /path HTTP/1.1
Host: [ここにペイロードを挿入]
...
InAdditionalHeaders
例はGETリクエストを示していますが、設定によってはPOST、PUT、DELETEなどになることもあります。
GET /path HTTP/1.1
...
X-Forwarded-For: [ここにペイロードを挿入]
InParamsGet
ここではメソッドはGETに固定されています。
GET /path?[ここにペイロードを挿入] HTTP/1.1
...
InParamsPost
ここではメソッドはPOSTに固定されています。
POST /path HTTP/1.1
...
Content-Type: application/x-www-form-urlencoded
Content-Length: XXX
[ここにペイロードを挿入]
InParamsPostAsJson
ここではメソッドはPOSTに固定されています。
POST /path HTTP/1.1
...
Content-Type: application/json
Content-Length: XXX
[ここにJSONペイロードを挿入]
デフォルト設定では、このツールはSSRFを介してHTTPリクエストをトリガーしようとします。しかし、OSコマンドが注入された場合にDNSを使用してデータを外部に持ち出すことも可能です。最も一般的なペイロードは"$(hostname)"です。この種の攻撃を追加で使用できるオプションがいくつかあります。
UseExecPayload
この設定を使用して、その動作を有効/無効にできます。
ExecPayload
ここで独自のペイロードを定義できます(例:$(uname -a))。
識別を少しだけ容易にするために、現在のホストとメソッド(短縮形、Tests.py参照)の組み合わせがペイロードに追加または先頭に付加されます。
Position
有効なオプションは "append"(追加)と "prepend"(先頭に付加)です!
"append" が選択された場合、ペイロードは次のようになります:
....burpcollaborator.net/www.attacked-domain.com-testmethod
http://....burpcollaborator.net/www.attacked-domain.com-testmethod
"prepend" が選択された場合、ペイロードは次のようになります:
www.attacked-domain.com-testmethod.burpcollaborator.net
http://www.attacked-domain.com-testmethod.burpcollaborator.net/
トンネル(例:"127.0.0.1:8080"(Burp Proxy))を使用して、Burp内のすべてのトラフィックを監視することも可能です。
Active
これを"true"に設定すると、スクリプトはトンネル接続を使用します。
Tunnel
プロキシサーバーを "ip:port" の形式で設定します。
結果は次のようになります。Burpを開くとHTTP履歴を確認できます:


Issueを作成し、機能リクエストとしてタグを付けてください。
このツールは気に入りましたか? バウンティ獲得に役立ちましたか? 何か返したい/サポートしたいですか? ぜひ!