1. 首页
  2. 下载

实战 | 记一次PHP混淆后门的分析利用

【推荐学习】暗月渗透测试培训 十多年渗透经验,体系化培训渗透测试 、高效学习渗透测试,欢迎添加微信好友aptimeok 咨询。

作者:小老弟你怎么回事@深信服深蓝实验室天慧战队

 

实战 | 记一次PHP混淆后门的分析利用

 

目标一个站发现版权和标题都是XX源码下载网,那目标源码可能是网上下载的,于是我也搞了一套源码回本地开始测试。

实战 | 记一次PHP混淆后门的分析利用

 

我习惯网上这种能下载到的源码一般很大可能是存在后门,先D盾杀查一把梭,果然源码有混淆,然后一个藏在images目录下的php非常可疑,还调用了phpinfo()。

实战 | 记一次PHP混淆后门的分析利用

 

当然事情远没有这么简单,打开该文件后发现进行了混淆编码,于是尝试哪些php解密工具进行解密。

实战 | 记一次PHP混淆后门的分析利用

 

但是并不能解开,或者说不是一些常见的加密和混淆的方案。尝试手工分析

实战 | 记一次PHP混淆后门的分析利用

先把源码格式化一下,虽然看着还是很自闭,但是至少能下手了。

实战 | 记一次PHP混淆后门的分析利用

看到这种数字+字母最高只出现个F的,那就是16进制了,特别还用了pack函数。

实战 | 记一次PHP混淆后门的分析利用

实战 | 记一次PHP混淆后门的分析利用

随便选一段然后用burpsuite的解码器选择 ASCII hex的方式

66696C655F6765745F636F6E74656E7473->file_get_contents

实战 | 记一次PHP混淆后门的分析利用

当然如果不放心可以直接把代码抠出来,在打印一下结果都是一样的。

实战 | 记一次PHP混淆后门的分析利用

 

于是我把这些16进制的全部转换了下作为注释,发现全部都是文件操作。

$GLOBALS[pack(chr(72) . chr(42), "415F4141415F5F") ] = pack(chr(72) . chr(42), "6670757473");//A_AAA__  fputs

其实像这种也不难理解,其实就是定义全局变量和对函数做了个别名这个是php的一个特性。就是把函数名赋值给变量,在变量直接传参就等于调用了哪个函数。

实战 | 记一次PHP混淆后门的分析利用

比如把base64_decode赋值给b变量,然后b当成函数直接使用,其实就是在用base64_decode()这个函数。

换句话说以上哪些什么AAA_AA的其实就只是把关键函数换了个名字,是一个变量函数。

实战 | 记一次PHP混淆后门的分析利用

直接访问马是空白页面,我想先访问到phpinfo看一下,必须要进入这个判断。

$GLOBALS[A_A_AAA][(0 - 1072 + 67 * E_CORE_ERROR) ][pack(chr(72) . chr(42), "70") ]

来分析下这个全局的三维数组

首先$GLOBALS[A_A_AAA]里面存放了$_GET, $_SERVER这两个的地址。既然是数组那么存放的方式是如下的

$GLOBALS[A_A_AAA][0]==$_GET$GLOBALS[A_A_AAA][1]== $_SERVER

实战 | 记一次PHP混淆后门的分析利用

 

0 – 1072 + 67 * E_CORE_ERROR 其实运算后就是等于0

$GLOBALS[A_A_AAA][(0 – 1072 + 67 * E_CORE_ERROR) ] 就等于$_GET

pack(chr(72) . chr(42), “70”)  解码后等于p

所以  

$GLOBALS[A_A_AAA][(0 - 1072 + 67 * E_CORE_ERROR) ][pack(chr(72) . chr(42), "70") ]其实就是$_GET[‘p’]

实战 | 记一次PHP混淆后门的分析利用

686A这个16进制转文本就是hj

实战 | 记一次PHP混淆后门的分析利用

?p=hj 即可

实战 | 记一次PHP混淆后门的分析利用

在它的一个条件中发现它在获取远程一些东西。

实战 | 记一次PHP混淆后门的分析利用

实战 | 记一次PHP混淆后门的分析利用

解码后,而且这种

AA_____AA____A

其实在开头就赋值过了,其实就是个变量函数。

实战 | 记一次PHP混淆后门的分析利用

在结合上下文

实战 | 记一次PHP混淆后门的分析利用

其实就是file_get_contents去请求加载Base64_self.png这个马,然后在通过file_put_contents写成yjh.php。

实战 | 记一次PHP混淆后门的分析利用

实战 | 记一次PHP混淆后门的分析利用

把马拉到本地一看,混淆程度相比刚才,有过之而无不及。原以为经过一层了应该不会在有啥混淆了,还是太年轻了。同样扔到在线解密的php网站,同样提示无果不能识别。

看不懂没关系,挑你看的懂的看,毕竟混淆就是让你看不懂,目的就达到了。

实战 | 记一次PHP混淆后门的分析利用

这些16进制转成文本看看。

实战 | 记一次PHP混淆后门的分析利用

使用burpsuite解码模块一把梭,它会尽可能的把能转的给转了。

实战 | 记一次PHP混淆后门的分析利用

实战 | 记一次PHP混淆后门的分析利用

实战 | 记一次PHP混淆后门的分析利用

实战 | 记一次PHP混淆后门的分析利用这哥几个不就来了嘛,找到eval了,你懂的。

其实这就差不多了,不过我们还是可以在跟一下。从eval中开始回溯。

实战 | 记一次PHP混淆后门的分析利用实战 | 记一次PHP混淆后门的分析利用实战 | 记一次PHP混淆后门的分析利用

全局定义了个$A97vPEJ变量放入eval中执行。

$A97vPEJ的值是和$c拼接。

实战 | 记一次PHP混淆后门的分析利用

$c的值是从$A97tIEK获取

$A97tIEK从$A97eF0获取

实战 | 记一次PHP混淆后门的分析利用

 

$A97eF0是base64_decode解码后的内容

在看看

call_user_func_array(“base64_decode”,$A97zA1)中的$A97zA1的值

 

实战 | 记一次PHP混淆后门的分析利用

是个数组。A97tIEJ的值从$_POST[‘mima123’];中获取

实战 | 记一次PHP混淆后门的分析利用

饶了一个大圈子其核心就是

实战 | 记一次PHP混淆后门的分析利用

实战 | 记一次PHP混淆后门的分析利用

这样就完成利用。

实战 | 记一次PHP混淆后门的分析利用

原创文章,作者:moonsec,如若转载,请注明出处:https://www.moonsec.com/6257.html

联系我们

400-800-8888

在线咨询:点击这里给我发消息

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息