当前位置: 首页 > news >正文

CATCTF wife原型链污染

CATCTF wife原型链污染

原型链污染原理:https://drun1baby.github.io/2022/12/29/JavaScript-%E5%8E%9F%E5%9E%8B%E9%93%BE%E6%B1%A1%E6%9F%93/

如下代码,prototype是newClass类的一个属性。newClass 实例化的对象 newObj.__proto__ 指向 newClass 类的 prototype

function newClass() {this.test = 1;
}var newObj = new newClass();

JSON 解析的情况下,__proto__ 会被认为是一个真正的“键名”,而不代表“原型”。如果是let o2 = {a: 1, "__proto__": {b: 2}}__proto__会被认为是o2的原型。如果作为键名(不会被解析)就会作为子类的原型

let o1 = {}
let o2 = JSON.parse('{"a": 1, "__proto__": {"b": 2}}')
merge(o1, o2)
console.log(o1.a, o1.b)o3 = {}
console.log(o3.b)

merge用于合并对象

merge 操作是最常见可能控制键名的操作,也最能被原型链攻击,很多常见的库都存在这个问题。

原型链污染

CATCTF 2022 wife

靶场:https://adworld.xctf.org.cn/challenges/details?hash=e5ba95f8-884a-11ed-ab28-000c29bc20bf&task_category_id=3

注册部分的代码:

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 })
})

json解析后,利用Object.assign()创建子类newUser,push进users

这里传入payload:"__proto__"{"isAdmin":true}造成原型链污染,生成的user用户拥有isAdmin=true
在这里插入图片描述

http://www.lryc.cn/news/15377.html

相关文章:

  • 浅谈Java线程池中的ThreadPoolExecutor工具类
  • 分析过程:服务器被黑安装Linux RootKit木马
  • 运动型蓝牙耳机推荐哪款、最新运动蓝牙耳机推荐
  • Python爬虫(9)selenium爬虫后数据,存入mongodb实现增删改查
  • gulimall技术栈笔记
  • vue3生命周期钩子以及使用方式
  • 以假乱真的手写模拟器?
  • 每日一题——L1-069 胎压监测(15)
  • 17_FreeRTOS事件标志组
  • 美团前端常考手写面试题总结
  • MyBatis基于XML的详细使用——动态sql
  • CMake编译opencv4.6
  • 数据分片(mycat)
  • 基于STM32设计的倒车雷达系统(超声波模块多方位测距应用)
  • Robot Framework + Selenium2Library环境下,结合Selenium Grid实施分布式自动化测试
  • 洛谷——前缀和与差分
  • 离线内网环境部署更新问题记录
  • 【Git】Git是什么?简单说说Git的工作机制?Git的常用命令有那些?
  • 《精通Spring4.x 企业应用开发实战》第1章 Spring概述
  • 【Spring Cloud Alibaba】003-Nacos 概述与单机搭建
  • 如何使用 API 工具做 Websocket 测试
  • 90%的人都理解错了HTTP中GET与POST的区别
  • 【C++】秋招实习面经汇总篇
  • 干货分享:2023欧美市场分析与机会
  • 介绍Kadence Elements元素模板:按您的方式设计网站
  • 物联网发展的重要通信技术Wi-Fi
  • OSS上传(Java和Js)
  • 【虚拟机】VirtualBox Host-Only + 主机网络共享配置
  • 小公司“混”的3年,我认真做了5件事,真的受益终生
  • Linux Crontab命令定时任务基本语法与操作教程