WEB:wife_wife

背景知识

                JavaScript原型链污染

题目

WEB:wife_wife_第1张图片

WEB:wife_wife_第2张图片先尝试一下,注册了管理员账号

WEB:wife_wife_第3张图片这里不知道邀请码,所以没有勾选 WEB:wife_wife_第4张图片

WEB:wife_wife_第5张图片 答案不正确

这里借鉴其他大佬的思路

查看源代码才知道,后端没有数据库,所以sql注入是不可能的

// 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 })  // 设置返回信息
})

重新整理思路,进行原型链污染测试

看了这部分源码能判断出,如果这个登陆的对象里,isAdmin的属性是true,那就证明是一个管理员,如果是普通注册的用户,isAdmin属性是false

重新注册然后用bp进行抓包,根据上述思路,直接污染即可

WEB:wife_wife_第6张图片

 到最后我也没有成功拿到flag,后面复盘一下步骤

待更新

参考学习链接:
【web | CTF】攻防世界 wife_wife_天命传说的博客-CSDN博客

【愚公系列】2023年06月 攻防世界-Web(wife_wife)_愚公搬代码的博客-CSDN博客

 

你可能感兴趣的:(攻防世界,前端,java,服务器,网络安全,web安全)