web-dev-qa-db-ja.com

同等の文字なしでjQueryでXSSを利用しますか?

これは、脆弱なJavaScriptコードです。

_$(document).ready(function(){
    var payload = unescape(document.location.hash.substr(1));
    $(payload);
    document.body.innerText = "The payload is: " + payload;
});
_

この入力でそれを悪用しようとしたとき

_http://localhost/xss.html#<img src=x onerror=alert(0)>
_

アラートが表示され、うまくいきました。私の場合は少し異なります、エクスプロイトを防ぐ小さなフィルターがあります:

_$(document).ready(function(){
    var payload = unescape(document.location.hash.substr(1));
    payload = payload.split('=')[0];  // <------- The new filter
    $(payload);
    document.body.innerText = "The payload is: " + payload;
});
_

"="文字の後のすべてを切り捨てます。つまり、属性を挿入できません。私はすでに以下を試しましたが、うまくいきませんでした:

  • 等号をHTMLエンコード(onerror&equal;alert()
  • <script>alert(0);</script>

誰でも私がこのフィルターをバイパスするために何ができるか考えていますか?

7
AlmightyGoat

この時点で、最新のブラウザーを使用したこのフィルターには、簡単な/テキストブックのバイパスがないと言っても安全だと思います。このコードスニペットを、XSSに習熟していると考える友人や同僚のグループと共有しましたが、バイパスを構築することはできませんでした。

1
EdOverflow