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を簡単に推測できて。
次に、アカウント設定に移動し、情報の一部を変更して。
リクエストをキャプチャして。
ここでは、まだ被害者のアカウントにいて。
次に攻撃者のアカウントでサインアップしてログインして。
そして、ユーザ名の変更機能(上のスクリーンショットでわかるように)で。
被害者の情報を変更しようとしましたが、何も起こらず。
メールの変更ページも確認しましたが、被害者のCSRFトークンがないと。
情報を変更できないようで。
CSRFトークンを削除したり、POSTをGETに変更したりしようとしましたが。
何も起こらず。
次に他のウェブサイトの機能を調べ始めまて。
Webサイトがパスワード変更機能をどのように実装したかを確認することに。
パスワードを変更するには、現在のパスワードを入力してから。
新しいパスワードを入力する必要があって。
現在のパスワードパラメータを削除しても。
ユーザのパスワードを変更できることがわかって。
古いパスワードを知らなくても、パスワードを変更できて。
今度は、パスワード変更ページのCSRFトークンが有効かどうかを確認していて。
このようにnullを使用すると。
csrfトークンの代わりにcsrf_tokenトークンを削除すると。
パスワードを変更できて。
ただ、別のユーザのパスワードを変更する場合は。
ログインするためにそのユーザーの電子メールを知っている必要があって。
スクリーンショットを注意深く見ると、userIDがないことがわかって。
/api/user/userID/change_passwordなどを確認しようとしましたが、何も起こらず。
今、JSON本体でuserIDを使用できるかどうかを考えていて。
パラメータ名がわからないので、ParamMinerを使用することに。
この拡張機能は、非表示のリンクされていないパラメータを識別して。
https://portswigger.net/bappstore/17d2949a985c4b7ca092728dba871943
JSON本体で非表示のパラメーターを見つけたいので。
下記を選択して。
数分後、uidパラメーターが見つかって。
パスワード変更のJSON本文でuidパラメーターを使用してるので。
これで、ユーザの操作なしですべてのユーザのパスワードを変更できて。
Best regards, (^^ゞ