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
次に、被害者のアカウントのままでアカウント設定に移動して。
情報の一部を変更して、リクエストをキャプチャします。
次に攻撃者のアカウントでサインアップしてログインして。
上のスクリーンショットでわかるようにユーザ名の変更機能で。
被害者の情報を変更しようとしましたが、何も起こらず。
メールの変更ページも確認しても。
被害者のCSRFトークンがないと情報を変更できないようで。
CSRFトークンを削除したりPOSTをGETに変更しても、何も起こらず。
なので、他のウェブサイトの機能を調べることに。
すると、パスワード変更機能でどのように実装したかを確認したら。
パスワードを変更する際、現在のパスワードを入力してから。
新しいパスワードを入力する必要があって。
現在のパスワードパラメータを削除しても。
ユーザのパスワードを変更できることがわかって。
つまり、古いパスワードを知らなくてもパスワードを変更できて。
友人のハッカーは自分のプライベートプログラムでCSRFバグを見つけて。
他のユーザの通知をオン/オフすることができていたので。
他のユーザのメールアドレスや名前などを変更しようとしない理由を尋ねると。
彼は、ウェブサイトが変更情報ページでCSRFトークンを検証していて。
通知のオン/オフは、オンではないと言っていたので。
その後、パスワード変更ページのCSRFトークンが検証されているかを確認して。
下記のようにnullを使用すると。
CSRFトークンの代わりにcsrf_tokenトークンを削除すると。
パスワードを変更できることがわかって。
ただ、別のユーザのパスワードを変更する場合(ログインするために)は。
そのユーザの電子メールを知っている必要があって。
スクリーンショットを注意深く見ると、userIDがないことがわかり。
下記などを確認しても、何も起こらず。
/api/user/userID/change_password
そこで、最後の手段を試すことに。
今、JSON本体でuserIDを使用できるかどうかを考えているものの。
もっと別の良いものを見つけたくて。
でも、パラメータ名がわからないので、Param Minerを使用することに。
Webキャッシュポイズニングを見つけるのに特に役立つ機能で。
https://portswigger.net/bappstore/17d2949a985c4b7ca092728dba871943
この拡張機能は、非表示のリンクされていないパラメータを識別できて。
JSON本体で非表示のパラメータを見つけたいので。
Guess JSON parameterを選択すると。
数分後、uidパラメータを見つけることができて。
パスワード変更のJSON本文で、uidパラメータを使用しているようで。
これで、ユーザの操作なしですべてのユーザのパスワードを変更できて。
Best regards, (^^ゞ