news 2026/7/27 9:13:57

攻防世界——wife_wife

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
攻防世界——wife_wife

拿到靶机先看是什么服务器和框架

发现是experss框架

那么用的环境就是node,js环境了

Express 是构建在 Node.js 之上的 Web 应用框架,两者是"框架与运行时环境"的关系。简单来说:Node.js 是地基,Express 是在这地基上建造的房屋框架。

用dirsearch扫描目录

发现也就只有一个登录和注册

并且这两个在一开始的页面都给了

尝试注册一个管理员账号

但我们发现如果要注册一个管理员账号要输入一个特定的code

随便输入一个就会失败

回头看看源代码

什么也没发现

随便注册一个账号进去看看

发现出现了flag

但是是错误的

抓取注册时的包看看

发现这里控制上传的环境就是js.node(JSON)

并且以数组的方式传入了4个参数{"username":"admin","password":"admin","isAdmin":true,"inviteCode":"123"}

随便注册一个账号然后抓取登录时的包

没有什么新东西

那如果我们不勾上is admin直接注册呢

发现显示已存在

但我们发现这里也显示是is admin 不过这次是false,

但同时也发现这里没有code认证

也许可以直接修改is admin 的值为ture能实现越权访问呢

修改is admin 的值为ture

发现和先前的一样

没提示了,那就得进行fuzz测试了

(在比赛的时候这里有个himt提示)

这里我测出这里可以进行原型链污染

当我们污染 __proto__.isAdmin 为 true 时便可获取管理员权限

注册一个新的账号

注入

{"__proto__":{"isAdmin":true}

便可越权登录

页面果然不一样了

CatCTF{test_flag_h0w_c@n_I_l1ve_w1th0ut_nilou}

最后扒出源代码分析一下

// post请求的路径 app.post('/register', (req, res) => { let user = JSON.parse(req.body) // 把我们输入的账号密码,从json字符串转成对象 // 判断我们有没有输入账号和密码 if (!user.username || !user.password) { return res.json({ msg: 'empty username or password', err: true }) } // 判断账号是否存在总对象的username里,如果相同的username就是重复用户名了 if (users.filter(u => u.username == user.username).length) { return res.json({ msg: 'username already exists', err: true }) } // isAdmin是否true 与 邀请码是不是等于这个常量,所以sql注入没用,邀请码是个常量 if (user.isAdmin && user.inviteCode != INVITE_CODE) { user.isAdmin = false return res.json({ msg: 'invalid invite code', err: true }) } // 使用系统函数复制对象,打包成一个新的对象 let newUser = Object.assign({}, baseUser, user) users.push(newUser) // 存到总对象里 res.json({ msg: 'user created successfully', err: false }) // 设置返回信息 })

这里用了一个Object.assign函数

这个函数可以把传入的两个参数合并成一个新的函数,并且会修改原来的参数

举个例子

const target = { a: 1, b: 2 }; const source = { b: 3, c: 4 }; const result = Object.assign(target, source); console.log(result); // 输出: { a: 1, b: 3, c: 4 } console.log(target === result); // 输出: true (修改了原始target对象)

工作机制:
• 将 source 的所有可枚举属性复制到 target
• b 属性被覆盖(从 2 变为 3)
• c 属性被新增 • 返回修改后的 target 对象本身(不是新对象)

const target = { a: 1, b: 2 }; // 攻击者构造的恶意 source const maliciousSource = JSON.parse('{"__proto__": {"isAdmin": true}}'); console.log("攻击前:", {}.isAdmin); // undefined - 没有被污染 // 执行合并 - 原型污染发生! const result = Object.assign(target, maliciousSource); console.log("合并后target:", result); // 输出: { a: 1, b: 2 } (注意:没有 isAdmin,也没有 __proto__ 属性) console.log("污染检查1:", {}.isAdmin); // true! Object.prototype 被污染 console.log("污染检查2:", [].isAdmin); // true! Array.prototype 也被影响 console.log("污染检查3:", "test".isAdmin); // true! String 也受影响

当程序没有渲染isAdmin时是不会触发原型链污染,故原型链污染的一个前提是要能够渲染我们输入的参数

在三次检查中可以知道一旦污染成功便会存在于prototype属性中,即使新建一个对象也会包含我们输入的内容

对应到本题

let newUser = Object.assign({}, baseUser, user) users.push(newUser)

并且从上面的源代码中我们可以知道

let user = JSON.parse(req.body)

在注册页面中传入的所有参数都会传入到user中

if (user.isAdmin && user.inviteCode != INVITE_CODE) { user.isAdmin = false return res.json({ msg: 'invalid invite code', err: true })

nodejs通过post请求体来进行解析

当isAdmin返回为false时会登录失败

因此当我们污染 __proto__.isAdmin 为 true 时便可注册一个获取管理员权限的账号

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/26 7:00:31

GPT-5.2被Gemini 3 Pro碾压?真实编程场景实测,结果出人意料!

本文对比测试了GPT-5.2与Gemini 3 Pro在编程任务上的表现,通过烟花前端效果、学术论文分析和RAG代码重构三个场景进行评测。结果显示,Gemini 3 Pro在理解指令和代码重构方面表现更佳,而GPT-5.2在处理复杂任务时遇到困难。文章提示程序员在选择…

作者头像 李华
网站建设 2026/7/27 3:04:34

【收藏】大模型处理长文本的最佳实践:分步处理法

大模型处理长文本面临上下文窗口限制和处理能力下降的挑战。文章提出两种解决方案:多次生成后拼接完整报告,或分批处理数据后再总结。推荐采用分步骤处理方法,因其更符合人类操作习惯,也适应报告不同部分的不同需求。处理长文本时…

作者头像 李华
网站建设 2026/7/25 19:56:49

GTP协议

GTP协议 一、GTP协议 GTP(GPRS 隧道协议)是一种应用层协议,主要依赖 UDP、TCP,偶尔还有 SCTP,在 3G、4G 和 5G 等移动网络中传输数据包。它封装用户数据和信令,利用这些底层传输进行传输,但不提…

作者头像 李华
网站建设 2026/7/24 8:37:48

巴菲特的投资智慧与长期财富

巴菲特的投资智慧与长期财富关键词:巴菲特、投资智慧、长期财富、价值投资、复利效应摘要:本文深入探讨了巴菲特的投资智慧及其与长期财富积累之间的紧密联系。从巴菲特的投资理念、核心策略入手,详细剖析其背后的核心概念、算法原理以及数学…

作者头像 李华
网站建设 2026/7/25 7:43:10

海外的bug-hunters,不一样的403bypass

一种绕过403的新技术,跟大家分享一下。研究HTTP协议已经有一段时间了。发现HTTP协议的1.0版本可以绕过403。于是开始对lyncdiscover.microsoft.com域做FUZZ并且发现了几个403Forbidden的文件。(访问fsip.svc为403)在经过尝试后,得…

作者头像 李华
网站建设 2026/7/25 0:03:19

模型推理加速技术全景解析:从基础优化到前沿创新

在2024-2025年间,大模型推理加速技术取得了显著突破,从传统的模型压缩到前沿的分页内存管理,再到革命性的投机解码,这些技术共同推动了大模型推理速度的质的飞跃。本报告将深入浅出地解析这些主流加速手段,结合一年内发…

作者头像 李华