服务器WebShell排查:5个步骤发现隐藏后门

服务器WebShell排查:5个步骤发现隐藏后门

你清除了网站的木马文件,改了所有密码,觉得安全了。一周后,木马又回来了。你开始怀疑:是不是后门没清干净?很多入侵事件中,攻击者不会只留一个后门。他们会在不同的角落藏好几个备用后门,等你清理掉一个,还有另一个在暗中运行。

今天讲5个步骤,帮你系统排查WebShell。


WebShell是什么

WebShell是以PHP、JSP、ASP等脚本文件形式存在的命令执行环境,黑客通过Web访问它,就能控制你的服务器。通常放在正常的Web目录里,伪装成普通文件。


第一步:找特征文件

黑客喜欢把WebShell藏在容易忽略的地方,比如临时目录(/tmp)、图片上传目录,或使用混淆文件名(如system.phpshell.php1.jpg.php

目标:找出创建时间、修改时间、所有者与正常文件明显不符的异常文件。WebShell通常由Web进程创建,文件所有者往往是www-dataapache,而非管理员

bash

# 最近7天被修改的PHP文件
find /var/www/html -name "*.php" -mtime -7 -type f

# 检查包含可疑函数的文件
grep -r --include="*.php" -E "(eval|base64_decode|assert|system|exec|passthru|shell_exec|gzinflate)" /var/www/html

注意WebShell可能使用多层编码隐藏自身,如base64_decode嵌套gzinflate,或使用str_rot13绕过简单匹配


第二步:查看异常文件权限与所有者

WebShell通常通过Web服务漏洞上传,文件所有者和Web进程用户一致(如www-dataapache。检查/uploads//images/等本应只有图片的目录,是否存在PHP、JSP等可执行脚本。

bash

# 检查上传目录中的可执行文件
find /var/www/html/uploads -name "*.php" -type f

# 检查没有正常扩展名但被执行的文件
find /var/www/html -type f -name "*.php.ppp" -o -name "*.php.*"

有时攻击者会把.ppp配置为可执行扩展,*.php.*的文件也可能被解析


第三步:从Web访问日志排查

如果已确定木马存在的时间点,查对应时段的Web日志:

bash

grep "2026-06-20" /var/log/nginx/access.log | grep -E "\.php|\.jsp"

重点特征:

  • 访问时间与木马文件创建时间接近
  • User-Agent为Python-urllibWget等非浏览器工具
  • URL中包含cmd=cat /etc/hosts等系统命令痕迹

如果文件在日志中出现的时间段内没有任何正常业务访问,而WebShell被反复调用,几乎可以确定是后门。


第四步:检查定时任务和后门持久化

清理掉WebShell后,如果没过几天又出现,通常是因为有定时任务在自动下载。黑客常用crontab添加定时任务,定期从远程服务器拉取木马。

bash

cat -A /var/spool/cron/crontabs/root

crontab -l有时看不到隐藏内容,用cat -A能显示不可见字符,发现被隐藏的恶意定时任务。还要检查/etc/cron.d//etc/cron.hourly/等目录。

另一种持久化方式:修改.bashrc/etc/profile,每次用户登录时自动执行恶意脚本

bash

cat /root/.bashrc | grep -E "(curl|wget|python|perl)"

如果发现不明外联请求,用netstat -anpt查看活跃连接,结合微步在线等威胁情报平台查询可疑IP是否被标记为C2或矿池地址


第五步:检查隐藏进程和目录挂载

黑客可能通过目录挂载隐藏进程,用常规pstop看不到

bash

cat /proc/$$/mountinfo | grep -E "(tmp|\.k|\.s)"

如果发现恶意进程,先解除挂载umount /proc/可疑PID,再杀掉进程、删除文件

同时检查/tmp/var/tmp/dev/shm等临时目录,攻击者经常把木马文件放在这里:

bash

ls -la /tmp/
ls -la /var/tmp/

真实案例

一个WordPress网站被上传了WebShell,清理后第二天又出现。排查发现/var/spool/cron/crontabs/root里有一条定时任务,每5分钟从某IP下载shell.php并重命名为system.php。删除定时任务和恶意文件,升级所有插件,再也没复发


最后一句

排查WebShell的逻辑很简单:找出不认识的、不该有的、不该被执行的东西。关键是把5个步骤串起来。如果你已经掌握了文件查找、日志分析和进程检查的方法,下次再看到system.php时,就不会慌张了。那只是一个文件,而你正在准备彻底清除它。

知识库

服务器常用端口速查表:22、80、443、3306……分别是干什么的?

2026-6-18 16:05:14

知识库

宝塔面板常见问题与故障排查

2026-6-22 16:18:51

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧