php后门不能仅靠删文件清除,常藏于合法文件、混淆代码或数据库等非文件路径;识别需结合危险函数调用、参数来源、文件时间、路径异常、权限及硬编码敏感信息等行为特征。

PHP后门不是靠“删文件”就能解决的,它往往藏在合法文件里、混淆代码中,或通过数据库、缓存、扩展等非文件路径持久化。单纯按文件名删,大概率漏掉、误删,甚至触发反制逻辑。
怎么确认一个PHP文件是不是后门
不能只看文件名,得看行为和上下文:
-
eval(、assert(、base64_decode(、gzinflate(、str_rot13(这类函数调用,尤其参数来自$_GET、$_POST、$_REQUEST或$_COOKIE,高度可疑 - 文件创建/修改时间明显晚于项目上线时间,且无对应 Git 提交记录
- 文件位于非标准路径(如
/wp-content/plugins/xxx/下却叫cache.php),或权限异常(如 777 但无人维护) - 文件内容里有硬编码的密码、远程 URL、加密密钥,或包含
shell_exec(、system(、passthru(等执行函数
常见伪装文件名及识别逻辑
攻击者爱用“看起来无害”的名字降低排查优先级,但命名有规律可循:
-
cache.php、update.php、temp.php:利用 CMS 或框架常见临时目录名,实际无对应业务逻辑 -
wp-config-backup.php、config.old.php:伪造备份名,常出现在根目录或/wp-admin/下,但真实配置文件不会以 PHP 后缀暴露 -
index2.php、main.php、core.php:模仿框架入口或核心模块,但文件体积极小( -
.htaccess.bak+.htaccess.php组合:前者用于绕过解析限制,后者才是执行体,注意检查 Web 服务器是否允许.php在隐藏目录下执行
删除后门的实操要点
删只是第一步,不清理入口和权限,几小时内就会复现:
立即学习“PHP免费学习笔记(深入)”;
- 先停掉 Web 服务或切到维护模式,防止后门被调用时写入新文件或外连
- 用
find /var/www -name "*.php" -type f -mtime -7找出近期新增的 PHP 文件,重点审计 - 用
grep -r "eval\|assert\|base64_decode\|gzinflate" /var/www --include="*.php"扫描可疑函数调用(注意转义括号) - 检查
php.ini中disable_functions是否被绕过(比如用了mail()+ LD_PRELOAD),并确认allow_url_include=Off - 删除后必须查日志:
access.log里高频访问的异常路径、error.log中的Undefined variable类警告(可能是后门解密失败残留)
为什么删完还会回来
多数情况不是删得不够狠,而是没堵住源头:
- WebShell 已获取数据库权限,通过
wp_options表的theme_mods_*字段注入 PHP 代码,每次主题加载就执行 - 攻击者上传了恶意 WordPress 插件 ZIP,后台“自动更新”功能被劫持,每次更新都重装后门
- 服务器存在未修复的漏洞(如旧版 phpMyAdmin、WordPress
- 后门写进了 PHP 扩展(
.so文件)或 Apache 模块,重启服务才生效,普通文件扫描完全看不到
最麻烦的不是找到后门,而是它改过多少配置、有没有留下定时任务、是否同步到了备份服务器——这些没法靠 grep 解决,得结合进程、网络连接、计划任务三方面交叉验证。











