wife_wife【web 攻防世界】

news2025/1/17 0:25:22

大佬的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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1567282.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【SpringCloud】Ribbon 负载均衡

目 录 一.负载均衡原理二.源码跟踪1. LoadBalancerIntercepor2. LoadBalancerClient3. 负载均衡策略 IRule4. 总结 三.负载均衡策略1.负载均衡策略2.自定义负载均衡策略 四.饥饿加载 在 order-service 中 添加了 LoadBalanced 注解,即可实现负载均衡功能&#xff0c…

Spring定义Bean对象笔记(二)

前言:上一篇记录了通过XML文件来定义Bean对象,这一篇将记录通过注解和配置类的方式来定义Bean对象。 核心注解: 定义对象:Component,Service,Repository,Controller 依赖注入: 按类型:Autowired 按名称&am…

Windows下Docker搭建Flink集群

编写docker-compose.yml 参照:https://github.com/docker-flink/examples/blob/master/docker-compose.yml version: "2.1" services:jobmanager:image: flink:1.14.4-scala_2.11expose:- "6123"ports:- "18081:8081"command: jobma…

03 Python进阶:MySQL - mysql-connector

mysql-connector安装 要在 Python 中使用 MySQL 数据库,你需要安装 MySQL 官方提供的 MySQL Connector/Python。下面是安装 MySQL Connector/Python 的步骤: 首先,确保你已经安装了 Python,如果没有安装,可以在 Python…

OpenHarmony实战:轻量级系统之配置其他子系统

除上述子系统之外,还有一些必要但是无需进行移植的子系统。如:分布式任务调度子系统、DFX子系统。 这些子系统添加方式比较简单,在“vendor/MyVendorCompany/MyProduct/config.json”文件中进行如下配置即可: {"subsystem&…

Nginx是什么?

一、什么是Nginx? Nginx是一个高性能的HTTP和反向代理Web服务器 二、Nginx有什么优点 Nginx稳定性好、资源消耗低、配置简单、功能丰富 1、作为Web服务器,Nginx处理静态文件、索引文件,自动索引的效率非常高 2、作为代理服务器,Nginx可以…

大创项目推荐 深度学习 python opencv 火焰检测识别 火灾检测

文章目录 0 前言1 基于YOLO的火焰检测与识别2 课题背景3 卷积神经网络3.1 卷积层3.2 池化层3.3 激活函数:3.4 全连接层3.5 使用tensorflow中keras模块实现卷积神经网络 4 YOLOV54.1 网络架构图4.2 输入端4.3 基准网络4.4 Neck网络4.5 Head输出层 5 数据集准备5.1 数…

Linux:ip和ip协议的初步认识

文章目录 ip协议基本认识ip协议的报头网段划分ip的类型划分 ip协议基本认识 前面对于TCP的内容已经基本结束了,那么这也就意味着在传输层也已经结束了,那么下一步要进入的是的是网络层,网络层中也有很多种协议,这里主要进行解析的…

uniapp微信小程序真机图片不显示

不同设备可能出现部分设备显示不了图片,解决办法:图片地址直接使用,不要拼接: https://images.weserv.nl/?urlhttp

Leetcode442. 数组中重复的数据

Every day a Leetcode 题目来源:442. 数组中重复的数据 解法1:将元素交换到对应的位置 由于给定的 n 个数都在 [1,n] 的范围内,如果有数字出现了两次,就意味着 [1,n] 中有数字没有出现过。 因此,我们可以尝试将每一…

【fastadmin】脚本模式下,日志钩子函数执行出现死循环,导致内存溢出奔溃

问题出现原因是想对项目中error级别的日志,接入钉钉告警,方便查看 于是使用钩子方法,日志写入完成后,自动调用自定义的告警方法中 1、在application/tags.php 中添加log_write_done > [app\\common\\behavior\\Common, ],2、在…

JavaAgent 技术原理及实战

JavaAgent 技术原理及实战 1、引子2、JavaAgent 简单示例:方法开始和结束时打印日志2.1 创建 Agent2.2 编写验证 agent 功能的测试类2.2.1 使用JavaAgent 静态加载方式2.2.2 使用 JavaAgent 动态加载方式 2.3、小结 3、JavaAgent3.1 JavaAgent是什么?3.2…

搞学术研究好用免费的学术版ChatGPT网站-学术AI

https://chat.uaskgpt.com/mobile/?user_sn88&channelcsdn&sceneloginhttps://chat.uaskgpt.com/mobile/?user_sn88&channelcsdn&scenelogin 推荐一个非常适合中国本科硕士博士等学生老师使用的学术版ChatGPT, 对接了超大型学术模型&#xff0c…

考研数学|《1800题》基础练习基本不会,怎么办?

这其实是因为,知识点之间没有形成联结 这样只要题目难度提升,一个题目的知识点综合度变高,就不知道该怎么做了。 不要害怕,其实考研复习早起阶段,大家基本上都经过这个阶段,不过有的同学能够快速找到做题…

Vue ElementPlus Input 输入框

Input 输入框 通过鼠标或键盘输入字符 input 为受控组件,它总会显示 Vue 绑定值。 通常情况下,应当处理 input 事件,并更新组件的绑定值(或使用v-model)。否则,输入框内显示的值将不会改变,不支…

[C#]winform使用OpenCvSharp实现透视变换功能支持自定义选位置和删除位置

【透视变换基本原理】 OpenCvSharp 是一个.NET环境下对OpenCV原生库的封装,它提供了大量的计算机视觉和图像处理的功能。要使用OpenCvSharp实现透视变换(Perspective Transformation),你首先需要理解透视变换的原理和它在图像处理…

WPF中动画教程(DoubleAnimation的基本使用)

实现效果 今天以一个交互式小球的例子跟大家分享一下wpf动画中DoubleAnimation的基本使用。该小球会移动到我们鼠标左键或右键点击的地方。 该示例的实现效果如下所示&#xff1a; 页面设计 xaml如下所示&#xff1a; <Window x:Class"AnimationDemo.MainWindow&qu…

mysql 正则表达式查询

学习了mysql 连接查询和子查询和myql join连接&#xff0c;接下来学习下正则表达式查询。正则表达式的规则都是相似的。 8&#xff0c;使用正则表达式查询 正则表达式通常被用来检索或替换那些符合某个模式的文本内容,根据指定的匹配模式匹配文本中符合要求的特殊字符串。例如从…

Android 高德地图

1.获取Key 进入高德开放平台控制台&#xff0c;创建一个新应用。在创建的应用上点击"添加key"按钮&#xff0c;在弹出的对话框中&#xff0c;依次输入key名称&#xff0c;选择服务平台为“Android平台”&#xff0c;输入发布版安全码 SHA1、以及 Package。 获取 S…

flutter获取手机中的系统路径信息

https://www.bilibili.com/video/BV1wE421g7sw获取系统中的路径 获取系统中的路径&#xff0c;并在这个路径中创建一个文本文件【str.txt】 然后进行写入【str.txt】 再读取这个文件【str.txt】 手机没有开通root权限无法看到写入到【应用程序文档目录】路径中的文件 用来…