Shikata Ga Nai

Private? There is no such things.

DOM XSS in jQuery selector sink using a hashchange eventをやってみた

Hello there, ('ω')ノ

 

hashchangeイベントを使用したjQueryセレクタシンクのDOMXSSを。

 

このページにDOMベースのクロスサイトスクリプティングの脆弱性が含まれていて。

jQueryの$()セレクタ関数を使用して、タイトルがlocation.hashプロパティを介して。

渡される特定の投稿に自動スクロールして。

 

f:id:ThisIsOne:20220102115605p:plain

 

該当するjQueryのバージョンに関する脆弱性を検索してみると。

load()は、<script>タグの認識と削除に失敗するようで。

これにより、囲まれたスクリプトロジックが実行されるようで。

 https://snyk.io/test/npm/jquery/1.8.2

 

f:id:ThisIsOne:20220102125057p:plain

 

JavaScriptのLocationオブジェクトのhashは、フラグメント識別子(#〜)を。

参照、変更するプロパティで。

 

<script>
 $(window).on('hashchange', function(){
  var post = $('section.blog-list h2:contains(' +   decodeURIComponent(window.location.hash.slice(1)) + ')');
  if (post) post.get(0).scrollIntoView();
 });
</script>

 

f:id:ThisIsOne:20220102112723p:plain

 

エクスプロイトサーバで、下記を挿入して。

オンロードした際に#以降を読み込んで実行するようにして。

 <iframe src="https://ac801f1e1e998312c0422b47006b005c.web-security-academy.net/#" onload="this.src+='<img src=x onerror=print()>'"></iframe>

 

f:id:ThisIsOne:20220102120003p:plain

 

エクスプロイトを保存して、[エクスプロイトの表示]をクリックすると。

オンロードされたのちに。

 

f:id:ThisIsOne:20220102120130p:plain

 

print()関数が呼び出されて印刷画面が表示されて。

 

f:id:ThisIsOne:20220102120056p:plain

 

エクスプロイトサーバに戻り、[被害者に配信]をクリックすると。

 

f:id:ThisIsOne:20220102120308p:plain

 

クリアできて。

 

f:id:ThisIsOne:20220102120324p:plain

 

Best regards, (^^ゞ