HTML与JavaScript的暗面:当DOM操作成为渗透测试的武器
原创
KLSEC
KLSEC
昆仑AI安全实验室
2026年10月15日 00:00
广东
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
你打开一个网页,看到的是一个漂亮的界面。按钮、表单、图片、下拉菜单。但在渗透测试工程师眼里,这些元素背后藏着一整套可以被武器化的逻辑。
2026年9月,GitHub Enterprise Server披露了一个存储型XSS漏洞,编号CVE-2026-77912,CVSS评分7.4。攻击者通过Markdown渲染管线注入任意HTML属性,利用同源JavaScript gadget绕过内容安全策略,最终控制了受害者的页面DOM。成功的利用可以读取受害者可见的内容、窃取CSRF令牌、以受害者身份执行状态变更操作,并通过同源写入外传数据。
这个漏洞的精髓不在XSS本身,在于它揭示了一个事实:HTML和JavaScript的每一个设计特性,在攻击者手里都可能变成一条攻击链的起点。
一、HTML基础:为什么“安全”的标签也能被武器化
HTML的设计初衷是描述文档结构。`是链接,
。然后在浏览器控制台中检查window.x和window.config是否变成了你注入的DOM节点。如果页面代码中有window.config || {}`这样的模式,clobbering就成功了。
第五步,检查CSP策略。 在响应头中查看Content-Security-Policy。script-src 'self'意味着内联脚本被阻断,但同源脚本仍然可以执行。攻击策略要从“注入新脚本”转向“劫持已有脚本的执行逻辑”。script-src 'unsafe-inline'则简单得多,直接注入<script>alert(1)</script>就能验证。
六、一个完整的实战案例:从JS文件到DOM XSS
去年我在一个授权SaaS测试中遇到一个场景。主站防护做得很严密,CSP策略完整,DOMPurify版本较新,没有明显的注入点。
但我在他们的JS bundle里搜索postMessage时,发现了一段代码:
window.addEventListener('message', function(e) { if (e.data.type === 'render') { document.getElementById('preview').innerHTML = e.data.html; }});
这个message事件监听器没有校验e.origin,任何来源的postMessage都可以触发它。而且它直接把e.data.html写入innerHTML。
接下来要解决的问题是:如何让受害者的浏览器执行这个postMessage?答案是找到一个能被攻击者控制的页面,用window.open打开目标站点,然后通过postMessage发送恶意数据。
我在目标站点上找到了一个用户可自定义的个人主页功能。攻击者可以在自己的个人主页上嵌入JavaScript(站点允许用户自定义页面样式,但过滤了脚本)。虽然直接注入<script>被过滤了,但<iframe>没有被过滤。攻击者可以在个人主页上嵌入一个<iframe src=\"https://target.com/app\">,然后通过postMessage向这个iframe发送恶意数据。
完整的攻击链:攻击者创建恶意个人主页 → 诱导受害者访问 → 页面中的iframe加载目标应用 → 攻击者的JS通过postMessage发送包含XSS payload的消息 → 应用的message监听器把payload写入innerHTML → DOM XSS触发。
写在最后
HTML和JavaScript是Web安全的“原材料”。大多数开发者把它们当作搭建界面的工具,安全测试人员如果把视角停留在“有没有<script>标签”的层面,就会漏掉一整类攻击。
DOM Clobbering的武器是“命名属性查找”这个HTML标准特性,它不需要脚本。原型污染的原型链是JavaScript继承机制的基础,它污染的是所有对象的“基因”。CSP绕过不需要破解CSP算法,只需要劫持一个已经被CSP信任的同源脚本。
2026年的客户端安全,攻击面不在“有没有过滤”,在“过滤的假设是否成立”。DOMPurify的FORBID_ATTR: ['id']假设了id是DOM Clobbering的唯一入口,但HTML标准说name也可以。CUSTOM_ELEMENT_HANDLING的fallback假设了{}是干净的,但原型链说Object.prototype可能已经被污染。
下次你审JavaScript代码的时候,不要只看“有没有做输入过滤”。看数据从哪来、到哪去、中间经过了谁的信任。攻击链就藏在信任传递的缝隙里。
严正声明
本文所述所有技术内容仅用于已获得明确书面授权的安全测试、研究和教育场景。DOM Clobbering、原型污染、XSS等客户端攻击技术的测试必须在SRC平台或客户授权的资产范围内进行。靶场环境应部署在隔离网络中。未授权扫描、测试、攻击行为违反《中华人民共和国网络安全法》第27条及《刑法》第285条,将承担法律责任。技术无罪,边界是法律。
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。











评论