
核心要点(TL;DR)
- 挂马后先隔离再排查,避免边查边被二次写入。
- WebShell多藏在可写目录与上传目录,按时间与权限筛最快。
- 单靠特征扫描会漏马,需结合日志溯源与文件比对。
- 清除后必须改密、补漏洞并复测,否则很快复发。
凌晨收到告警:网站首页被插入博彩链接,搜索引擎已标记风险。多数运维的第一反应是删代码,但删完几小时又复发——因为真正的入口 WebShell 还藏在某个上传目录里。本文给出一套可照着执行的后门检测流程:从隔离现场、工具选型,到命令级排查、日志溯源、清除复测,帮你在最短时间内定位并清掉 WebShell,同时堵住二次入侵的口子。
一、先判断:这些症状说明站点已被植入WebShell
挂马不等于一定有 WebShell,但出现以下情况要按“已被入侵”处理:
- 首页或大量页面被插入外链、暗链,
index.php修改时间异常。 - 出现陌生文件名,如
a.php、1.asp、x.jsp,内容只有一行或高度混淆。 - 上传目录、缓存目录里出现可执行脚本。
- 服务器对外发起异常连接,CPU 或带宽在夜间飙升。
- 访问日志中出现大量 POST 到同一小文件、参数为长 Base64 串的请求。
确认症状后先隔离:备份站点与日志,将站点切维护页或限制外网访问,再开始排查。边查边被写入,是应急失败最常见的原因。
二、WebShell 常见藏匿手法:知道藏哪才查得快
| 藏匿方式 | 典型位置 | 排查要点 |
|---|---|---|
| 上传目录落地 | uploads、attachment、data | 目录内是否允许脚本执行 |
| 图片马/伪装后缀 | jpg、png、ico 文件 | 文件头是否含 <?php |
| 正常文件被追加 | 核心函数库、配置文件 | 文件尾部多出混淆代码 |
| 隐藏目录/点文件 | .cache、.tmp | find 是否带 -name ".*" |
| 计划任务与启动项 | crontab、systemd | 是否有回连下载脚本 |
多数 WebShell 落在可写目录,且修改时间集中在入侵窗口内。抓住“时间+权限+危险函数”三条线,粗筛效率最高。
三、工具选型:后门检测工具怎么搭配用
没有单一工具能通杀,实战建议分层:
- 快速粗筛:
find、grep按时间和危险函数筛文件,零依赖、见效快。 - 特征查杀:ClamAV 查已知木马,
clamscan -r --infected /var/www。 - 主机层面:rkhunter、chkrootkit 查 rootkit 与异常 SUID。
- 完整性比对:用发行版包管理器校验核心文件,
rpm -Va或debsums -c。 - 持续检测:部署文件变更监控与 WAF,把一次性排查变成常态告警。
工具扫描结果必须人工复核,加密马、内存马容易漏报,别把“扫描无结果”当成安全结论。
四、分步排查:从文件到日志锁定WebShell
步骤1:按时间筛出可疑文件
find /var/www -type f -mtime -7 \( -name "*.php" -o -name "*.jsp" -o -name "*.asp" \) -printf "%TY-%Tm-%Td %TH:%TM %p\n" | sort
把时间窗对齐到挂马前后,重点看上传目录与根目录下的小文件。
步骤2:搜危险函数组合
grep -rEn "eval\(|assert\(|base64_decode\(|system\(|passthru\(|shell_exec\(" /var/www --include="*.php" | head -50单个 eval 可能是正常业务,eval 与 base64_decode、$_POST 同时出现才高度可疑。
步骤3:查伪装文件与隐藏目录
find /var/www -type f -name "*.jpg" -exec grep -l "<?php" {} \;
find /var/www -name ".*" -type d -maxdepth 3步骤4:看权限与属主异常
find /var/www -type f -perm -o+w -ls | head ps aux | grep -E "www-data|apache|nginx"
Web 进程不应有写脚本目录的权限,也不应拉起 shell 子进程。
步骤5:日志溯源确认入口
grep -E "POST .*\.php" /var/log/nginx/access.log | awk '{print ,}' | sort | uniq -c | sort -rn | head定位高频 POST 的小文件与来源 IP,结合 auth.log 看是否有爆破成功记录,确认是上传漏洞、弱口令还是插件后门。
五、清除、复测与加固清单
- 备份样本与相关日志后再删除,保留溯源证据。
- 删除 WebShell,恢复被篡改文件,比对官方包校验核心代码。
- 修改后台、数据库、SSH 全部密码,清理可疑账号与 crontab。
- 修复入口漏洞:升级程序与插件,上传目录加
php_flag engine off或 Nginx 禁止脚本执行。 - 复测 3 到 7 天:复查文件变更、日志异常请求与对外连接。
加固阶段建议把“文件完整性监控+恶意请求拦截”常态化。AegisX 可对 Web 目录异常变更、可疑上传与后门访问行为做持续检测和告警,让下一次挂马在落地阶段就被拦住,而不是等首页被改才发现。
行动建议:现在就按上文命令跑一遍时间筛选与危险函数扫描,把结果存档作为基线;同时关闭上传目录脚本执行权限。排查一次是应急,建立监控才是长期解法。
常见问题(FAQ)
网站被挂马了,第一步应该做什么?
先隔离再排查。立即备份当前站点与日志,把站点切到维护页或限制外网访问,防止攻击者继续写入;随后记录文件修改时间范围,再开始用后门检测工具扫描。顺序颠倒容易导致证据被覆盖、木马反复重生。
后门检测工具能百分百查出WebShell吗?
不能。特征扫描对已知木马效果好,但加密、混淆、内存马容易漏报。实战中应把工具扫描与find按时间筛选、grep危险函数、访问日志溯源结合使用,多路交叉验证才能降低漏检率。
没有专业工具,用Linux命令能查WebShell吗?
可以。用find按修改时间和权限筛出可疑php/jsp文件,用grep搜索eval、assert、base64_decode等危险函数组合,再人工核对文件头尾。命令排查成本低、见效快,适合应急第一轮粗筛。
查到WebShell后直接删除就完事了吗?
不够。删除前先备份样本与访问日志用于溯源,确认入侵入口(弱口令、上传漏洞、插件后门);清除后修改所有后台与数据库密码、升级程序、关闭上传目录执行权限,并复测一周,否则极易复发。
如何避免网站再次被挂马?
核心是收敛入口:上传目录禁止脚本执行,后台强制强密码与二次验证,程序与插件及时更新,Web目录权限最小化,并部署持续文件监控与WAF拦截。AegisX可对异常文件变更与可疑请求做持续检测告警,把事后排查变成事前拦截。