Shikata Ga Nai

Private? There is no such things.

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

Hello there, ('ω')ノ

 

1000ドル相当の完全なアカウント乗っ取りを。

 

脆弱性:

 アカウントの乗っ取り

 CSRF

 IDOR

 

記事:

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

 

 

今回は、公開プログラムで見つけたバグで。

どのユーザのアカウントも乗っ取ることができて。

ターゲット情報を開示する許可がないので、example.comと呼ぶことに。

普通のウェブサイトで機能はそれほど多くなく。

アカウントの作成、ログイン、パスワードの変更などができて。

 

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

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

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

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

 

ビューページのソースで、すべてのユーザにuserIDを。

割り当てているWebサイトを見つけて。

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

 

次に、アカウント設定に移動し、情報の一部を変更して。

リクエストをキャプチャして。

ここでは、まだ被害者のアカウントにいて。

 

f:id:ThisIsOne:20220409143613p:plain

 

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

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

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

 

メールの変更ページも確認しましたが、被害者のCSRFトークンがないと。

情報を変更できないようで。

CSRFトークンを削除したり、POSTをGETに変更したりしようとしましたが。

何も起こらず。

 

次に他のウェブサイトの機能を調べ始めまて。

Webサイトがパスワード変更機能をどのように実装したかを確認することに。

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

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

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

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

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

 

f:id:ThisIsOne:20220409143704p:plain

 

今度は、パスワード変更ページのCSRFトークンが有効かどうかを確認していて。

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

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

パスワードを変更できて。

ただ、別のユーザのパスワードを変更する場合は。

ログインするためにそのユーザーの電子メールを知っている必要があって。

 

f:id:ThisIsOne:20220409143741p:plain

 

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

/api/user/userID/change_passwordなどを確認しようとしましたが、何も起こらず。

 

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

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

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

 

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

f:id:ThisIsOne:20220409144410p:plain

 

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

下記を選択して。

 

f:id:ThisIsOne:20220409143821p:plain

 

数分後、uidパラメーターが見つかって。

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

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

 

f:id:ThisIsOne:20220409143841p:plain

 

Best regards, (^^ゞ