主页 > 网络知识 > 从防护角度看一句话木马的发展变形

从防护角度看一句话木马的发展变形

一句话木马用到了一个比较有趣的命令下发思路,即不直接发送命令编码,而是将命令代码直接发送给木马端执行,这样木马端文件会特别小,而由于每条命令需要通过网络传输,数据包会比较大。这些工具的流量也是ips,waf等网络安全设备的检测重点。

一句话木马的发展主要有几个典型的代表:最开始是中国菜刀,接着是开源的Cknife和中国蚁剑,到近两年的冰蝎,攻击工具一直在进化。其实还有个神奇的二进制远控 Poison Ivy,说它神奇就在于它相当于一个二进制的一句话工具,直接传送shellcode到被控端执行,而且据说这个远控是比较早(零几年就出现了),有高手在github重写了一份代码可以来学习,感谢Ckinfe,蚁剑,冰蝎(虽然没开源,但是并没有做加密混淆)和PI Reload这些作者的开源精神,我也只分享一下自己粗浅的分析和学习,分析目的也是促进我们防护规则和检测思路的优化,欢迎大佬们指点交流。

二、WEB一句话木马

菜刀,Cknife,蚁剑这些工具原理比较接近,使用方法大家应该比较熟了☺,可能有些做渗透测试的朋友也没有了解过原理。我们做防护规则,对常用的工具都会做分析,先以Cknife为例来分析这个系列。

2.1Ckinife连接

2.1.1 PHP一句话连接

Asp,aspx和PHP的连接原理比较接近,PHP最基础的一句话如下:

<?php @eval($_POST[‘pass’]);?>

通过Cknife等发包工具,把需要执行的php脚本片段,通过密码pass参数传给服务器端,服务器通过eval函数进行执行。可以看出,一句话木马的本质是PHP,ASP(ASPX)语言具有eval函数,使之具有了动态性,基于动态性,攻击者就可以把命令传给服务器端的一句话木马进行执行,这些命令在config.ini作了定义。

 

image.png

发的请求包中,action参数用来传输base64编码后的命令,可能是考虑到特殊字符容易出问题或者不符合rfc协议之类的原因。真正的连接密码pass,先对action参数做base64解密,然后传到服务器端执行。

 

 

image.png

我们把PHP命令做解码,得到

 

@ini_set("display_errors","0");@set_time_limit(0);@set_magic_quotes_runtime(0);echo("-

|");;$D=base64_decode($_POST["z1"]);$F=@opendir($D);if($F==NULL){echo("ERROR:// Path Not Found Or No Permission!");}else{$M=NULL;$L=NULL;while($N=@readdir($F)){$P=$D."/".$N;$T=@date("Y-m-d H:i:s",@filemtime($P));@$E=substr(base_convert(@fileperms($P),10,8),-4);$R=" ".$T." ".@filesize($P)." ".$E."";if(@is_dir($P))$M.=$N."/".$R;else $L.=$N.$R;}echo $M.$L;@closedir($F);};echo("|<-");die();

可以看到通过循环遍历某个路径下的文件,其中路径又是通过z1参数base64编码进行传递,截图是查看C盘目录。

2.1.2PHP一句话连接流量检测

截取了一个snort的开源规则,他检测的字符串是=@eval(base64_decode($_POST,如下

 

image.png

根据规则的描述信息来看,是基于13年fireeye的分析中国菜刀的文章添加的规则,个人认为这条规则还是写的太严格了,其实直接看抓到的cknife报文,就无法匹配菜刀的这条规则,

 

 

image.png

如上图Cknife的payload中,eval后面带了一个。Ips、waf规则其实只要不影响业务,也是越简单越好,避免漏报。

 

2.1.3JSP一句话连接

Java由于没有eval函数,所以最开始是没有一句话木马的,但是由于菜刀/Cknife这类工具太好用了,jspspy这种大马又比较大,所以有高手写了一个带简单功能的webshell,通过定制(customize)方式来传输命令码,我理解customize是传控制码而不传输命令,其流量如下:

说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!