php后门清理需先定位、再验证、最后清理,不能仅靠删文件;ssh只是操作通道,关键在登录后的命令与判断逻辑。

PHP后门不能靠“删文件”就完事,得先定位、再验证、最后清理;SSH连接本身不负责清后门,它只是你操作的通道——真正关键的是你登录后执行的命令和判断逻辑。
怎么快速识别可疑 PHP 后门文件
后门常伪装成正常文件(比如 wp-config.php.bak、cache.php、1.php),或藏在日志、上传目录、模板目录里。别只盯着名字,重点看内容和行为:
- 用
find扫描近期修改且权限异常的 PHP 文件:find /var/www -name "*.php" -mtime -7 -type f -ls - 用
grep检查常见后门特征函数:grep -r "eval\|assert\|base64_decode\|system\|passthru\|exec\|shell_exec" /var/www --include="*.php" - 注意隐藏文件和点开头的目录(如
.git、.env旁可能有.shell.php) - Web 访问日志里反复出现的非常规 PHP 路径(如
/uploads/2023/12/xxx.php)要人工确认是否合法
发现后门后别急着 rm -f
直接删可能误伤业务文件,也可能漏掉持久化机制。先做三件事:
- 用
ls -la看文件属主和权限——后门常属www-data或nobody,但创建时间远早于其他同目录文件 - 用
cat或head -n 20查看开头几十行,典型一句话后门第一行往往是<?php @eval($_POST['x']);?>或混淆过的base64_decode调用 - 临时重命名(如
mv shell.php shell.php.off),观察网站是否报错或功能异常——如果没影响,基本可判为后门 - 检查该文件是否被其他脚本 include/require 过(用
grep -r "shell\.php" /var/www)
清完 PHP 文件还要查 SSH 层面的隐蔽入口
攻击者可能不止放 PHP 后门,还会加 SSH 密钥、新建用户、改 authorized_keys 或植入 ~/.bashrc 自启动项:
立即学习“PHP免费学习笔记(深入)”;
- 检查所有用户的 SSH 公钥:
grep -r "ssh-rsa\|ssh-ed25519" /home/*/\.ssh/authorized_keys 2>/dev/null - 列出非系统用户:
awk -F: '$3 >= 1000 && $3 != 65534 {print $1}' /etc/passwd,逐个查其~/.bash_history和~/.profile - 检查定时任务:
crontab -l(当前用户)、ls /etc/cron.d/、cat /var/spool/cron/crontabs/* 2>/dev/null - 确认有没有异常进程监听非标端口:
netstat -tulnp | grep ":3333\|:8888\|:9999"(这些是后门常用端口)
为什么有些后门删了又回来
因为没找到源头——可能是 CMS 插件漏洞未修复、弱密码被爆破、或服务器上跑着带远程命令执行(RCE)的旧版服务(如 ThinkPHP 5.0.23、Drupal 7.58)。删完后必须:
- 升级所有 Web 应用及组件到官方最新稳定版
- 禁用不必要的 PHP 函数(在
php.ini中设disable_functions = exec,passthru,shell_exec,system,proc_open,popen,pcntl_exec) - 把网站根目录权限收紧:
chown -R root:www-data /var/www+chmod -R 755 /var/www,上传目录单独设www-data:www-data且禁止执行 - 别用密码登录 SSH,改用密钥 +
sshd_config中设PermitRootLogin no和AllowUsers
最麻烦的不是删文件,而是你不知道攻击者有没有留下内核模块、LD_PRELOAD 注入、或利用 systemd 用户服务自启——这种已超出 PHP 后门范畴,需要更底层的排查意识。











