Bypassing 2FA: My Unforgettable Experience から学ぶ

ソース:

medium.com

脆弱性:JWT, OTP

 

訳:

対象者について:

ターゲットの名前を明らかにすることは許可されていませんが、これはコーディングなしでモバイル アプリケーションを作成できるインドの人気 Web サイトです。

私は偵察ではなく、メインのアプリケーションに集中しました。
そこで、その Web サイトでアカウントを作成し、XSS、IDOR、SSRF などのバグを探し始めましたが、残念ながら見つかりませんでした。 

実際の問題:

バグが見つからず諦めかけていたところ、2FAを有効にするオプションが表示されたので「2FAに関連する問題がないか確認してみよう」と思い、Google Authenticatorを使用してアカウントで2FAを有効にしてログインしました。
アカウントから出ます。
ログイン ページに移動してログイン資格情報を入力すると、Web サイトで OTP コードを要求されたため、ランダムな 6 桁のコードを入力し、げっぷで HTTP リクエストをキャプチャしました。
HTTP リクエストは次のようになります。
これは、OTP 値が JWT データを通じて送信されるため、通常の Web サイトではこれを行わないため、少し珍しいことです。

 

2FA 検証リクエス

そこで、単に jwt.io にアクセスして JWT 値をデコードし、これを取得し

 

 

ペイロード データが空で、ヘッダーに値を含むパラメーターが多数あることがわかりました。
OTP 値を「111111」から null に変更することにしました。
そのため、「111111」を削除し、そこに null を入力しました。
空白のままにすることもできます。
ウェブサイト(jwt.io)が自動的にjwtトークンを変更することを変更した後、それをコピーして、ログインページに移動し、資格情報を入力し、ランダムなOTPを入力して、burpでリクエストをキャプチャし、今回は単にJWTを置き換えましたコピーしたデータとBOOMで2FAをバイパスしました。 

再現する手順:

1 https://accounts.test.com/loginに移動します。

2 有効な電子メールとパスワードを入力します (アカウントで 2FA が有効になっていることを確認してください)

3 ログインすると、システムは 2FA 検証を求めるプロンプトを表示します。

4 ランダムな OTP コードを入力し、burp suite で HTTP リクエストをキャプチャします。

5 ペイロードパラメータには、JWT 'eyJ1c2VybmFtZSI6InRlc3RAdGVzdC5jb20iLCJvdHAiOiIxMTExMTEiLCJ1c2VyX2NvdW50cnkiOiJOUCISImlwIjoiNjkuNjQuMTYzLjY5IiwiYnJvd3NlciI6ImNocm9」が表示されます。 tZSIsIm9zX25hbWUiOiJMaW51eCIsImxhbmciOiJlcyIsImZpbGVfbmFtZSI6ImE0ZDBmMjYyYTgyN2ZhNDAxMmI0YmQ4NGRLYTUxNTE0IiwidXNlcmNoZWNrIjoiNzM4NDEyMDAZZTBIODE4NTZ IZTMzMWUyYTRlZWZkMDAILCJsb2dpbl9ieSI6ImVtYWlsIiwibG9naW5fdHlwZSI6ImVtYWlsIiwiYWxnIjoiSFMyNTYifQ.e30.ofl8BM5Fnb5XQP6epymYlkNtfQXjS5ZPo7tyOGS53fA'

6 jwt.io に移動し、OTP を null に変更し、HTTP リクエスト内の JWT を置き換えます。

7 2F​​A をバイパスできるようになります

 

ほなほな。