Hunting for DOM-based XSS vulnerabilities: A complete guide 查找基于 DOM 的 XSS 漏洞:完整指南

news/2025/12/9 6:41:16/文章来源:https://www.cnblogs.com/sec875/p/19324289

https://www.intigriti.com/researchers/blog/hacking-tools/exploiting-dom-based-xss-vulnerabilities
注意,如果你无法感受到这文章厉害的地方,大概率可能是由于你看见DOM sources时不清楚用户是从哪里可控的,以及看见DOM sinks时不知道在哪里触发而导致的。而 DOM sources 与 DOM sinks可以通过简单搜索来到这里已进行快速理解:https://developer.mozilla.org/en-US/docs/Web/API/Location/href

查找基于 DOM 的 XSS 漏洞:完整指南

传统的跨站脚本攻击 (XSS) 漏洞在服务器端渲染(例如使用 PHP、JSP 和 ASP 等语言)盛行的时期十分普遍。然而,随着应用程序变得越来越复杂,开发人员不断将应用程序逻辑转移到客户端,预计会出现更复杂的客户端漏洞。

在本文中,我们将介绍基于 DOM 的跨站脚本攻击 (XSS) 漏洞的定义、其潜在影响,以及如何在现代应用程序中有效地识别和利用这些漏洞。

让我们开始吧!

什么是基于DOM的跨站脚本攻击(XSS)?

传统的跨站脚本攻击 (XSS) 漏洞中,恶意输入会被发送到服务器端,并在未经任何额外处理的情况下呈现在 HTTP 响应中。而基于 DOM 的跨站脚本攻击 (XSS) 则不同,恶意输入源自 DOM 源,并通过 DOM 接收器在浏览器中执行,这意味着输出永远不会出现在 HTTP 响应体中。

未经处理的数据(例如有效载荷)从 DOM 源传递到 DOM 接收器,使得攻击者能够执行任意 JavaScript 代码。与反射型 XSS 类似,攻击者可以向受害者发送精心构造的、指向易受攻击页面的链接,从而执行客户端代码并控制受害者的会话。

在进入测试阶段之前,让我们先简要了解一下所有 DOM 源和接收器(source源和sink接收器 )。

  • DOM sources

DOM 源是包含用户可控数据的 JavaScript 属性,攻击者可以对其进行操纵(通常通过 URL)。以下是基于 DOM 的 XSS 攻击所有可能入口点的完整列表:
DOM-based XSS: DOM sources explained
image

  • DOM sinks

DOM 接收器是能够执行或渲染用户可控数据的 JavaScript 函数。当不受信任的数据从源流向接收器时,基于 DOM 的 XSS 漏洞就会被触发。

下图展示了一些 DOM 接收器的示例:
DOM-based XSS: DOM sinks explained
image

现在我们了解了 DOM 接收器和源之间的区别,我们可以进入测试阶段,您将学习如何识别这些漏洞类型。

方法论

与传统的 XSS 攻击(通过注入关键字并寻找反射和注入点)不同,基于 DOM 的 XSS 攻击需要不同的方法。这种方法是将恶意代码注入 DOM 源,并拦截运行时 DOM 事件处理程序,以确定输入是否被处理以及处理的位置。此外,还有一种针对基于 DOM 的 XSS 漏洞的替代方法,即彻底审查 JavaScript 代码(reviewing JavaScript code)。

让我们仔细看看这两种方法。

通过静态代码分析查找基于 DOM 的 XSS 漏洞

这种方法需要具备一定的 JavaScript 基础。你需要手动检查 JS 代码,查找 DOM 源,并逐步查找,直到找到所有对 DOM 源的引用。

此外,你还需要逐个检查每个 JavaScript 文件和代码片段,包括那些经过混淆和压缩的文件。

通过 DOM 运行时拦截查找基于 DOM 的 XSS 漏洞

第二种方法是在运行时主动拦截事件处理程序发出的 DOM 事件,并查找可能处理您输入内容的位置。您需要使用浏览器的开发者控制台来查找 DOM 接收器,并在可能处理您输入内容的位置设置断点。

这种方法允许您拦截并分析数据从源到接收器的整个过程:
通过浏览器开发者控制台拦截基于 DOM 的事件
image

使用自动化工具!

这两种方法都很繁琐,而且在大规模测试时会遇到困难。幸运的是,现在有一些自动化工具可用,例如 Untrusted Types 和 DOM Invador,它们可以帮助您轻松发现基于 DOM 的漏洞,包括基于 DOM 的跨站脚本攻击 (XSS)。

基于 DOM 的 XSS 攻击

现在我们已经了解了基于 DOM 的 XSS 漏洞的核心基本原理,接下来让我们探讨如何在实际环境中利用这些漏洞。

利用 innerHTML sink 进行基于 DOM 的 XSS 攻击

正如我们在本文“DOM接收器”部分前面提到的,innerHTML接收器用于解析和渲染HTML标签,包括恶意载荷。

有时你会注意到,当需要将服务器数据与来自客户端的动态输入(例如URL查询参数的值)连接起来时,innerHTML是首选。在这种情况下,如果没有进行进一步的验证,我们实际上可以向任何HTML标签注入一个事件处理程序,该程序会执行我们任意的JavaScript代码。

请参考以下代码片段:
通过 innerHTML DOM sink 实现基于 DOM 的 XSS 攻击
image

在第 10 行,我们可以看到存在漏洞的应用程序从 firstName 查询参数读取数据并将其传递给 DOM 接收器,具体来说是 innerHTML。由于我们完全控制了 firstName 查询参数,因此我们可以将以下有效载荷作为其值传递,并渲染任何 HTML 标签,包括 XSS 有效载荷:<img src=x onerror=alert(/INTIGRITI/)>

上述案例仅为基本示例。在实际应用中,您会遇到各种形式的验证。这可以是过滤恶意标签的基本正则表达式,也可以是用于清理输入的第三方软件包(例如 DOMPurify),或是对所有数据进行 HTML 编码的服务器端措施。无论采用哪种方式,都可能存在绕过这些验证措施的机会。

提示!

有些开发者使用 base64 或其他编码方式来正确格式化和显示客户端数据。务必检查 JavaScript 代码,确认源端和目标端之间是否使用了 atob()、btoa() 或其他解码函数,以免遗漏任何潜在的基于 DOM 的 XSS 攻击。

利用动态执行函数(eval 函数)攻击基于 DOM 的 XSS 漏洞

虽然这种情况不太常见,但您偶尔可能会遇到一些目标,它们会根据动态数据(通常来自用户可控的数据源,例如查询参数)执行客户端函数。在这种情况下,我们几乎总是只需一步就能执行任意 JavaScript 代码。

让我们来看一个例子:
基于 DOM 的 XSS 攻击(通过 Function DOM sink)
image

这个旧版登录表单似乎会处理 locale 参数,并将其作为参数传递给 Function() 函数。要执行任意代码,我们必须使用 locale 参数跳出当前上下文,并注入我们自己的代码:
en']&&alert()// 这里注意,闭合Function() 函数的语义为小括号:en')&&alert()//

该有效载荷实际上允许我们调用 alert() 函数,从而证明可以执行任意 JavaScript 代码:
image

利用客户端重定向攻击基于 DOM 的 XSS 漏洞

应用内重定向通常用于提升最终用户的应用体验。例如,登录表单会在颁发会话令牌后将用户重定向到其他页面。然而,当用户可控数据未经验证就立即传递给 DOM 元素时,在某些情况下,我们可能可以执行任意 JavaScript 代码,而并非所有开发者都意识到这一点。

请参考以下示例:
基于 DOM 的 XSS 攻击,通过 Location DOM sink 实现。
image

请注意第 33 行是如何将 redirectURL 参数的值传递给 location sink 的。根据我们之前的速查表,我们可以确定,至少在未强制执行内容安全策略 (CSP) 的情况下,可以通过 JavaScript 协议执行代码:
image

有了这些信息,我们就可以实际访问以下概念验证 URL,利用这种基于 DOM 的跨站脚本 (XSS) 漏洞:
http://example.com/login?redirectURL=javascript:alert(1)

image

与之前的例子类似,你可能需要尝试不同的有效载荷来绕过过滤器。这可能包括注入空字节、换行符或回车符(CR/LF)等,具体取决于过滤器。

服务器端重定向还是客户端重定向?
如果 HTTP 响应返回 3XX 状态码且包含“Location”HTTP 响应头,则很可能是服务器端重定向,此时基于 DOM 的跨站脚本攻击 (XSS) 将无法发生,因为浏览器会遵循“Location”响应头,不会渲染任何 HTML 代码或执行任何 JavaScript 代码。
否则,就是客户端重定向,在某些情况下,基于 DOM 的跨站脚本攻击 (XSS) 仍然可能发生。

利用导入的第三方包进行基于 DOM 的 XSS 攻击

现代 Web 应用程序大量依赖第三方 JavaScript 库和包。如果使用这些依赖项时未遵循最佳实践或版本过旧,则可能会引入基于 DOM 的 XSS 漏洞,从而形成一个经常被忽视的攻击面。

让我们来看几个例子。

通过 jQuery 实现基于 DOM 的 XSS 攻击

jQuery 是最广泛使用的 JavaScript 库之一。虽然它简化了 DOM 操作,但也引入了一些方法,这些方法在处理用户可控输入时可能导致基于 DOM 的跨站脚本攻击 (XSS)。

罪魁祸首是 jQuery 的 html() 方法,它的行为与 innerHTML 完全相同,都会解析和渲染 HTML 内容,包括可执行的脚本标签和事件处理程序。

当开发者将未经清理的 DOM 数据(请参阅我们之前的速查表以获取示例)传递给 html()、append() 等方法,甚至直接传递给 jQuery 选择器本身时,就有可能注入恶意代码,这些代码会在受害者的浏览器中执行。
搜索:jQuery dom xss sources ,https://docs.google.com/spreadsheets/d/1Mnuqkbs9L-s3QpQtUrOkPx6t5dR3QyQo24kCVYQy7YY/edit?gid=1#gid=1
image

AngularJS/VueJS 中的客户端模板注入

在 AngularJS 和 VueJS 等 JavaScript 框架中,当 JavaScript 模板引擎处理用户可控输入而未进行适当清理时,可能会发生客户端模板注入 (CSTI)。这两个框架都使用表达式语法来动态渲染数据,当用户可控输入到达这些表达式时,任意 JavaScript 代码都可能被执行。

例如,在 AngularJS 中,我们可以使用构造函数的全局属性来调用函数:
{{constructor.constructor('alert(1)')()}}

这种模板注入漏洞是一种基于 DOM 的漏洞,会导致基于 DOM 的跨站脚本攻击 (XSS)。在测试大量使用 AngularJS 或 VueJS 的目标时,务必注意模板注入漏洞。

什么是 constructor 构造函数?
构造函数是面向对象编程语言中用于初始化对象的一种特殊方法。每次创建对象时,构造函数都会自动调用,从而允许对象设置其属性的初始值或执行其他设置任务。构造函数与类名相同,并且没有返回值,甚至不是 void
你可以简单理解 constructor.constructor 是已经存在的默认的构造函数对象 constructor(即理解为默认的通用库直接可以利用),并使用它的全局属性constructor,进行alert(1)的函数调用,即所谓的{{constructor.constructor('alert(1)')()}}

结论

基于 DOM 的漏洞,例如 DOM XSS,往往难以被察觉,因为它们难以大规模检测和测试。在本文中,我们探讨了测试和利用这些基于 DOM 的漏洞的各种方法。

现在,您已经学习了如何利用基于 DOM 的 XSS 漏洞……是时候检验您的技能了!您可以先在漏洞实验室和 CTF 比赛中练习,或者……浏览我们在 Intigriti 上提供的 70 多个公开漏洞赏金计划,说不定下次提交就能获得赏金!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/993937.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能客服需求设计

目录Requirement Specification: R-001 - 电商客服智能体📋 Meta Information1. Overview(概述)1.1 Title1.2 User Story1.3 Business Context2. Functional Requirements(功能需求)2.1 Intent Classification(…

2025年折弯机无压痕模实力厂家推荐榜

在当前折弯机模具市场中,低价竞争愈演愈烈,部分厂商为压缩成本,采用劣质材料或简化工艺,导致“无压痕模”在实际使用中频繁出现回弹偏差、刃口崩裂、寿命骤减等问题。这种价格与价值严重失衡的现象,不仅增加了用户…

2025年折弯机无压痕模选购指南

近年来,随着智能制造在钣金加工领域的深入渗透,折弯机配套模具的采购逻辑正发生显著变化。智能化、高精度产品价格趋于亲民化,用户在选购过程中愈发关注全生命周期性价比,而非单纯追求低价或品牌光环。尤其在无压痕…

2025年口碑好的无压痕折弯机模具厂家排行

在当前制造业加速向高质量、高效率转型的背景下,企业对折弯机模具的采购决策正逐步从“低价优先”转向“全生命周期价值导向”。随着智能化选型工具的普及和供应链透明度提升,用户更关注产品在整个使用周期中的稳定性…

联邦学习中的持续学习技术:应对灾难性遗忘

本文探讨了在联邦学习场景下进行持续学习的新方法,通过优化历史样本选择策略来提高模型性能,同时有效对抗因学习新数据而导致的灾难性遗忘问题。联邦学习中的持续学习技术:应对灾难性遗忘 联邦学习是一个过程,分布…

赏金猎手的残酷真相:从挫败感到致命一击的血脉贲张之旅

本文揭示了漏洞赏金猎手光鲜宣传背后的残酷现实:倦怠、冒名顶替综合征与技术痴迷。作者分享了从准备放弃到发现关键漏洞的真实心路历程与实战思考,剖析了这项工作的真正挑战与价值所在。⚔️ 无人告知初学者的关于漏…

2025年12月公交候车厅品牌用户推荐

摘要 本文基于2025年下半年公交候车厅行业的发展趋势,提供一份推荐榜单,涵盖五家优秀品牌(排名不分先后),包括江苏兰太城市科技有限公司等。榜单旨在为用户提供参考表单,帮助决策者了解各品牌优势。推荐基于市场…

2025年下半年矩阵运营公司推荐榜单:五大优质选择

摘要 本文针对2025年下半年矩阵运营行业的发展趋势,提供一份推荐前五的矩阵运营公司榜单,排名不分先后,旨在帮助用户参考选择。矩阵运营作为数字营销的核心,涉及短视频内容策划、数据分析和本地化服务等多个方面。…

2025年下半年汽车传动轴钢管品牌综合推荐与选购指南

摘要 随着汽车工业的快速发展,传动轴钢管作为关键零部件,其市场需求持续增长。2025年下半年,汽车传动轴钢管行业呈现出技术创新加速、品质要求提升的发展趋势。本文基于市场调研和行业数据分析,为您推荐五家表现突…

2025年下半年哪家汽车传动轴钢管公司最可靠?

摘要 随着汽车工业的快速发展,汽车传动轴钢管作为关键零部件,其市场需求持续增长。2025年下半年,行业竞争加剧,消费者对品牌的选择更加谨慎。本文基于市场调研和用户反馈,推荐五家表现突出的汽车传动轴钢管公司(…

2025下半年徐州MPP电力管厂商综合推荐与选择指南

摘要 随着城市电网改造和新能源建设的快速发展,MPP电力管作为电力电缆保护的重要材料,在2025年下半年市场需求持续增长。本文基于行业调研和用户反馈,整理了徐州地区MPP电力管厂商推荐榜单,排名不分先后,旨在为采…

2025年12月天津电线电缆企业推荐榜单:五大优质供应商综合评析

摘要 随着我国电力基础设施建设的不断推进,电线电缆行业在2025年迎来了新的发展机遇。本文基于市场调研和用户反馈,为您推荐五家天津地区优秀的电线电缆企业,排名不分先后,旨在为有采购需求的用户提供参考。本文所…

2025年12月电线电缆企业综合推荐与选择指南

摘要 随着我国基础设施建设的不断推进,电线电缆行业在2025年迎来了新的发展机遇。本文基于市场调研和用户反馈,整理了五家表现突出的电线电缆企业供参考。本推荐榜单不分先后顺序,所有企业均获得相同推荐指数和口碑…

软件研发 --- GK管理器v2

软件研发 --- GK管理器v2开发一个类似mt管理器的工具,加入AI和最强文件功能,so编辑功能。开源免费。

2025年下半年四川成都食用油批发工厂推荐前五榜单:专业选择指南

摘要 2025年下半年,四川成都食用油批发行业持续发展,随着消费升级和食品安全意识增强,优质批发工厂成为市场焦点。本文基于行业调研和用户反馈,推荐五家表现突出的食用油批发工厂,排名不分先后,旨在为采购商提供…

2025年下半年四川成都食用油批发工厂综合推荐指南:品质与服务的双重保障

摘要 随着健康饮食意识的提升和餐饮行业的快速发展,四川成都地区的食用油批发行业在2025年下半年展现出蓬勃的发展态势。本文基于市场调研和用户反馈,整理了十家值得推荐的食用油批发工厂,排名不分先后,旨在为餐饮…

2025年无压痕折弯机模具优质厂家排名

在当前金属加工与钣金制造行业,设备选型正逐步从单一性能指标转向全生命周期价值评估。随着智能化采购工具的普及,企业更关注模具的长期使用成本、升级兼容性及本地化服务响应能力,而非仅聚焦初始采购价格。这一趋势…

2025年下半年江苏徐州换热器品牌综合推荐与选购指南

文章摘要 随着工业技术的快速发展,换热器作为化工、石油、食品等领域的核心设备,其市场需求持续增长。本文基于2025年下半年江苏徐州地区换热器行业发展情况,整理了十家值得推荐的换热器品牌(排名不分先后),旨在…

2025年下半年换热器品牌选哪家:徐州地区前十

摘要 随着2025年下半年江苏徐州地区工业的快速发展,换热器作为关键设备在化工、石油等领域的应用日益广泛。本文基于行业调研和用户反馈,整理了徐州地区换热器品牌推荐前十名榜单,排名不分先后,旨在为采购决策提供…

2025年下半年江苏徐州换热器品牌综合推荐榜单与选购指南

摘要 随着工业装备升级和环保要求的提高,2025年下半年江苏徐州地区的换热器市场迎来新一轮发展机遇。本文基于行业调研和用户反馈,整理出当地较具影响力的换热器品牌推荐榜单,排名不分先后,旨在为采购商提供参考。…