以下の内容はhttps://cysec148.hatenablog.com/entry/2025/09/09/075654より取得しました。


LAB: DOM Clobbering を利用した HTML フィルター回避(Clobbering DOM attributes to bypass HTML filters)

Hello there, ('ω')ノ

👀 まず理解すべきポイント

  1. HTML フィルターが属性を制御している HTMLJanitor は不正な属性(例: onloadonclick)を削除して安全化する仕組み。 → しかし内部的に attributes プロパティに依存している。

  2. DOM Clobbering とは?

    • HTML要素の idname が、DOM オブジェクトのプロパティと衝突(clobber)すると、ブラウザの挙動が壊れる現象。
    • これにより、ライブラリ内部の安全チェックが bypass され、通常禁止される属性を注入できる。
  3. このラボでは attributes を clobber するid="attributes" の要素を用意することで、ライブラリの内部処理を壊す。 → その結果、任意のイベント属性(onfocus)をフォーム要素に付与できる


📝 実際の攻撃手順

Step 1: コメント欄に悪意ある HTML を投稿

ブログ記事のコメント欄に次を入力:

<form id=x tabindex=0 onfocus=print()><input id=attributes>

🔍 解説

  • <form id=x> → フォーカスを受けられる要素を作成
  • tabindex=0 → フォームを「フォーカス可能」にする
  • onfocus=print() → フォーカス時に print() 関数を実行
  • <input id=attributes> → DOM clobbering を引き起こす要素

Step 2: Exploit Server で iframe を仕込む

攻撃者用のサーバーに次を仕込む:

<iframe src="https://YOUR-LAB-ID.web-security-academy.net/post?postId=3"
        onload="setTimeout(()=>this.src=this.src+'#x',500)">
</iframe>

🔍 解説

  • src → 攻撃対象のブログ記事(コメントを入れた投稿の URL)
  • onload → iframe 読み込み後に処理を実行
  • setTimeout(...,500) → 0.5 秒待ってから #x を URL に追加
  • #x → ID x の要素(フォーム)にブラウザが自動的にフォーカス
  • その結果 onfocus=print() が発火して print() が呼ばれる

✅ まとめ:視点と思考の流れ

  • 1. フィルター突破の鍵を探す → DOM clobbering が有効
  • 2. ライブラリが内部で何を参照しているかattributes プロパティ
  • 3. そのプロパティを要素IDで上書きできないか<input id=attributes>
  • 4. 実行条件を満たす仕組みを作るform onfocus
  • 5. 自動的にイベントが発火するように誘導iframe + #x

💡 この攻撃は「DOMの性質を逆手にとってライブラリをだます」タイプのものです。 XSSフィルターが「完璧ではない」理由がよくわかる例ですね。

Best regards, (^^ゞ




以上の内容はhttps://cysec148.hatenablog.com/entry/2025/09/09/075654より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14