Shikata Ga Nai

Private? There is no such things.

LAB: HTTPメソッドベースアクセス制御の回避

Hello there, ('ω')ノ

🎯 ラボの目標

  • /admin には管理者のみアクセス可能
  • 管理者は特定の機能(ユーザー昇格)を POST リクエストで実行できる
  • 非管理者アカウントでメソッド制御を回避し、自分を管理者にする

手順

Step 1: 管理者アカウントで挙動を確認

  1. administrator:admin でログイン
  2. /admin にアクセス
  3. carlos を昇格するボタンを押す
  4. Burp Suite でリクエストをキャプチャし、Repeaterに送信

    • 例:

      POST /admin/promote HTTP/1.1
      Cookie: session=...
      username=carlos
      

Step 2: 非管理者アカウントで制御回避を試す

  1. プライベートブラウザで wiener:peter でログイン
  2. この非管理者の session Cookie をコピー
  3. Step 1 の Burp Repeater リクエストの Cookie を上書き
  4. そのまま送ると「Unauthorized」 → アクセス拒否される

Step 3: HTTPメソッドを変更

  1. Repeaterでメソッドを POSTX に変える → 「missing parameter」と返る → これはバックエンドが完全にメソッドで制御していないサイン
  2. 右クリック → Change request methodGET に変更
  3. パラメータをURLクエリに入れる:
   GET /admin/promote?username=wiener HTTP/1.1
   Cookie: session=<非管理者のCookie>
  1. 送信すると、自分(wiener)が管理者に昇格

✅ 学べるポイント

  • HTTPメソッドベースのアクセス制御は危険

    • フロントやルーターの設定でPOSTだけを制御しても、GETなどで回避可能
  • テスト手順の鉄則

    1. 管理者の正規リクエストをキャプチャ
    2. 権限の低いユーザーで同じリクエストを試す
    3. メソッド・URL形式・パラメータの位置を変えて送信

Best regards, (^^ゞ