Hello there, ('ω')ノ
被害者アカウントのパスワードを乗っ取ってCSRF保護をバイパスするを。
脆弱性:
CSRF
記事:
ツール:
Burp Suite
クロスサイトリクエストフォージェリ(CSRF)は。
新しいフレームワークではほとんど見られませんが、悪用可能で。
CSRFを簡単に説明すると、攻撃者がリクエストを作成して被害者に送信して。
サーバが被害者からリクエストされたかのようにリクエストを受け入れて。
処理する攻撃で。
これを軽減するために、展開されている複数の保護メカニズムがあり。
対処するのはアンチCSRFトークンで。
今回は、CSRF保護をバイパスして、CSRF攻撃を成功させる方法を説明することに。
さらに、クライアント側の検証バイパスを使用して。
パスワードを変更することで完全なアカウントの乗っ取りを実行できて。
アンチCSRFトークンは、CSRF攻撃を防ぐために。
サーバがリソース/アクションの実行を実際に要求するユーザーを。
一意に区別できるようにする方法で。
ただし、アプリケーションの実装が弱いため。
次のようなアンチCSRFトークンをバイパスする方法がいくつかあって。
・アンチCSRFトークンの削除
・数ビットを変更してアンチCSRFトークンを偽装
・同じAnti-CSRFトークンの使用
・アンチCSRFトークンを生成するための弱い暗号化
・推測可能なアンチCSRFトークン
・XSSなどの他の攻撃でトークンの取得
・CSRFトークンチェックをバイパスするためにPOSTリクエストをGETに変換
今回は、ターゲットをtarget.comと呼ぶことに。
アプリケーションをさわっていると。
次のようなリクエストがある/editprofileエンドポイントを見つけて。
POST /editprofile HTTP/1.1
Host: target.com
<redacted>username=test&description=<some_text>&phone=1231231231&anti_csrf=<token>
anti_csrfトークンが存在して。
トークンが欠落しているか偽造されているかどうかを。
サーバが検証していることがわかるので、基本的に運がなくて。
次に、リクエストメソッドをPOSTからGETに変更して。
anti_csrfパラメーターを削除すると。
偽造されたリクエストは次のようになって。
GET /editprofile?username=test&description=<some_text>&phone=1231231231 HTTP/1.1
Host: target.com
<redacted>
うまく回避することができて、CSRFが悪用されたものの。
一部のプロファイル情報を変更する以外に多くのことを実行できないので。
重大度は低くなって。
さらに多くのものを探した後、パスワードリセット機能をチェックしたものの。
パスワードを変更する前に現在のパスワードを要求していて。
元のパスワード変更要求は次のようになるので。
そのため、current_passwordフィールドを削除するだけで。
パスワードが正常にリセットされて。
POST /changepassword HTTP/1.1
Host: target.com
<redacted>current_password=currentpassword&new_password=new_password&confirm_password=new_password&anti_csrf=<token>
これで、CSRFを使用して被害者ユーザのパスワードを変更するために。
下記の2つの問題を連鎖させることができて。
・リクエストメソッドを変更してバイパスを実行する方法
・パスワード変更時に現在のパスワードをバイパスする方法
偽造されたリクエストは次のようになって。
GET /changepassword?new_password=new_password&confirm_password=new_password HTTP/1.1
Host: target.com
<redacted>
Burp Suiteを使用してCSRF PoCを生成するか。
独自の方法で、それを実行して被害者に送信することができて。
被害者が攻撃者の作ったURLに移動すると、パスワードが変更されて。
Best regards, (^^ゞ