Hello there, ('ω')ノ
🔐 概要
このラボでは、パスワードリセット機能に存在するロジックの不備を悪用し、他人のアカウント(carlos)のパスワードをリセットして不正にログインする方法を学びます。
🎯 攻略目標
- carlos のパスワードをリセットする
- carlos のアカウントにログインし、「My account」ページにアクセスする
🛠 攻略手順
1. 自分のアカウントでパスワードリセットを試す
- ブラウザでラボを開き、「Forgot your password?」リンクをクリックします。
- ユーザー名として
wiener
を入力し、パスワードリセットをリクエストします。 - 「Email client」ボタンをクリックして、送信されたリセットメールを確認します。
- メール内のリンクをクリックし、新しいパスワードを設定します(例:
peter123
)。
2. Burp Suite でリクエストを確認
- Burp Suite の「Proxy」>「HTTP history」タブで、パスワードリセット時のリクエストを確認します。
POST /forgot-password?temp-forgot-password-token=...
のリクエストを右クリックし、「Send to Repeater」を選択します。
3. トークンの検証が行われていないことを確認
- Repeater タブで、URL の
temp-forgot-password-token
パラメータの値を削除します。 - リクエストボディ内の同名パラメータの値も削除します。
- リクエストを送信し、パスワードリセットが成功することを確認します。
4. carlos のパスワードをリセット
- 再度、
POST /forgot-password
リクエストを Repeater に送信します。 - URL とリクエストボディ内の
temp-forgot-password-token
パラメータの値を削除します。 - リクエストボディ内の
username
パラメータの値をcarlos
に変更します。 - 新しいパスワード(例:
newpassword123
)を設定し、リクエストを送信します。
5. carlos のアカウントにログイン
- ブラウザでログインページに戻り、ユーザー名
carlos
と新しく設定したパスワードでログインします。 - 「My account」ページにアクセスし、ラボが解決されたことを確認します。
💡 攻略のポイント
- パスワードリセット時に使用されるトークンがサーバー側で検証されていないため、任意のユーザーのパスワードをリセット可能です。
- Burp Suite を使用してリクエストを改ざんし、他人のアカウント情報を変更することができます。
🧠 学習の要点
- トークンの検証不足: パスワードリセットトークンがサーバー側で適切に検証されていないと、重大なセキュリティリスクとなります。
- クライアント側の検証に依存しない: クライアント側での検証だけでは不十分であり、サーバー側でも厳格な検証が必要です。
- リクエストの改ざん: 攻撃者はリクエストを自由に改ざんできるため、すべての入力を信頼せず、サーバー側での検証を徹底する必要があります。
Best regards, (^^ゞ