Shikata Ga Nai

Private? There is no such things.

LAB: 基本的なSSRFを利用したローカルサーバー攻撃

Hello there, ('ω')ノ

このラボでは、SSRF(Server-Side Request Forgery)を利用して管理インターフェースにアクセスし、ユーザー「carlos」を削除する ことが目的です。
アプリケーションには「在庫チェック機能」があり、これが 内部システムのデータを取得する ようになっています。この機能を悪用して、サーバー自身の管理ページ(http://localhost/admin)にアクセスします。


🔍 攻撃の手順

1. 直接 /admin にアクセスできるか確認する

まず、ブラウザで http://YOUR-LAB-ID.web-security-academy.net/admin にアクセスしてみます。
アクセス拒否されることを確認 してください。

これは、管理者ページが 外部アクセスをブロック しているためです。
ただし、サーバー内部からのリクエストならアクセスできる可能性があります


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

次に、SSRFのエントリーポイントを探すために「在庫チェック機能」を利用 します。

  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://stock.weliketoshop.net:8080/product/stock/check?productId=6&storeId=1

このリクエストは、サーバーが 指定されたURLにリクエストを送信する 仕組みになっています。
ここで stockApi パラメータを悪用 すれば、サーバー自身(localhost)へのリクエストを強制できます。


3. stockApi パラメータを書き換えて /admin にアクセスする

Burp Suite の Repeater にリクエストを送信し、stockApihttp://localhost/admin に変更します。

修正後のリクエスト:

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://localhost/admin

▶ 「Send」ボタンをクリックして実行

成功すると、レスポンスに /admin のHTMLが含まれるはずです
HTMLを解析し、削除リクエストのURLを探します


4. ユーザー「carlos」を削除する

レスポンスのHTMLを確認すると、管理インターフェースにユーザー削除機能があることがわかります。
例えば、次のような削除リンクが存在するかもしれません。

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

これを利用し、stockApi のURLを /admin/delete?username=carlos に変更 します。

最終リクエスト:

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://localhost/admin/delete?username=carlos

▶ 「Send」ボタンをクリック

成功すると、carlos のアカウントが削除され、ラボがクリアされます!


🎯 まとめ

  1. 直接 /admin にアクセスできないことを確認
  2. 在庫チェック機能を使い、Burp Suite でリクエストをキャプチャ
  3. stockApihttp://localhost/admin に変更し、管理ページのHTMLを取得
  4. stockApihttp://localhost/admin/delete?username=carlos に変更し、ユーザーを削除
  5. ラボクリア!🎉

Best regards, (^^ゞ