Shikata Ga Nai

Private? There is no such things.

A story about a not-so-direct SSRFを訳してみた

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, (^^ゞ