深信服华中天慧战队:记一次php混淆后门的分析利用
字数 1392 2025-08-12 11:34:50
PHP混淆后门分析与利用技术详解
一、背景介绍
本文档详细分析了一种经过多层混淆的PHP后门技术,该后门隐藏在网站源码中,通过复杂的编码和变量混淆来逃避检测。后门使用了多种技术手段,包括:
- 十六进制编码的函数名
- 全局变量函数别名
- 多层嵌套的变量引用
- 远程文件加载
- 动态代码执行
二、后门发现与初步分析
2.1 后门定位
- 可疑文件位置:后门文件通常藏在非标准目录中,如
images目录下的PHP文件 - 可疑函数调用:文件中调用了
phpinfo()等敏感函数 - 代码混淆:代码经过明显混淆,无法直接阅读
2.2 初步检测
使用D盾等安全工具扫描可以检测出这类混淆后门,但需要进一步分析其工作原理。
三、混淆技术解析
3.1 十六进制编码
混淆代码中大量使用了十六进制编码的函数名和字符串:
$GLOBALS[pack(chr(72) . chr(42), "415F4141415F5F")] = pack(chr(72) . chr(42), "6670757473");
// 解码后相当于:$GLOBALS['A_AAA__'] = 'fputs'
解码方法:
- 使用Burp Suite解码器选择ASCII hex方式
- 或使用PHP的
pack函数解码66696C655F6765745F636F6E74656E7473→file_get_contents
3.2 变量函数技术
PHP允许将函数名赋值给变量,然后通过变量调用函数:
$b = 'base64_decode';
echo $b('...'); // 等同于base64_decode('...')
混淆代码中大量使用这种技术,将关键函数名存储在全局变量中。
3.3 复杂数组访问
混淆代码使用复杂的数组访问来隐藏实际功能:
$GLOBALS[A_A_AAA][(0 - 1072 + 67 * E_CORE_ERROR)][pack(chr(72) . chr(42), "70")]
解析过程:
E_CORE_ERROR是PHP常量,值为16- 计算表达式:
0 - 1072 + 67 * 16 = 0 pack(chr(72) . chr(42), "70")解码为'p'- 最终等价于
$_GET['p']
四、后门触发机制
4.1 访问方式
通过GET参数触发后门功能:
?p=hj
其中hj是686A的ASCII表示,作为触发条件。
4.2 远程文件加载
后门会从远程服务器加载恶意代码:
file_get_contents('Base64_self.png') // 实际是base64编码的PHP代码
file_put_contents('yjh.php', $maliciousCode) // 写入新的后门文件
五、核心利用链分析
5.1 多层变量引用
后门使用复杂的变量引用链来隐藏最终执行的代码:
$A97vPEJ变量包含待执行的eval代码$A97vPEJ的值由$c拼接而来$c的值从$A97tIEK获取$A97tIEK从$A97eF0获取$A97eF0是base64解码后的内容
5.2 动态代码执行
最终通过call_user_func_array执行解码操作:
call_user_func_array("base64_decode", $A97zA1)
其中$A97zA1是从$_POST['mima123']获取的数组。
六、防御措施
-
代码审计:
- 检查非标准目录中的PHP文件
- 查找可疑的
eval、assert、create_function等函数调用 - 注意十六进制编码和base64编码的可疑字符串
-
服务器配置:
- 禁用危险函数:
eval,assert,create_function,system等 - 限制文件操作权限
- 启用PHP安全模式
- 禁用危险函数:
-
监控措施:
- 监控异常的文件创建操作
- 记录可疑的HTTP请求参数
- 定期检查服务器文件完整性
七、总结
这种PHP后门通过多层混淆技术有效逃避了常规检测,核心特点包括:
- 使用十六进制编码隐藏函数名和关键字符串
- 利用PHP变量函数特性动态调用函数
- 通过复杂的三维数组访问隐藏实际参数
- 采用远程文件加载方式获取第二阶段恶意代码
- 使用多层变量引用链混淆代码执行流程
理解这些技术有助于安全研究人员更好地检测和防御此类后门攻击。