在几百行混淆代码里找原型污染?赏金猎人的“多米诺骨牌”挖掘术

admin 2026-05-16 04:49:09 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文详细介绍了客户端原型污染漏洞的挖掘技术,包括手动污染源测试、gadget定位方法及自动化工具DOMInvader的应用。文章通过三步闯关法讲解如何向Object.prototype注入属性并验证,并演示通过调试器追踪污染属性流向危险sink点的过程,旨在为安全研究提供可操作的技术指导。 综合评分: 85 文章分类: web安全,渗透测试,安全工具


cover_image

在几百行混淆代码里找原型污染?赏金猎人的“多米诺骨牌”挖掘术

原创

升斗安全XiuXiu 升斗安全XiuXiu

升斗安全

2026年5月10日 10:06 广东

在小说阅读器读本章

去阅读

【文章说明】

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

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

你有没有想过,有些网站漏洞藏得特别深,深到普通扫描器根本发现不了?今天我们来聊聊其中的一个“隐藏款”——客户端原型污染。别被名字吓到,你可以把它想象成:你往上帝模式的对象口袋里,偷偷塞了一把钥匙,然后所有能碰到这个口袋的代码,都可能被这把钥匙打开不该开的门。

一、手动挖“污染源”:像调鸡尾酒一样试来试去

手动找原型污染源,本质上是个不断试错的体力活。你的目标很简单:就是想方设法往 Object.prototype 里塞一个自定义属性,看它能不能被成功“吞下去”。

具体怎么试?你可以把它理解成三步闯关:

第一步,对着域名参数下手。

尝试通过查询字符串、URL 井号后面的片段,或者任何 JSON 输入点,注入一个属性。就像这样:

vulnerable-website.com/?__proto__[foo]=bar

第二步,打开浏览器控制台验货。

在控制台输入以下代码,看你的“种子”有没有真的被种进原型里:

Object.prototype.foo// "bar" —— 恭喜,原型被你植入了!// undefined —— 没成功,换个姿势再来

第三步,如果没反应,马上换语法。

有时候下划线或括号写法不管用,换个点号写法反而就灵了,反之亦然:

vulnerable-website.com/?__proto__.foo=bar

然后,对每个你怀疑的输入点,都重复这套流程。

小提示:要是两种语法都失败了,别急,说不定还能通过目标的构造函数去污染原型,这个骚操作我们后面会细说。

说真的,这么一步步手工测下来,效率就像拿着放大镜找沙滩上的针。所以更聪明的办法,是让 DOM Invader(Burp 自带浏览器里的一个插件)帮你自动干这个活。它能在你正常浏览时,默默在后台帮你测试各种原型污染源,省下大把时间。

二、手动定位“ gadget ”:给代码下个钩子

假设你现在已经成功往 Object.prototype 里塞了东西,下一步就是找个可利用的“ gadget ”——可以理解成,那些会不经意间用到你这个被污染属性的代码片段,它们就是你要钓鱼时挂的饵。

虽然我们还是推荐用 DOM Invader 来做这一步,但了解手工过程能让你对这个漏洞的理解更深一层。

操作流程,相当于给代码做一场“外科手术”:

  1. 先翻看源码,找出应用本身或者它引用的第三方库里,都用到了哪些属性名。
  2. 打开 Burp,开启响应拦截(位置:Proxy > Options > Intercept server responses),然后拦截包含目标 JavaScript 文件的那个响应。
  3. 在这份脚本的最开头,粗暴地加一句 debugger;,接着放行后续的请求和响应。
  4. 在 Burp 内置浏览器里打开对应页面,脚本执行到 debugger; 处会自动暂停。
  5. 趁脚本暂停的时候,切到控制台,输入下面这段命令(把 YOUR-PROPERTY 换成你猜测可能是 gadget 的属性名):
Object.defineProperty(Object.prototype, 'YOUR-PROPERTY', {    get() {        console.trace();        return 'polluted';    }});

这个操作相当于在原型上装了一个“监控探头”。只要代码里任何地方读取了这个属性,控制台就会立刻蹦出一条堆栈跟踪。

  1. 点继续执行,然后盯紧控制台。一旦出现堆栈信息,就说明这个属性在程序某处被真实地访问了。

  2. 展开堆栈,用链接直接跳转到读取属性的那行代码。

  3. 接着利用浏览器的调试器,一步一步跟下去,观察这个属性最终有没有流入危险的“水槽”( sink ),比如 innerHTML 或者 eval() 这类能执行恶意操作的地方。

  4. 把你觉得可疑的其他属性名,挨个用同样方法测试一遍。

三、让自动化为 gadget 狩猎加速

从上面这套步骤你也能看出来,手工去真实网站上翻 gadget ,简直是个能把人眼熬瞎的差事。尤其现在网站动不动就依赖一堆第三方库,你可能得面对几千行压缩得亲妈都不认识的代码。

而 DOM Invader 能自动帮你扫描这些 gadget ,有些情况下甚至直接帮你生成 DOM XSS 的漏洞验证代码。这意味着,原本需要几小时才能找到的攻击路径,现在可能几秒钟就到手了。

测试技巧也好,工具思路也好,光看不动手永远成不了自己的。如果你也在寻找属于你的第一个高危漏洞,或者想和更多赏金猎人实时交流骚操作,欢迎关注本公众号,一起从零开始打怪升级。


免责声明:

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

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

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

本文转载自:升斗安全 升斗安全XiuXiu 升斗安全XiuXiu《在几百行混淆代码里找原型污染?赏金猎人的“多米诺骨牌”挖掘术》

评论:0   参与:  0