原型污染+DOMXSS完整利用链:那个多出来的“1”差点毁了我的漏洞

admin 2026-05-14 14:39:19 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文详解客户端原型污染+DOMXSS完整利用链,演示手工挖掘与DOMInvader工具两种方法。关键发现:payload末尾可能被额外添加字符导致执行失败,需通过添加减号等方式绕过。建议先用工具快速定位漏洞点,再手工复现确认细节,提升挖掘效率与深度。 综合评分: 84 文章分类: 渗透测试,WEB安全,漏洞分析,实战经验,安全工具


cover_image

原型污染+DOM XSS完整利用链:那个多出来的“1”差点毁了我的漏洞

原创

升斗安全XiuXiu 升斗安全XiuXiu

升斗安全

2026年5月12日 08:18 广东

在小说阅读器读本章

去阅读

【文章说明】

  • 目的:本文内容仅为网络安全技术研究与教育目的而创作。
  • 红线:严禁将本文知识用于任何未授权的非法活动。使用者必须遵守《网络安全法》等相关法律。
  • 责任:任何对本文技术的滥用所引发的后果自负,与本公众号及作者无关。
  • 免责:内容仅供参考,作者不对其准确性、完整性作任何担保。

阅读即代表您同意以上条款。

想靠纯手动挖到高阶原型污染漏洞,很多时候就差在“怎么找”和“怎么连起来”这两步。下面这份笔记我尽量用说人话的方式,带你从头到尾跑一遍,看完可以直接上手实操。

你有没有过这种瞬间:明明感觉已经摸到了漏洞的边,但就是差那么一点串不起来?今天我们就来聊一个又经典又容易被人忽视的攻击面——客户端原型污染(Prototype Pollution)。我会分别演示纯手工和用神器 DOM Invader 两种玩法,帮你把这个技能点彻底点亮。

一、手工挖洞:像侦探一样串联整条攻击链

挖原型污染,本质上就是做三件事:找到污染源、找到能被污染的“零件”(Gadget)、把 payload 调通。

  1. 找到原型污染入口

先用最粗暴的方式试探——直接在 URL 查询字符串里注入属性,看能不能污染 Object.prototype:

/?__proto__[foo]=bar

打开控制台,输入 Object.prototype 查看,你会发现 foo 属性根本没进去。别急,换一种写法再试:

/?__proto__.foo=bar

再次查看 Object.prototype,你会发现对象里多了一个 foo 属性,值正是 bar。恭喜,你刚亲手确认了一个原型污染源。

  1. 顺藤摸瓜,找到可利用的 Gadget

转到“源代码”面板,把目标站加载的 JS 文件过一遍,重点盯那些能执行代码的危险函数(也就是 sink)。在 searchLoggerAlternative.js 里发现了一个 eval() 调用,而且它接收的参数 manager.sequence 默认是未定义的——这简直是为污染量身定做的位置。

  1. 调通你的 Payload

知道了入口和落点,先试一版最简单的 payload:

/?__proto__.sequence=alert(1)

刷新后,发现并没有弹窗。打开控制台,看到报错了。点开堆栈追踪最上面的链接,直接跳到了 eval() 那一行。在这里打个断点,再刷新一次。

鼠标悬停在 manager.sequence 上一看,它的值竟然是 alert(1)1——末尾被多拼了一个数字 1,导致语法错误。这就解释了为什么没弹窗。

知道问题就好办了。去掉断点,在 payload 末尾补一个减号,把多出来的字符变成表达式的一部分:

/?__proto__.sequence=alert(1)-

再次刷新,弹窗出现,实验搞定。整条攻击链被你完整走通。

二、DOM Invader 方案:让工具帮你做重复劳动

手工虽然帅,但如果每次都要这么找,效率太低。Burp 内置浏览器里有个 DOM Invader,就是专门干这个的。

先打开内置浏览器,加载目标页面,启用 DOM Invader 并打开原型污染开关。接着打开开发者工具里的 DOM Invader 面板,刷新页面。你会发现它已经自动识别出查询字符串(也就是 search 属性)中存在原型污染向量。

点一下 Scan for gadgets,DOM Invader 会另开新标签页开始自动扫描。扫完后,在同一个标签页里打开 DOM Invader 面板,你会看到它已经帮你把链路打通了——通过一个叫 sequence 的 gadget,成功触达了 eval() 这个 sink。

到这一步,直接点 Exploit。有意思的是,第一次自动生成的验证 payload 同样没弹窗。回到之前的标签页再看一眼 eval() 那个位置,发现 canary 字符串末尾果然被多塞了个数字 1——跟手工验证时一模一样的问题。

再点一次 Exploit,在新打开的标签页 URL 末尾手动加个减号,回车刷新。alert(1) 顺利弹出,问题解决。

两种方式跑完,你会发现核心逻辑完全一样,只是一个纯靠肉眼和手感,一个用工具加速排查。真正打赏金的时候,建议先用 DOM Invader 快速定位,再手工复现确认细节,效率和深度都有了。

如果觉得这篇笔记对你有用,欢迎点赞、在看、转发三连,算是对我熬夜整理的一种鼓励。也欢迎在评论区聊聊你遇到过的那些“只差一点点”的坑。

还想看更多实战向的挖洞思路,可以关注本号,我会持续分享一线渗透测试中的干货和小众玩法。


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:升斗安全 升斗安全XiuXiu 升斗安全XiuXiu《原型污染+DOM XSS完整利用链:那个多出来的“1”差点毁了我的漏洞》

评论:0   参与:  0