Hello there, ('ω')ノ
概要
このラボでは、隠されたAPIエンドポイントを特定し、それを悪用して「Lightweight l33t Leather Jacket」を無料で購入することが目的です。エラーメッセージを活用し、適切なリクエストを構築することで、APIの不備を突く方法を学びます。
手順
1. アプリケーションにアクセスし、商品ページを確認
- Burp Suiteのブラウザでラボにアクセス。
- 任意の商品の詳細ページを開く。
2. APIエンドポイントの調査
- Burp Suiteの Proxy > HTTP history でAPIリクエストを確認。
- 商品情報を取得するAPIリクエストを見つける(例:
/api/products/3/price
)。 - 右クリック → "Send to Repeater" でRepeaterに送る。
3. HTTPメソッドを変更し、利用可能なメソッドを調査
- GET → OPTIONS に変更し、リクエストを送信。
- レスポンスの
Allow
ヘッダーを確認(例:GET, PATCH
が許可されている)。
👉 PATCHメソッドがサポートされていることを確認 → 価格を変更できる可能性あり!
4. PATCHメソッドを試し、認証の必要性を確認
- GET → PATCH に変更し、リクエストを送信。
Unauthorized
エラーが発生(ログインが必要)。
5. ログインして認証をクリア
- Burp Suiteのブラウザで wiener:peter でログイン。
- 再び商品ページにアクセスし、レザー ジャケットのAPIリクエストをキャプチャ。
6. PATCHリクエストで価格変更を試す
- PATCH
/api/products/1/price
をRepeaterに送る。 - 送信すると Content-Typeエラー が発生(
application/json
が必要)。
👉 Content-Type: application/json
を追加
👉 リクエストボディに {}
を追加し送信 → price
パラメータが必要というエラーが発生
7. 価格を $0 に変更
- リクエストボディを
{ "price": 0 }
に変更し、PATCHリクエストを送信。 - 価格が $0 に変更されることを確認。
PATCH /api/products/1/price HTTP/1.1 Host: example.com Content-Type: application/json { "price": 0 }
8. 無料でジャケットを購入
- ブラウザでジャケットの商品ページをリロードし、価格が $0 になっていることを確認。
- ジャケットをカートに追加し、注文を確定。
まとめとポイント
✅ OPTIONSメソッドを使って、APIが許可するHTTPメソッドを調査する
✅ PATCHメソッドを活用し、価格の変更を試みる
✅ エラーメッセージを手掛かりに、適切なリクエストを構築する
✅ 認証が必要なエンドポイントには、ログインしてからリクエストを試す
このような脆弱性は、APIが適切なアクセス制御を行っていない場合に発生します。実際のペンテストでも、APIのリクエストを細かく変更し、隠れた脆弱性を発見することが重要です。
Best regards, (^^ゞ