深信服华中天慧战队:记一次php混淆后门的分析利用
字数 1392 2025-08-12 11:34:50

PHP混淆后门分析与利用技术详解

一、背景介绍

本文档详细分析了一种经过多层混淆的PHP后门技术,该后门隐藏在网站源码中,通过复杂的编码和变量混淆来逃避检测。后门使用了多种技术手段,包括:

  • 十六进制编码的函数名
  • 全局变量函数别名
  • 多层嵌套的变量引用
  • 远程文件加载
  • 动态代码执行

二、后门发现与初步分析

2.1 后门定位

  1. 可疑文件位置:后门文件通常藏在非标准目录中,如images目录下的PHP文件
  2. 可疑函数调用:文件中调用了phpinfo()等敏感函数
  3. 代码混淆:代码经过明显混淆,无法直接阅读

2.2 初步检测

使用D盾等安全工具扫描可以检测出这类混淆后门,但需要进一步分析其工作原理。

三、混淆技术解析

3.1 十六进制编码

混淆代码中大量使用了十六进制编码的函数名和字符串:

$GLOBALS[pack(chr(72) . chr(42), "415F4141415F5F")] = pack(chr(72) . chr(42), "6670757473");
// 解码后相当于:$GLOBALS['A_AAA__'] = 'fputs'

解码方法

  1. 使用Burp Suite解码器选择ASCII hex方式
  2. 或使用PHP的pack函数解码
    • 66696C655F6765745F636F6E74656E7473file_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")]

解析过程

  1. E_CORE_ERROR是PHP常量,值为16
  2. 计算表达式:0 - 1072 + 67 * 16 = 0
  3. pack(chr(72) . chr(42), "70")解码为'p'
  4. 最终等价于$_GET['p']

四、后门触发机制

4.1 访问方式

通过GET参数触发后门功能:

?p=hj

其中hj686A的ASCII表示,作为触发条件。

4.2 远程文件加载

后门会从远程服务器加载恶意代码:

file_get_contents('Base64_self.png') // 实际是base64编码的PHP代码
file_put_contents('yjh.php', $maliciousCode) // 写入新的后门文件

五、核心利用链分析

5.1 多层变量引用

后门使用复杂的变量引用链来隐藏最终执行的代码:

  1. $A97vPEJ变量包含待执行的eval代码
  2. $A97vPEJ的值由$c拼接而来
  3. $c的值从$A97tIEK获取
  4. $A97tIEK$A97eF0获取
  5. $A97eF0是base64解码后的内容

5.2 动态代码执行

最终通过call_user_func_array执行解码操作:

call_user_func_array("base64_decode", $A97zA1)

其中$A97zA1是从$_POST['mima123']获取的数组。

六、防御措施

  1. 代码审计

    • 检查非标准目录中的PHP文件
    • 查找可疑的evalassertcreate_function等函数调用
    • 注意十六进制编码和base64编码的可疑字符串
  2. 服务器配置

    • 禁用危险函数:eval, assert, create_function, system
    • 限制文件操作权限
    • 启用PHP安全模式
  3. 监控措施

    • 监控异常的文件创建操作
    • 记录可疑的HTTP请求参数
    • 定期检查服务器文件完整性

七、总结

这种PHP后门通过多层混淆技术有效逃避了常规检测,核心特点包括:

  1. 使用十六进制编码隐藏函数名和关键字符串
  2. 利用PHP变量函数特性动态调用函数
  3. 通过复杂的三维数组访问隐藏实际参数
  4. 采用远程文件加载方式获取第二阶段恶意代码
  5. 使用多层变量引用链混淆代码执行流程

理解这些技术有助于安全研究人员更好地检测和防御此类后门攻击。

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