Hello there, ('ω')ノ
🎯 ラボの目的
- 自分(
wiener
)のパスワードリセット機能を使って動作を観察。 - トークンなしでもパスワードが変更できることを確認。
- それを応用し、
carlos
のパスワードを任意に変更。 - 変更後、carlos でログイン → 「My account」ページにアクセス → 🎉 ラボクリア!
🔐 初期情報
- 自分のアカウント:
ユーザー名: wiener
パスワード: peter
- 乗っ取り対象:
ユーザー名: carlos
🧪 攻略手順(Burp Suite使用)
1. 自分のパスワードをリセット
- 「Forgot your password?」をクリックし、ユーザー名
wiener
を入力。 - 「Email client」でメールを確認し、リセットリンクをクリック。
- 任意の新しいパスワードに変更。
2. Burpでリクエストを分析
- Burpの Proxy > HTTP history を開く。
POST /forgot-password?temp-forgot-password-token=...
を確認。- ボディ内にも以下のような内容があるはず:
username=wiener
new-password-1=abc12345
new-password-2=abc12345
3. Repeaterでテスト
上記リクエストを Repeater に送り、次のように変更して送信:
- URLの
temp-forgot-password-token
パラメータ:空にする - ボディの
temp-forgot-password-token
:削除するか空に username
:carlos
に変更- パスワード:任意(例:
testpass123
)
- URLの
4. carlos でログインして確認
- ブラウザに戻ってログアウト。
- ユーザー名
carlos
/ パスワードtestpass123
でログイン。 - 「My account」をクリック → 🎉 ラボクリア!
🔍 脆弱性の正体
問題点 | 解説 |
---|---|
トークンのチェックがない | リセット時にトークンを検証していないため、誰でも誰のパスワードでも変更可能 |
usernameがフォームで指定可能 | 任意のユーザーに変更して送信できてしまう |
URLとボディのトークンの存在が無意味 | セキュリティ設計が形骸化している |
🛡 防御策(開発者向け)
- パスワードリセットフォームでは、トークンをサーバー側で必ず検証。
- トークンとユーザーIDをサーバーで紐づけ、外部からの改ざんを無効化。
- トークンは一度のみ有効で短時間で失効すべき。
🔐 パスワードリセットは「セキュリティの抜け道」になりやすい機能です。トークンが付いていれば安全と思い込まず、そのトークンが実際に検証されているかを確実にテストしましょう!
Best regards, (^^ゞ