通过DOM破坏绕过CSP
您可能发现了HTML注入漏洞,但不幸的是,该网站受到内容安全策略(CSP)的保护。并非一切希望都已破灭,通过DOM破坏技术,您有可能绕过CSP,而现在可以使用DOM Invader来检测这种漏洞!本文将向您展示具体方法。
我们的测试案例基于一个漏洞赏金平台,因此您很可能会在真实环境中遇到类似的代码。如果您不熟悉DOM破坏,请前往我们的学院学习此类攻击并完成实验。
利用所需条件
要利用DOM破坏,您需要三个要素:
- HTML注入
- 一个小工具——一个或多个属性名称
- 一个接收点(sink)
为了绕过CSP,您的小工具需要最终进入策略允许的接收点。这可能是一个eval函数。更现实的情况是,它可能是一个受nonce和CSP中strict-dynamic源表达式保护的脚本。当使用strict-dynamic时,受nonce保护的脚本被允许生成其他脚本。我们可以利用这一点来引入自己的脚本。
识别DOM破坏漏洞
首先,我们需要在Burp浏览器中加载测试案例。访问以下链接:[受CSP保护的DOM破坏测试案例](DOM clobbering test case protected by CSP)。
然后,启用DOM Invader: 启用DOM Invader后,需要开启DOM破坏检测。您会注意到DOM Invader显示警告消息,因为DOM破坏攻击可能导致网站崩溃。因此,建议仅在测试特定页面时启用DOM破坏功能。
接下来,重新加载测试案例。如果一切顺利,您将看到DOM Invader发现了一个名为script.src的接收点。您会注意到接收点值包含字符串domclobbering,后跟两个属性名称和一个标识符(canary)。这是DOM Invader用来发现DOM破坏漏洞的方法,因为多个接收点和值可能包含被破坏的属性。
绕过CSP以利用漏洞
我们已经发现了一个漏洞,现在需要构建DOM破坏攻击。记住,我们还需要HTML注入。幸运的是,我们的测试案例存在这样的漏洞。
我们可以尝试注入脚本。注意,CSP阻止了执行。然后,我们可以利用DOM Invader报告的信息构建攻击,尝试绕过CSP。根据上述截图中的接收点值,看起来我们需要属性ehy和codeBasePath。注意,接收点值还包含指向JavaScript文件的路径/utils.js。在利用中,我们需要用单行注释来处理这一点。
现在需要制作利用代码。如果您需要复习如何操作,请访问我们学院的学习材料。我们知道小工具最终进入script.src属性。如果点击堆栈跟踪并查看控制台,我们将看到接收点发生的具体行。创建利用代码涉及注入两个锚点标签来破坏这些属性:
|
|
查看解决方案
在示例中,我们使用了数据URL,值得注意的是,这并不是必需的,只是更优雅。您可以使用HTTP URL,效果同样好。注意,我使用问号而不是单行注释,将utils文件名移动到查询字符串中。
|
|
HTTP示例
相关标签
- DOM破坏
- DOM
- XSS
- CSP
返回所有文章
本页面需要JavaScript以获得增强的用户体验。
相关研究
- 使用Cookie三明治技术窃取HttpOnly Cookie(2025年1月22日)
- 使用幻影$Version Cookie绕过WAF(2024年12月4日)
- 在URL凭据中隐藏Payload(2024年10月23日)
- 使用表单劫持绕过CSP(2024年3月5日)