Hello there, ('ω')ノ
それほど直接的ではない SSRF の話を。
脆弱性:
SSRF
記事:
https://infosecwriteups.com/a-story-about-a-not-so-direct-ssrf-b2b98e128af0
紹介と偵察:
まともなスコープを持つターゲットをテストしていて。
ターゲットに関するドメイン/サブドメインを見つけるために。
いくつかの基本的なグーグル ドーキングを行った後、スマート認証に。
関連する「デモ テスト」サイトであるサブドメインを見つけて。
これが使用したドークで。
site:target.com -inurl:”https://target.com”
すぐに、3つのフィールドを持つ基本的なページができ。
そのうちの 1 つが URL で。
認証が必要な URL を選択するためのドロップダウン メニューがあり。
(スマート認証を思い出して)
ダミー データを提供してリクエストを傍受した後、アプリケーションが。
提供された「トークン」値を使用して認証を試みていることがわかり。
トークンが無効であるため (ダミー値)、エンド サーバは 401 エラーを返していて。
興味深いことに、アプリケーションはエンドポイント サーバに。
「/some-other-endpoint」を要求していて。
搾取:
URL パラメータに注目し、Burp Suiteのコラボレータの場所を指定すると。
DNS と HTTP リクエストの両方が取得され。
Burp コラボ サーバの応答が HTTP 応答に反映されて。
ここでも同じで、アプリはBurp コラボサーバに。
"/some-other-endpoint" をリクエストしていて。
IP は Google に属し、GCP でホストされていることが判明し。
クラウド メタデータ エンドポイントを指定すると。
403 禁止エラーまたは 404 が見つかりませんが。
サーバがすべての要求に"/some-other-endpoint"を追加していることを思い出して。
クラウド メタデータ エンドポイント
https://github.com/cujanovic/SSRF-Testing/blob/master/cloud-metadata.txt
この欠陥を悪用するには、"/some-other-endpoint"にアクセスしたときに。
アプリケーションをクラウド メタデータ エンドポイントまたは。
localhost:22 などの任意の場所にリダイレクトするサーバを実行する必要があり。
https://github.com/macloo/basic-flask-app でflaskアプリを使用し。
routes.py ファイルに変更を加えることに。
変更点は以下のとおりで。
@app.route(‘/some-other-endpoint’)
def metadata():
return flask.redirect(“http://169.254.169.254/")
https://github.com/macloo/basic-flask-app
ngrok HTTP トンネルを使用することで、ngrok サーバに対する要求は。
5000 ポートで実行されているflask サーバにリダイレクトされ。
URL フィールドに ngrok サーバを指定することで。
"/some-other-endpoint" を含むリクエストが ngrok サーバに対して行われ。
flask アプリがクラウド メタデータにリダイレクトされるため。
メタデータ サーバから応答を取得して。
この方法を使用して、routes.py ファイルを適切に変更することで。
ローカル ファイルを列挙し、内部ホスト/ポート スキャンを実行することができて。
Best regards, (^^ゞ