Hello there, ('ω')ノ
HTMLフィルタをバイパスするためのDOM属性のクロバリングを。
DOMクロバリングに対して脆弱なHTMLJanitorライブラリを使用しているらしく。
フィルタをバイパスして。
DOMクロバリングを使用してdocument.cookieにalertベクタを挿入しなさいと。
ちなみにFirefoxでは機能しないのでChromeがお勧めらしく。
まずは、コメント投稿ページでHTMLJanitorを確認して。
HTMLJanitorは最初に初期化され、初期化のタグと属性のみを使用できて。
document.implementation.createHTMLDocumentで。
サンドボックスとして使用する新しいHTMLドキュメントを作成してから。
サンドボックス内の要素に対して_sanitizeフィルタリングを実行して。
_sanitize関数の開始時に、createTreeWalker関数が呼び出されて。
TreeWalkerが作成されて。
このクラスは、現在のドキュメントのサブツリー内のすべてのノードと。
その位置を表して。
こんな感じで、処理の流れを理解する必要があって。
説明を書いていくとあまりにも時間がかかってしまうので、またの機会にと。
さっそく、下記のコメントを投稿するものの。
<form id=x tabindex=0 onfocus=alert(document.cookie)><input id=attributes>
入力エリアは表示されるものの何も機能せず。
ちなみにURLは、下記のとおりで。
https://acff1f421ebf83ef80d02d2f00e4001f.web-security-academy.net/post?postId=6
エクスプロイトサーバに下記を挿入して。
<iframe src=https://acff1f421ebf83ef80d02d2f00e4001f.web-security-academy.net/post?postId=6 onload="setTimeout(someArgument=>this.src=this.src+'#x',500)">
コメントする前に完了する必要があるので、遅延操作が必要で。
簡単なのは、setTimeoutにiframeを使用することで
まずは、iframeが読み込まれるとJavaScriptが実行される前に。
コメントがロードされていることを確認するために遅延が必要なので。
500msの遅延させていて。
500msは、使用しているネットワーク条件に応じて適切に調整する必要があって。
Storeして、Deliverするとクリアできた。
View exploitすると。
ブラウザは、コメント内に作成したフォームのID「x」の要素にフォーカスして。
onfocusイベントハンドラーで、alert()ペイロードが実行されて。
Best regards, (^^ゞ