Shikata Ga Nai

Private? There is no such things.

LAB: 未使用のAPIエンドポイントを発見し悪用する

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