DOM Clobbering (DOM 破坏)
DOM Clobbering(DOM 破坏)是一种技术,通过为 HTML 元素命名特定的 ID 或名称,可以覆盖或“破坏”全局变量。这会导致脚本中出现非预期行为,并可能导致安全漏洞。
摘要 (Summary)
工具 (Tools)
- SoheilKhodayari/DOMClobbering - 针对移动端和桌面端 Web 浏览器的 DOM Clobbering Payload 详尽列表。
- yeswehack/Dom-Explorer - 一个基于 Web 的工具,旨在测试各种 HTML 解析器和清理器。
- yeswehack/Dom-Explorer Live - 揭示浏览器如何解析 HTML 并寻找变异 XSS 漏洞。
方法论 (Methodology)
利用该漏洞需要在页面中存在某种形式的 HTML 注入 (HTML injection)。
-
破坏
x.y.value -
同时使用 ID 和 name 属性形成 DOM 集合来破坏
x.y -
破坏
x.y.z- 3 层深度 -
破坏
a.b.c.d- 超过 3 层 -
破坏
forEach(仅限 Chrome) -
通过具有相同
id属性的<html>或<body>标签破坏document.getElementById() -
破坏
x.username -
破坏 (仅限 Firefox)
-
破坏 (仅限 Chrome)
技巧 (Tricks)
- DomPurify 允许使用
cid:协议,该协议不会对双引号 (") 进行编码:<a id=defaultAvatar><a id=defaultAvatar name=avatar href="cid:"onerror=alert(1)//">
实验环境 (Labs)
- PortSwigger - 利用 DOM 破坏实现 XSS
- PortSwigger - 破坏 DOM 属性以绕过 HTML 过滤器
- PortSwigger - 受 CSP 保护的 DOM 破坏测试用例