PHP后门清理不能仅靠删文件,需扫描可疑函数、核对修改时间、比对官方源码,并排查多站点路径、CMS漏洞、危险函数启用及定时任务等入口。

PHP后门不是靠“删文件”就能清干净的,尤其在多站点环境下,手动删一个 shell.php 或 1.php 只是表面动作——真正的风险藏在被篡改的合法文件里、隐藏的 base64 恶意代码中、甚至 WordPress 插件或主题的正常 PHP 文件内。
怎么确认某个 PHP 文件是不是后门
别只盯着文件名像 cmd.php、z.php 的文件。真实后门往往伪装成 wp-config.php 备份、cache.php、update.php,或者直接嵌进 functions.php 末尾。
- 用
grep -r "eval.*base64_decode\|system\|exec\|passthru\|shell_exec" /var/www/html/扫描可疑函数调用(注意:有些后门会拆开写,比如ev'.'al) - 检查文件修改时间是否异常:比如
stat -c "%y %n" /var/www/html/wp-content/themes/twentytwentyfour/functions.php看是否比主题发布时间新得多 - 对比原始程序包:下载官方 WordPress / Typecho / Discuz 包,用
diff -rq对比核心目录(但跳过wp-content这类本该可写的目录)
多站点下如何避免漏删、误删、反复感染
WordPress 多站点、宝塔面板下多个子域名共用一个 PHP 运行环境、或 Nginx 配置了多个 root 目录——这时候不能只查一个路径,也不能直接全盘 rm -rf。
- 先理清每个站点的实际物理路径:
grep -r "root " /www/server/panel/vhost/nginx/(宝塔)或nginx -T | grep -A1 "server_name"(手搭) - 逐个进入每个
root目录,运行扫描命令,**不要跨目录用通配符**(比如/var/www/*可能扫到日志、临时文件,误报率高) - 重点盯
wp-content/plugins/和wp-content/themes/下非官方来源的插件/主题——很多后门通过“免费破解插件”植入,且带自动更新机制,删完几天又回来
删完后为什么还会被重新写入 shell.php
删文件只是结果,没堵住入口,等于白干。常见原因不是“没删干净”,而是“还在被写入”。
立即学习“PHP免费学习笔记(深入)”;
- 检查是否有未修复的 CMS 漏洞:比如 WordPress
wp-json/rest接口被爆破上传、旧版 WooCommerce 的文件上传绕过 - 查看 Web 日志里高频出现的 200 POST 请求目标:
tail -n 500 /www/wwwlogs/xxx.log | grep "POST" | grep ".php" - 确认 PHP 配置是否禁用危险函数:
disable_functions = system,exec,passthru,shell_exec,proc_open,popen,curl_exec—— 如果没生效,删了也会被重写 - 检查 crontab 是否有异常定时任务:
crontab -l和cat /etc/crontab,有些后门会每小时自动拉取新 payload
最麻烦的不是找到后门,而是它藏在你信任的 functions.php 里,用 str_rot13 套一层再 eval;也不是多站点难清理,而是你删了 A 站,B 站的漏洞还在持续给 A 站写入。动手前,先停掉所有非必要写权限,再查日志、再比对、再删,顺序错了,清理就是循环劳动。











