赏金猎人进阶:黑盒条件下如何揪出服务端原型污染

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

文章总结: 本文探讨了黑盒测试中服务端原型污染的探测与利用方法,指出其相比前端测试面临源码缺失、无控制台、易致服务瘫痪及污染持久化等挑战。核心探测技术是利用for…in循环会遍历原型链上可枚举属性的特性,通过注入proto属性并观察响应中是否反射污染属性来确认漏洞。文章建议在用户数据更新等接口进行探测,并强调发现漏洞后需寻找可利用gadget实现权限提升等攻击。 综合评分: 85 文章分类: 漏洞分析,渗透测试,Web安全


cover_image

赏金猎人进阶:黑盒条件下如何揪出服务端原型污染

原创

升斗安全XiuXiu 升斗安全XiuXiu

升斗安全

2026年5月18日 08:08 广东

在小说阅读器读本章

去阅读

【文章说明】

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

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

你可能觉得原型污染是前端漏洞,早在浏览器里玩腻了。但别忘了,当年只能在浏览器里蹦跶的 JavaScript,自从有了 Node.js 这类运行时,早已大举进军后端,成了服务器、API 的主力开发语言。代码在哪儿跑,漏洞就在哪儿长【服务端原型污染】,正是前端那套脏活的后端翻版。

原理虽相通,但真要在黑盒条件下把它揪出来,再一路武装成远程代码执行,难度上了不止一个台阶。

为什么服务端这摊水更浑?

第一,你拿不到源码。不像前端那样能翻个底朝天,危险汇聚点和可用的 Gadget 属性,全藏在你摸不着的地方。

第二,没控制台可用。远程系统上的对象运行时是黑盒,你没法像 DevTools 那样扒开看。除非折腾出肉眼可见的异常,否则根本不知道原型到底被污染了没有。

第三,随随便便就搞瘫服务。服务端环境里,用真实属性污染对象,多半会搅乱应用逻辑甚至直接宕机。在生产环境做测试,一个不小心就成拒绝服务攻击。即便真发现了洞,站点也被你玩残了,后续利用难上加难。

第四,污染甩不掉。浏览器里刷个页面就能回到干净环境,但服务端的原型一旦被污染,它会赖在 Node 进程的整个生命周期里,你没机会重置。

既然这么棘手,怎么不动声色地探测?这里有个很讨巧的思路【污染属性反射】。

很多开发者容易忘,JavaScript 里的 for…in 循环会遍历对象上所有可枚举属性,原型链上继承来的也照单全收。内置的构造函数属性默认不可枚举,所以不会被揪出来,但你注入的可枚举属性,就会被一视同仁。

不好理解?自己跑一下就明白了:

const myObject = { a: 1, b: 2 };// 往原型上随便挂个属性Object.prototype.foo = 'bar';myObject.hasOwnProperty('foo'); // falsefor(const propertyKey in myObject){    console.log(propertyKey);}// 输出:a, b, foo

数组也一样,for…in 会先遍历每个索引,再接着遍历继承来的属性。

const myArray = ['a','b'];Object.prototype.foo = 'bar';for(const arrayKey in myArray){    console.log(arrayKey);}// 输出:0, 1, foo

这就给我们开了一扇窗:如果应用在响应里原样返回了这些遍历出的属性,就等于主动把“被污染了”的信号递到你手上。那些用 POST 或 PUT 提交 JSON 数据的用户更新接口,通常是绝佳探测点——服务器往往会返回刚刚创建或修改好的对象信息。

你可以像这样发起试探:

POST /user/update HTTP/1.1Host: vulnerable-website.com...{    "user":"wiener",    "firstName":"Peter",    "lastName":"Wiener",    "__proto__":{        "foo":"bar"    }}

如果站点存在漏洞,你注入的属性会像钉子户一样,端端正正地出现在响应数据里:

HTTP/1.1 200 OK...{    "username":"wiener",    "firstName":"Peter",    "lastName":"Wiener",    "foo":"bar"}

个别情况下,这些属性甚至会被服务端用来拼装 HTML 并在浏览器中渲染,那可就是额外的惊喜了。

一旦确认原型污染可行,别停,马上切换思维去找能落地的 Gadget。凡是涉及用户数据更新的功能都值得深挖,因为这类操作常常会把传入数据合并进代表用户身份的内部对象。如果你能往自己用户对象上黏贴任意属性,权限提升这类高危漏洞往往就藏在几步之后。

觉得这波操作有意思?想深入挖掘更多服务端漏洞组合拳?

欢迎关注本号,每周拆解实战中的硬核渗透技巧,带你从赏金新手走向漏洞猎手。


免责声明:

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

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

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

本文转载自:升斗安全 升斗安全XiuXiu 升斗安全XiuXiu《赏金猎人进阶:黑盒条件下如何揪出服务端原型污染》

评论:0   参与:  0