基于 DOM 的深度跨站脚本攻击
在本文中,我们将深入了解其中一种跨站点脚本,即基于 DOM 的 XSS。下面我们一一讨论。
基于DOM的跨站脚本:
- DOM XSS 代表基于文档对象模型的跨站点脚本。基于 DOM 的漏洞发生在客户端执行的内容处理阶段,通常在客户端 JavaScript 中。
- 基于 DOM 的 XSS 的工作方式与反射型 XSS 类似——攻击者操纵客户端的浏览器环境(文档对象模型)并将有效负载放入页面内容中。主要区别在于,由于恶意负载存储在浏览器环境中,它可能不会在服务器端发送。这样,所有与流量分析相关的保护机制都将失效。
- 在反射式和存储式跨站脚本攻击中,您可以在响应页面中看到漏洞恶意脚本,但在基于 DOM 的跨站脚本中,HTML 源代码和攻击的响应将是相同的,即恶意脚本不能可以在来自 Web 服务器的响应中找到。
- 在基于 DOM 的 XSS 攻击中,恶意字符串不会被受害者的浏览器解析,直到网站的合法 JavaScript 被执行。要执行基于 DOM 的 XSS 攻击,您需要将数据放入源中,以便将其传播到接收器并导致执行任意 JavaScript 代码。
基于 DOM 的 XSS 攻击分析:
以下是基于 DOM 的 XSS 攻击的细分如下。
- 攻击者发现基于 DOM 的 XSS 漏洞
- 黑客或攻击者制作恶意脚本并将 URL 发送到目标(电子邮件、社交媒体等)
- 受害者点击 URL
- 受害者浏览器向易受攻击的站点发送请求(注意:该请求不包含 XSS 恶意脚本)
- Web 服务器响应网页(注意:此响应不包含 XSS 恶意脚本)
- 受害者 Web 浏览器呈现页面,带有黑客或攻击者 XSS 恶意脚本
影响 :
- 窃取另一个客户的 cookie 或会话。
- 修改其他客户端的 cookie 或会话。
- 窃取其他客户提交的表单信息或一些敏感凭据。
- 通过拦截请求(在它到达服务器之前)修改另一个客户端提交的表单数据或信息。
笔记 -
代表用户向您的应用程序提交一个表单,该表单会修改服务器上的密码或敏感数据或其他应用程序数据。
查找基于 DOM 的跨站脚本:
- 大多数 DOM XSS 漏洞可以使用 Burp Suite 的工具扫描器或 GitHub 上提供的一些其他脚本快速有效地发现。
- 要手动测试基于 DOM 的跨站点脚本,您通常需要使用带有开发工具的 Web 浏览器,例如 Chrome 或 Firefox。
- 您需要依次处理每个可用的源或输入字段并单独测试每一个。
通过图表了解基于 DOM 的攻击:
图表说明 –
从上图中,“将图表箭头编号(步骤 1 到步骤 6)视为步骤”如下。
- 第 1 步:攻击者制作 URL 并将其发送给受害者。
- 第 2 步:受害者点击它并将请求发送到服务器。
- 第 3 步:服务器响应包含硬编码的 JavaScript。
- 第四步:攻击者的 URL 被硬编码的 JavaScript 处理,触发他的有效载荷。
- 步骤 5:受害者的浏览器将 cookie 发送给攻击者。
- Step-6:攻击者劫持用户会话。
例子 :
基于 DOM 的 XSS 攻击示例如下。
Hello!
Welcome To Our Website
…
解释 -
通常,此 HTML 页面将用于欢迎用户,例如 –
http://www.victim.site/hello.html?name=Gaurav
但是,像下面这样的请求会导致如下 XSS 条件。
http://www.victim.site/hello.html?name=alert(document.domain)
基于 DOM 的 XSS 的修复:
- 使用纯粹的服务器端检测(即 HTTP 请求)来检测 DOM XSS 是很困难的,这就是为什么像 Acunetix 这样的提供商利用 DeepScan 来做到这一点的原因。
- 由于位于 HTML 片段后面(# 符号后面的所有内容),这些恶意脚本或有效负载永远不会发送到 Web 服务器。
- 因此,根本问题在于源页面上的代码(即 JavaScript)。这意味着您应该始终清理或过滤用户输入,无论它是否是客户端
- 要修复基于 DOM 的 XSS,不得将数据从任何不受信任的来源动态写入 HTML 文档。如果功能需要,安全控制必须到位。
- 它可能涉及 JavaScript 转义、HTML 编码和 URL 编码的组合。
- AngularJS 和 React 之类的框架使用模板,这些模板使 ad-hoc HTML 的构建成为一个显式(并且很少见)的操作。这将推动您的开发团队朝着最佳实践方向发展,并使不安全的操作更容易被发现。
笔记 -
应避免使用以下源属性,例如 URL、文档 URI、位置、href、搜索、哈希。