Shikata Ga Nai

Private? There is no such things.

Full account takeover worth $1000 Think out of the boxを訳してみた

Hello there, ('ω')ノ

 

完全なアカウントの乗っ取りを。

 

脆弱性:

 アカウントの乗っ取り

 CSRF

 IDOR

 

記事:

 https://mokhansec.medium.com/full-account-takeover-worth-1000-think-out-of-the-box-808f0bdd8ac7

 

ターゲットをexample.comと呼ぶことに。

機能は、アカウントの作成、ログイン、パスワードの変更などがあって。

いつものように2つのアカウントを作成して。

最初にサインアップして被害者のアカウントでログインして。

Burp Suiteのすべてのリクエストとレスポンスを確認すると。

CSRF攻撃を防ぐために何らかのCSRFトークンを使用していることがわかって。

 

また、すべてのユーザにuserIDを割り当てているWebサイトを見つけて。

6桁のIDなのでIDを簡単に推測できて。

 POST /api/user/123456/edit

 

次に、被害者のアカウントのままでアカウント設定に移動して。

情報の一部を変更して、リクエストをキャプチャします。

 

f:id:ThisIsOne:20210819083332p:plain

 

次に攻撃者のアカウントでサインアップしてログインして。

上のスクリーンショットでわかるようにユーザ名の変更機能で。

被害者の情報を変更しようとしましたが、何も起こらず。

 

メールの変更ページも確認しても。

被害者のCSRFトークンがないと情報を変更できないようで。

CSRFトークンを削除したりPOSTをGETに変更しても、何も起こらず。

 

なので、他のウェブサイトの機能を調べることに。

すると、パスワード変更機能でどのように実装したかを確認したら。

パスワードを変更する際、現在のパスワードを入力してから。

新しいパスワードを入力する必要があって。

現在のパスワードパラメータを削除しても。

ユーザのパスワードを変更できることがわかって。

つまり、古いパスワードを知らなくてもパスワードを変更できて。

 

f:id:ThisIsOne:20210819083149p:plain

 

友人のハッカーは自分のプライベートプログラムでCSRFバグを見つけて。

他のユーザの通知をオン/オフすることができていたので。

他のユーザのメールアドレスや名前などを変更しようとしない理由を尋ねると。

彼は、ウェブサイトが変更情報ページでCSRFトークンを検証していて。

通知のオン/オフは、オンではないと言っていたので。

 

その後、パスワード変更ページのCSRFトークンが検証されているかを確認して。

下記のようにnullを使用すると。

CSRFトークンの代わりにcsrf_tokenトークンを削除すると。

パスワードを変更できることがわかって。

 

f:id:ThisIsOne:20210819083217p:plain

 

ただ、別のユーザのパスワードを変更する場合(ログインするために)は。

そのユーザの電子メールを知っている必要があって。

スクリーンショットを注意深く見ると、userIDがないことがわかり。

下記などを確認しても、何も起こらず。

 /api/user/userID/change_password

 

そこで、最後の手段を試すことに。

今、JSON本体でuserIDを使用できるかどうかを考えているものの。

もっと別の良いものを見つけたくて。

でも、パラメータ名がわからないので、Param Minerを使用することに。

Webキャッシュポイズニングを見つけるのに特に役立つ機能で。

  https://portswigger.net/bappstore/17d2949a985c4b7ca092728dba871943

 

f:id:ThisIsOne:20210819083043p:plain

 

この拡張機能は、非表示のリンクされていないパラメータを識別できて。

JSON本体で非表示のパラメータを見つけたいので。

Guess JSON parameterを選択すると。

 

f:id:ThisIsOne:20210819082921p:plain

 

数分後、uidパラメータを見つけることができて。

パスワード変更のJSON本文で、uidパラメータを使用しているようで。

これで、ユーザの操作なしですべてのユーザのパスワードを変更できて。

 

f:id:ThisIsOne:20210819082943p:plain

 

Best regards, (^^ゞ