文章目录

前言

nodejs从入门到挖坟,今天早上刚刚学了一点,成功了,比较开心,入门了新的领域

web334

下载源码下来在​​user.js​​​里面发现了用户名和密码,群主比较坑哈,搞了个大写,明明是小写,​​ctfshow​​​与​​密码我忘了压缩包懒得下​

web335

方法一

一道Node.JS的RCE

[CTFSHOW][WEB入门]nodejs部分WP_node.js


之后​​cat fl00g.txt​​即可

[CTFSHOW][WEB入门]nodejs部分WP_json_02

方法二

方法太多了随便写一个吧
​​​global.process.mainModule.constructor._load('child_process').exec('calc')​

web336

方法一

先用上一题paylaod

[CTFSHOW][WEB入门]nodejs部分WP_原型链_03


尝试绕过姿势,也不行

[CTFSHOW][WEB入门]nodejs部分WP_原型链_04


那么试一下读取下文件呢,看看过滤了啥,通过全局变量读取当前目录位置

[CTFSHOW][WEB入门]nodejs部分WP_json_05


很明显过滤了这两个

[CTFSHOW][WEB入门]nodejs部分WP_node.js_06


尝试本地绕过本地打通

[CTFSHOW][WEB入门]nodejs部分WP_node.js_07


把加号url编码(浏览器解析特性+会成为空格好像)

[CTFSHOW][WEB入门]nodejs部分WP_原型链_08


出结果

[CTFSHOW][WEB入门]nodejs部分WP_node.js_09

方法二

首先读取目录下文件,看到flag了

[CTFSHOW][WEB入门]nodejs部分WP_json_10


[CTFSHOW][WEB入门]nodejs部分WP_node.js_11

方法三

[CTFSHOW][WEB入门]nodejs部分WP_json_12

web337

数组绕过,很简单,不写过程了

web338

考点:nodejs原型污染
推荐大家看看这篇文章,不用看多一点点就好,很简单的,俺也是现学的相信自己​​​继承与原型链​​ 关键点是这里

router.post('/', require('body-parser').json(),function(req, res, next) {
res.type('html');
var flag='flag_here';
var secert = {};
var sess = req.session;
let user = {};
utils.copy(user,req.body);
if(secert.ctfshow==='36dboy'){
res.end(flag);
}else{
return res.json({ret_code: 2, ret_msg: '登录失败'+JSON.stringify(user)});
}
});

主要是​​utils.copy(user,req.body);​​是利用点

[CTFSHOW][WEB入门]nodejs部分WP_原型链_13


此时,因为原型污染,​​secret​​​对象直接继承了Object.prototype,所以就导致了​​secert.ctfshow==='36dboy'​