php后门不能仅靠删文件清除,需重点排查eval/assert/system等危险函数调用、异常文件名及修改时间,检查.htaccess规则,并重建环境而非简单清理。

PHP后门不是靠“删文件”就能解决的,尤其压缩包解压后植入的后门,往往藏在合法文件里、混淆命名、或伪装成缓存/日志/上传目录中的临时文件——直接 rm -rf 会误删业务代码,不查清楚反而留坑。
怎么看哪些 PHP 文件可能是后门
后门核心特征是「非业务逻辑但能执行任意代码」,重点盯三类行为:
-
eval(、assert(、system(、exec(、shell_exec(、passthru(、base64_decode(套用在用户输入(如$_GET、$_POST、$_REQUEST)之后 - 文件名异常:比如
1.php、x.php、cache_2024.php、wp-config-backup.php(尤其不在标准框架路径下) - 修改时间明显晚于其他文件,且与部署/更新时间对不上(用
ls -la --time=modify查)
快速筛查命令示例(在网站根目录运行):
find . -name "*.php" -type f -size -200k | xargs grep -l "eval\|assert\|system\|shell_exec\|base64_decode.*\$_" 2>/dev/null
注意:base64_decode 单独出现未必是后门,但和 $_ 变量拼接使用(如 base64_decode($_POST['x']))基本可判为恶意。
立即学习“PHP免费学习笔记(深入)”;
压缩包解压后门的典型藏匿位置
攻击者常利用 CMS 或框架默认允许上传/解压的入口(如 WordPress 插件上传、后台模板导入、自定义安装脚本),把后门塞进看似合理的路径:
- 解压到
wp-content/uploads/下的子目录(如uploads/2024/05/shell.php) - 覆盖或新增
index.php、wp-config.php同级的隐藏文件(如.index.php、index.php.bak) - 写入
cache/、tmp/、logs/等目录,起名模仿系统生成文件(如cache_7f3a.php) - 利用 .htaccess + PHP 脚本实现「无扩展名后门」(如
./admin?cmd=whoami实际由.htaccess规则转发到某个 PHP 文件)
别只盯着 *.php —— 检查 .htaccess 是否有可疑 RewriteRule 或 AddType application/x-httpd-php .xxx。
删除后门不能只靠手动 rm
删错一个文件可能让站点崩溃;更危险的是删了后门文件,但数据库里还存着触发后门的配置(比如 WordPress 的 wp_options 表里被注入了恶意 active_plugins 或 theme_mods_ 字段):
- 先停掉 Web 服务(
systemctl stop apache2或systemctl stop php-fpm),避免边查边被调用 - 导出并检查数据库中高危字段:
SELECT option_name, option_value FROM wp_options WHERE option_name LIKE '%theme_mods%' OR option_name = 'active_plugins' LIMIT 10; - 用
diff对比当前代码与原始 CMS 版本(如 WordPress 官方 tar.gz 解压后的文件树),找出多出来的或被篡改的 PHP 文件 - 确认是后门后再删,删完立刻
chown -R www-data:www-data .并chmod -R 644 *.php && chmod 755 */(防止新文件被设为 777)
为什么解压后门特别难清干净
因为压缩包本身不带元数据,解压后所有文件时间戳都变成当前时间,攻击者还会在后门里加「自我复活」逻辑(比如定时从远程拉取新版本、监听某个 API 接口触发重写文件)。最稳妥的方式不是「清理」,而是「重建」:
- 备份数据库(仅数据,不含 wp_options 中可疑项)
- 彻底删除整个网站目录
- 重新下载官方源码(校验 SHA256)、重装、再导入清洗过的数据库
- 禁用所有非必要插件/主题,关闭文件上传与远程解压功能(如 WordPress 的
DISALLOW_FILE_EDIT和DISALLOW_FILE_MODS)
压缩包解压类后门的隐蔽点在于:它不依赖漏洞利用,只依赖运维疏忽——只要允许用户上传 zip 并自动解压,就等于给攻击者开了个白名单通道。这点比任何 PHP 函数过滤都关键。











