Hello there, ('ω')ノ
目的:HTML フィルター(HTMLJanitor)の抜け穴を DOM Clobbering で突き、
print()を実行させる。 想定ブラウザ:Chrome 推奨(この手法は Firefox では想定通り動かないことがある)
全体の進め方(非エンジニア向けの道筋)
- まず観察:コメントに危険な属性やタグを書いてみて、何が消されるか確認
- 仮説を立てる:「ライブラリが DOM の
attributesなどのプロパティに頼っているかも」 - 最小の実験:
id="attributes"の要素を混ぜて “上書き(clobber)” が起きるかを検証 - 発火方法の設計:
onfocusを自動で発火させる(#xハッシュ+tabindex) - 自動化:Exploit Server の
iframeでページ読み込み後に自動フォーカスさせる
この 1→5 を順番に進めれば、「なぜそう分かったか/どう試して確信したか」が自然と理解できます。
フェーズA:まず“何がフィルターで消えるか”を観察する
何を試す?
コメント欄に代表的な危険要素を入れて保存し、**表示結果(実際のDOM)**を開発者ツールで確認します。
- 例1:
<script>alert(1)</script>→ たぶん丸ごと消える - 例2:
<img src=x onerror=print()>→onerrorが消える - 例3:
<a href="javascript:print()">click</a>→href="javascript:..."が消える or 置換される - 例4:
<form onfocus=print()>→onfocusが消える
- 例1:
ここでの見方・考え方
- 危険な“イベント属性”が削除されることを確認できれば、“属性レベルのサニタイズ” が行われていると分かる
- 多くのフィルターは内部で
element.attributes(要素の属性一覧)を用いてチェックします → ここが DOM Clobbering の狙い目 になりやすい
フェーズB:DOM Clobbering(上書き)が効くかを検証
何を試す?
この続きはcodocで購入