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

admin 2022年7月23日10:32:32评论29 views字数 1961阅读6分32秒阅读模式

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


实战 | 记一次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混淆后门的分析利用


推荐阅读:


实战 | 记一次对iphone手机游戏的渗透测试


实战 | 记一次HOST头中毒导致的密码重置漏洞挖掘


实战 | 记一次1000美金的TikTok盲打XSS的漏洞挖掘


实战 | WAF-Bypass之SQL注入绕过思路总结


干货 | Certutil在渗透中的利用和详解


点赞,转发,在看


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

原文始发于微信公众号(HACK学习呀):实战 | 记一次PHP混淆后门的分析利用

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年7月23日10:32:32
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   实战 | 记一次PHP混淆后门的分析利用http://cn-sec.com/archives/1194782.html

发表评论

匿名网友 填写信息