Skip to content

Instantly share code, notes, and snippets.

@naokazuterada
Last active April 3, 2019 13:12
Show Gist options
  • Save naokazuterada/b3eae907ecbca8095dbab333c16403c7 to your computer and use it in GitHub Desktop.
Save naokazuterada/b3eae907ecbca8095dbab333c16403c7 to your computer and use it in GitHub Desktop.
DOM Based XSS with jQuery test

DOM Based XSS with jQuery テスト

注釈

  • ブラウザが勝手にエスケープしてくれちゃうので、本の例と揃えるためにあえてunescapeしてます
  • リクエストはすべて下記で試しています
    http://0.0.0.0:8000/index.html#%3Cimg%20src=x%20onerror=alert(1)%3E
    

事例1: WASM本の例に習った例

脆弱性あり

<script src="https://code.jquery.com/jquery-1.8.3.min.js"></script>
<script>
$('input[name="color"][value="'+unescape(location.hash.slice(1))+'"]')
</script>

脆弱性なし

<script src="https://code.jquery.com/jquery-1.9.0.min.js"></script>
<script>
$('input[name="color"][value="'+unescape(location.hash.slice(1))+'"]')
</script>

事例2: $関数の先頭に直接リクエストパラメータの一部を入れちゃってるパターン

この例は、先頭に<が来ているのでどちらも脆弱性あり

<script src="https://code.jquery.com/jquery-1.8.3.min.js"></script>
<script>
$(unescape(location.hash.slice(1)));
</script>
<script src="https://code.jquery.com/jquery-1.9.0.min.js"></script>
<script>
$(unescape(location.hash.slice(1)));
</script>

Ref: http://jquery.com/upgrade-guide/1.9/#jquery-htmlstring-versus-jquery-selectorstring

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment