Shikata Ga Nai

Private? There is no such things.

DOM XSS using web messages and a JavaScript URLをやってみた

Hello there, ('ω')ノ

 

WebメッセージとJavaScriptURLを使用したDOMXSSを。

このラボでは、Webメッセージングでトリガーされる。

DOMベースのリダイレクトの脆弱性があって。

 

まずは、サイトにアクセスしてみると。

下記のようなJavascriptが確認できて。

どうもindexOf メソッドで。

urlの文字列にhttpの文字列が含まれるかを文字列の先頭から検索しているようで。

 

window.addEventListener('message', function(e) {
 var url = e.data;
 if (url.indexOf('http:') > -1 || url.indexOf('https:') > -1) {
  location.href = url;
 }
}, false);

 

f:id:ThisIsOne:20210319114345p:plain

 

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

 
<iframe src="https://ac4f1f141ef13dec80c1013d005d007a.web-security-academy.net/" onload="this.contentWindow.postMessage('javascript:alert(document.cookie)//http:','*')">

 

window.postMessage() は、クロスドメイン通信を可能にするためのメソッドで。

例えば、ポップアップとそれを表示したページ間だったり。

iframe とそれが埋め込まれたページの間での通信に使うことができて。

 

このスクリプトは、文字列「http:」とともに。

任意のJavaScript alert()ペイロードを含むWebメッセージを送信して。

2番目の引数は、すべてのtargetOriginがWebメッセージに許可されて。

 

iframeが読み込まれると。

postMessage()メソッドはJavaScriptペイロードをメインページに送信して。

イベントリスナーは「http:」文字列を見つけて。

ペイロードをlocation.hrefシンクに送信して。

ここで、alert()関数がクライアントのセッションのコンテキストで呼び出されて。

 

deliver exploit to victimをクリックすると。

 

f:id:ThisIsOne:20210319114505p:plain

 

クリアできた。

 

f:id:ThisIsOne:20210319114618p:plain

 

ちなみにエクスプロイトは以下のとおりで。

 

f:id:ThisIsOne:20210319114557p:plain

 

Best regards, (^^ゞ