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 = falsereturn 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.mzph.cn/news/790564.shtml

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

相关文章

如何防止IP泄露,安全匿名上网?

当互联网成为每个家庭的重要组成部分后,IP地址就成了你的虚拟地址。您的请求从该地址开始,然后 Internet 将消息发送回该地址。那么,您担心您的地址被泄露吗? 对于安全意识高或者某些业务需求的用户,如果您正在寻找保护…

【Spring】使用@Bean和@Import注解配置Bean,与Bean的实例化

目录 1、bean是什么 2、配置bean 2.1、使用Bean注解配置Bean 2.2、使用Import注解配置Bean 3、实例化Bean 1、bean是什么 在 Spring 中,Bean 是指由 Spring 容器管理的对象。Spring IOC 容器负责创建、配置和管理这些 Bean 对象的生命周期。Spring IOC 容器会管…

C/C++混合项目,程序运行报错:未定义函数符号

参考 C/C项目混合编译 extern "C" 详解 《C Primer Plus》函数重载篇章 环境 系统:ubuntu20 编译器:gcc 问题 C 和 C 源码的混合项目,编译成功,但是程序运行报错找不到函数符号。 背景 项目中使用第三方的代码&a…

03.31_111期_C++_list特性和使用

利用想定义一个带头双向链表的迭代器 只能通过在 带头双向链表的类 中同一个命名空间中 再定义一个类 这个类规定 带头双向链表中迭代器的行为 下面的设计需要注意: 1. 定义的这个类需要写出构造函数, 1.1 构造函数…

边缘计算盒子与云计算:谁更适合您的业务需求?

边缘计算盒子和云计算,这两个概念听起来可能有点复杂,但其实它们就是两种不同的数据处理方式。那谁更适合您的业务需求呢?咱们来详细说说。 边缘计算盒子,就像是个小型的数据处理中心,放在离你业务现场比较近的地方。它…

Tensorflow2.0笔记 - 自定义Layer和Model实现CIFAR10数据集的训练

本笔记记录使用自定义Layer和Model来做CIFAR10数据集的训练。 CIFAR10数据集下载: https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz 自定义的Layer和Model实现较为简单,参数量较少,并且没有卷积层和dropout等,最终准确率…

基于java+SpringBoot+Vue的图书个性化推荐系统的设计与实现

基于javaSpringBootVue的图书个性化推荐系统的设计与实现 开发语言: Java 数据库: MySQL技术: SpringBoot MyBatis Vue工具: IDEA/Eclipse、Navicat、Maven 系统展示 前台展示 首页:展示图书信息、好书推荐、留言反馈等。 图书信息:用户可以查看图…

easyExcel 模版导出 中间数据纵向延伸,并且对指定列进行合并

想要达到的效果 引入maven引用 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.2.1</version></dependency> 按照要求创建模版 备注 : 模板注意 用{} 来表示你要用的变量 如果本…

商务电子邮件: 在WorkPlace中高效且安全

高效和安全的沟通是任何组织成功的核心。在我们关于电子邮件类型的系列文章的第二期中&#xff0c;我们将重点关注商业电子邮件在促进无缝交互中的关键作用。当你身处重要的工作场环境时&#xff0c;本系列的每篇文章都提供了电子邮件的不同维度的视角。 “2024年&#xff0c;全…

01 使用ArcGIS生成节点路径

目录 1 测试数据准备 1.1 创建空的GDB文件及数据集 1.2 创建道路图层 1.3 绘制路网

计算机视觉之三维重建(6)---多视图几何(上)

文章目录 一、运动恢复结构问题&#xff08;SfM&#xff09;二、欧式结构恢复2.1 概述2.2 求解2.3 欧式结构恢复歧义 三、仿射结构恢复3.1 概述3.2 因式分解法3.3 总结3.4 仿射结构恢复歧义 一、运动恢复结构问题&#xff08;SfM&#xff09; 1. 运动恢复结构问题&#xff1a;通…

enqueue:oracle锁机制

实现锁的方式就是排队咯&#xff0c;那么排队就是有enqueue这么个结构来管理 管理锁的结构叫队列&#xff0c;即enqueue 所有和enqueue相关的函数都叫KSQ-- kernal service enqueue lock是从应用层面看到的锁&#xff0c;enqueue是oracle内部管理锁的一个结构。 可以用v$lock_…

python将visio转换为 PDF 文件

参考链接&#xff1a;在 Python 中將 Visio 轉換為 PDF | Python Visio 到 PDF 庫 (aspose.com) 下载软件包&#xff1a; pip install aspose-diagram-python 读取文件&#xff0c;保存为PDF # 此代碼示例演示如何使用 PDF 保存選項將 Visio 轉換為 PDF import aspose.dia…

基于单片机的超声波测距仪设计_kaic

摘 要 如今社会持续深化转型&#xff0c;在人工智能领域&#xff0c;传感器采集外部数据&#xff0c;经过处理器对数 据运算和处理&#xff0c;从而实现相应的功能。比如自动驾驶技术中&#xff0c;超声波传感器应用广泛&#xff0c; 超声波是一种频率在 20khz 以上的声波&…

HTML优化SEO的实用技巧

在网站开发中&#xff0c;除了关注设计和用户体验&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;也是提升网站流量和可见度的关键。合理的HTML结构和元素运用能够帮助搜索引擎更好地理解页面内容&#xff0c;从而提高搜索排名。以下是一些基于HTML的SEO优化技巧&#xf…

OpenHarmony实战:小型系统移植概述

驱动主要包含两部分&#xff0c;平台驱动和器件驱动。平台驱动主要包括通常在SOC内的GPIO、I2C、SPI等&#xff1b;器件驱动则主要包含通常在SOC外的器件&#xff0c;如 LCD、TP、WLAN等 图1 OpenHarmony 驱动分类 HDF驱动被设计为可以跨OS使用的驱动程序&#xff0c;HDF驱动框…

【WebKit架构讲解】

&#x1f308;个人主页:程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

Nginx从安装到高可用实用教程!

一、Nginx安装 1、去官网http://nginx.org/下载对应的nginx包&#xff0c;推荐使用稳定版本 2、上传nginx到linux系统 3、安装依赖环境 (1)安装gcc环境 yum install gcc-c(2)安装PCRE库&#xff0c;用于解析正则表达式 yum install -y pcre pcre-devel(3)zlib压缩和解压缩…

java面试题(3)|解释 null 和 “null“ 之间的区别,并举例说明它们在编程中的使用场景

null 和 "null" 之间的区别主要在于语义和数据类型上&#xff1a; null 是一个特殊的值&#xff0c;通常用于表示缺少有效值或未定义的变量。在许多编程语言中&#xff0c;null是一个关键字&#xff0c;表示空值。例如&#xff0c;在Java中&#xff0c;当一个对象尚…

解决el-table设置固定高度后,展示不同列时表格高度变小bug

解决el-table设置固定高度后&#xff0c;展示不同列时表格高度变小bug 1、需求分析2、解决方案 1、需求分析 在el-table使用过程中&#xff0c;选择多个参数展示更多列时会出现高度变小问题究其原因可知是el-table列动态发生变化后&#xff0c;el-table__body-wrapper的高度变…