Shikata Ga Nai

Private? There is no such things.

LAB: パスワードリセット機能のロジック不備を突いたアカウント乗っ取り

Hello there, ('ω')ノ

🔐 概要

このラボでは、パスワードリセット機能に存在するロジックの不備を悪用し、他人のアカウント(carlos)のパスワードをリセットして不正にログインする方法を学びます。


🎯 攻略目標

  • carlos のパスワードをリセットする
  • carlos のアカウントにログインし、「My account」ページにアクセスする

🛠 攻略手順

1. 自分のアカウントでパスワードリセットを試す

  1. ブラウザでラボを開き、「Forgot your password?」リンクをクリックします。
  2. ユーザー名として wiener を入力し、パスワードリセットをリクエストします。
  3. 「Email client」ボタンをクリックして、送信されたリセットメールを確認します。
  4. メール内のリンクをクリックし、新しいパスワードを設定します(例: peter123)。

2. Burp Suite でリクエストを確認

  1. Burp Suite の「Proxy」>「HTTP history」タブで、パスワードリセット時のリクエストを確認します。
  2. POST /forgot-password?temp-forgot-password-token=... のリクエストを右クリックし、「Send to Repeater」を選択します。

3. トークンの検証が行われていないことを確認

  1. Repeater タブで、URL の temp-forgot-password-token パラメータの値を削除します。
  2. リクエストボディ内の同名パラメータの値も削除します。
  3. リクエストを送信し、パスワードリセットが成功することを確認します。

4. carlos のパスワードをリセット

  1. 再度、POST /forgot-password リクエストを Repeater に送信します。
  2. URL とリクエストボディ内の temp-forgot-password-token パラメータの値を削除します。
  3. リクエストボディ内の username パラメータの値を carlos に変更します。
  4. 新しいパスワード(例: newpassword123)を設定し、リクエストを送信します。

5. carlos のアカウントにログイン

  1. ブラウザでログインページに戻り、ユーザー名 carlos と新しく設定したパスワードでログインします。
  2. 「My account」ページにアクセスし、ラボが解決されたことを確認します。

💡 攻略のポイント

  • パスワードリセット時に使用されるトークンがサーバー側で検証されていないため、任意のユーザーのパスワードをリセット可能です。
  • Burp Suite を使用してリクエストを改ざんし、他人のアカウント情報を変更することができます。

🧠 学習の要点

  • トークンの検証不足: パスワードリセットトークンがサーバー側で適切に検証されていないと、重大なセキュリティリスクとなります。
  • クライアント側の検証に依存しない: クライアント側での検証だけでは不十分であり、サーバー側でも厳格な検証が必要です。
  • リクエストの改ざん: 攻撃者はリクエストを自由に改ざんできるため、すべての入力を信頼せず、サーバー側での検証を徹底する必要があります。

Best regards, (^^ゞ