服务器端原型污染实战复盘:__proto__里藏着一笔赏金

admin 2026-05-20 05:48:27 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文通过实战案例详细复盘了服务器端原型污染漏洞的挖掘过程。作者在目标网站的地址修改功能中发现JSON数据可被操控,通过向proto属性注入isadmin:true成功污染原型链,使普通用户对象继承管理员权限,最终获取管理面板入口并完成漏洞利用。文章完整展示了从发现、验证到利用的攻击链条,为Web安全研究提供了具体参考。 综合评分: 88 文章分类: web安全,实战经验,漏洞分析


表单数据是用 JSON 格式发往服务器的。更妙的是,服务器返回的 JSON 对象直接包含了我的完整用户信息,地址字段已经妥妥更新好了。

这说明什么?服务端老老实实地把我提交的东西解析成了对象,还贴心地返回了最新状态。这种“你传什么我收什么”的脾气,值得进一步试探。

把这个请求丢进 Repeater,准备搞点事情。

埋下一颗危险的种子

接下来是关键技术点【服务端原型污染】。别被名字吓到,核心思路其实很朴素:JavaScript 里每个对象都有个“老祖宗”叫 __proto__,往这个祖宗身上挂东西,所有子孙后代都能继承到。

我在 Repeater 里修改了请求的 JSON 数据,塞进去一段这样的东西:

"__proto__": {    "foo":"bar"}

发送请求,盯住响应。有意思的事情发生了,返回的用户对象里,凭空冒出来一个 foo 属性,值是 bar,但 __proto__ 本身却不见踪影。

这就是经典的原型污染迹象。我没有直接修改那个返回的对象,而是“污染”了它的原型,让它从祖先那里继承了我塞进去的东西。

寻找那把能开锁的钥匙

污染成功只是第一步,接下来得找到真正能用的“零件”。仔细扫一遍响应体,我发现了一个让人眼睛发亮的属性:isAdmin,当前值是 false。

这不就是现成的目标吗?如果能让它变成 true,会发生什么?

致命一击

修改请求,换上一份更有攻击性的 payload:

"__proto__": {    "isAdmin": true}

发送。响应回来了——isAdmin 的值赫然变成了 true。

逻辑链条很清晰:这个用户对象本身并没有 isAdmin 属性,它默认从原型链上取值。我污染了原型,把 isAdmin 强行设成了 true,它就这么天真地继承了。

收获果实

切回浏览器,刷新页面。

果然,导航栏里多了一条之前不存在的链接——管理面板入口。点进去,找到用户 carlos,一键删除,案例完成。

整个攻击链环环相扣:一个没做防护的 JSON 解析,加上一段巧妙的服务器原型污染,再配合一个现成的 isAdmin 属性判断,就撕开了一道通往管理员权限的口子。

真实世界的漏洞挖掘里,这类问题往往藏得更深,但思路是相通的:多看、多想、多动手试,那些看似无关紧要的小功能,说不定就是你下一次突破的起点。

觉得有收获? 点个关注,每天分享实战漏洞挖掘技巧。有挖洞心得想交流的师傅,欢迎在留言区留言交流。


免责声明:

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

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

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

本文转载自:升斗安全 升斗安全XiuXiu 升斗安全XiuXiu《服务器端原型污染实战复盘:proto里藏着一笔赏金》

评论:0   参与:  0