Hello there, ('ω')ノ
🎯 目的
このラボでは、Server-side Parameter Pollution(SSPP) 脆弱性を利用して、管理者アカウントとしてログインし、ユーザー carlos を削除することでクリアします。
🧪 攻撃の手順まとめ
✅ 1. パスワードリセットをトリガー
Burpのブラウザで administrator のパスワードリセットを実行
✅ 2. POST /forgot-password
リクエストを Repeater に送信
- username を
administrator
→administratorx
にしてみて、Invalid username
エラーが出ることを確認
✅ 3. SSPPテスト①:URLエンコードした &
でパラメータ追加を試みる
username=administrator%26x=y
→ Parameter is not supported
エラーが出る → パラメータが分割されて解釈された証拠!
✅ 4. SSPPテスト②:%23
(URLエンコードした #
)でクエリ切り捨てを試す
username=administrator%23
→ Field not specified
エラー → 内部で field
パラメータが必須?
✅ 5. field
パラメータを注入し、%23
で打ち切る
username=administrator%26field=x%23
→ Invalid field
エラー → field
パラメータが有効だが値が不正な場合の反応!
✅ 6. Burp Intruderで field
の値を総当たり(ブルートフォース)
username=administrator%26field=§x§%23
- Intruder Payload List → Server-side variable names を使用
email
とusername
の2つが200 OK
を返す → 有効なフィールド!
✅ 7. field=email
を指定して送信
username=administrator%26field=email%23
→ 正常なレスポンス → 有効なフィールドであることが確定!
✅ 8. JavaScriptファイルから reset_token
を発見
/static/js/forgotPassword.js
を確認- パスワードリセットに使用される
reset_token
が存在する
✅ 9. field=reset_token
を使ってリセットトークンを入手
username=administrator%26field=reset_token%23
→ パスワードリセットトークンがレスポンスに表示される!
✅ 10. トークンを使ってパスワードリセット
- Burpのブラウザで以下のようなURLにアクセス:
/forgot-password?reset_token=<取得したトークン>
- 新しいパスワードを設定(任意)
✅ 11. 新しいパスワードでログイン
- ユーザー:
administrator
- パスワード:先ほど設定したもの
✅ 12. Adminページにアクセスして carlos を削除
→ ラボクリア!
✅ まとめ:この攻撃のポイント
攻撃手法 | 解説 |
---|---|
%26 (エンコードした & ) |
パラメータを分割してサーバー内部APIに追加する |
%23 (エンコードした # ) |
クエリを途中で切り捨てて制御フローを操作する |
Intruderで field の値を総当たり |
内部APIが受け付けるフィールドを発見 |
パラメータ注入で reset_token を取得 |
管理者アカウントの乗っ取りに成功! |
このラボは、SSPPのクエリ文字列における非常にリアルで強力な攻撃手法を学べる内容になっています。複数のサーバー処理とエラーメッセージの観察から脆弱性を丁寧に掘り下げていくのが成功の鍵です。
Best regards, (^^ゞ