网站被挂马后如何用后门检测工具定位 WebShell:完整排查流程 核心要点图解,挂马后先隔离再排查,避免边查边被二次写入。;WebShell多藏在可写目录与上传目录,按时间与权限筛最快。;单靠特征扫描会漏马,需结合日志溯源与文件比对。;清除后必须改密、补漏洞并复测,否则很快复发。
网站被挂马后如何用后门检测工具定位 WebShell:完整排查流程 · 核心要点一图读懂(AegisX)

核心要点(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、.tmpfind 是否带 -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 看是否有爆破成功记录,确认是上传漏洞、弱口令还是插件后门。

五、清除、复测与加固清单

  1. 备份样本与相关日志后再删除,保留溯源证据。
  2. 删除 WebShell,恢复被篡改文件,比对官方包校验核心代码。
  3. 修改后台、数据库、SSH 全部密码,清理可疑账号与 crontab。
  4. 修复入口漏洞:升级程序与插件,上传目录加 php_flag engine off 或 Nginx 禁止脚本执行。
  5. 复测 3 到 7 天:复查文件变更、日志异常请求与对外连接。

加固阶段建议把“文件完整性监控+恶意请求拦截”常态化。AegisX 可对 Web 目录异常变更、可疑上传与后门访问行为做持续检测和告警,让下一次挂马在落地阶段就被拦住,而不是等首页被改才发现。

行动建议:现在就按上文命令跑一遍时间筛选与危险函数扫描,把结果存档作为基线;同时关闭上传目录脚本执行权限。排查一次是应急,建立监控才是长期解法。

常见问题(FAQ)

网站被挂马了,第一步应该做什么?

先隔离再排查。立即备份当前站点与日志,把站点切到维护页或限制外网访问,防止攻击者继续写入;随后记录文件修改时间范围,再开始用后门检测工具扫描。顺序颠倒容易导致证据被覆盖、木马反复重生。

后门检测工具能百分百查出WebShell吗?

不能。特征扫描对已知木马效果好,但加密、混淆、内存马容易漏报。实战中应把工具扫描与find按时间筛选、grep危险函数、访问日志溯源结合使用,多路交叉验证才能降低漏检率。

没有专业工具,用Linux命令能查WebShell吗?

可以。用find按修改时间和权限筛出可疑php/jsp文件,用grep搜索eval、assert、base64_decode等危险函数组合,再人工核对文件头尾。命令排查成本低、见效快,适合应急第一轮粗筛。

查到WebShell后直接删除就完事了吗?

不够。删除前先备份样本与访问日志用于溯源,确认入侵入口(弱口令、上传漏洞、插件后门);清除后修改所有后台与数据库密码、升级程序、关闭上传目录执行权限,并复测一周,否则极易复发。

如何避免网站再次被挂马?

核心是收敛入口:上传目录禁止脚本执行,后台强制强密码与二次验证,程序与插件及时更新,Web目录权限最小化,并部署持续文件监控与WAF拦截。AegisX可对异常文件变更与可疑请求做持续检测告警,把事后排查变成事前拦截。