网站被挂马后如何排查与恢复:nginx日志与webshell清马步骤 核心要点图解,挂马后先隔离网站,备份日志和文件,再分析nginx日志定位攻击入口。;使用find命令按时间筛选可疑文件,结合grep搜索webshell特征。;清除webshell后必须修复漏洞,否则可能再次被入侵。;恢复后检查网站完整性,并部署WAF等防护措施防止复发。
网站被挂马后如何排查与恢复:nginx日志与webshell清马步骤 · 核心要点一图读懂(AegisX)

核心要点(TL;DR)

  • 挂马后先隔离网站,备份日志和文件,再分析nginx日志定位攻击入口。
  • 使用find命令按时间筛选可疑文件,结合grep搜索webshell特征。
  • 清除webshell后必须修复漏洞,否则可能再次被入侵。
  • 恢复后检查网站完整性,并部署WAF等防护措施防止复发。

网站突然被搜索引擎标红、用户访问跳转到博彩页面,或者服务器CPU莫名飙升——这些都是网站被挂马的典型症状。作为运维或站长,面对这种紧急情况,你需要快速定位并清除恶意代码,恢复网站正常访问。本文基于实战经验,提供从nginx日志分析到webshell清理的完整步骤,帮你有条不紊地完成排查与恢复。

一、紧急隔离与证据保留

发现挂马后,第一要务是防止影响扩大,同时保留现场证据。

  • 隔离网站:将服务器从负载均衡中摘除,或修改nginx配置返回503,避免用户访问被感染的页面。
  • 备份日志:立即备份nginx访问日志和错误日志,这些是溯源的关键。命令:cp /var/log/nginx/access.log /tmp/access.log.bak
  • 备份网站文件:使用tar打包网站目录,注意不要遗漏隐藏文件。命令:tar -czf /tmp/site_backup.tar.gz /var/www/html
  • 记录异常现象:如被篡改的页面URL、跳转代码片段、异常进程等,便于后续分析。

注意:不要急于删除可疑文件,以免破坏攻击痕迹。

二、分析nginx日志定位攻击入口

nginx日志记录了所有请求,通过分析可以找到攻击者上传webshell或利用漏洞的痕迹。

1. 检查访问日志中的可疑请求

使用grep筛选常见攻击特征,例如:

grep -E "(eval|base64|shell|cmd|upload)" /var/log/nginx/access.log

重点关注POST请求到非常规路径(如/uploads/、/images/)且返回200的状态码。也可以统计访问频率异常的IP:

awk '{print }' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -20

2. 关联文件修改时间

找到可疑请求的时间点后,检查该时间前后被修改的文件:

find /var/www/html -type f -mtime -1 -ls

这能快速缩小范围,定位被上传的webshell。

3. 检查错误日志

错误日志可能包含攻击者尝试失败的信息,如文件包含错误、权限拒绝等:

grep -i "failed" /var/log/nginx/error.log

三、查找并清除webshell

webshell是攻击者留在服务器上的后门,必须彻底清除。

1. 使用find命令按时间筛选

结合入侵时间,查找最近修改的文件:

find /var/www/html -type f -mtime -7 -name "*.php" -exec ls -l {} \;

2. 搜索webshell特征代码

常见webshell包含eval、assert、base64_decode等函数,使用grep批量扫描:

grep -r --include=*.php -E "(eval|assert|base64_decode|system|passthru|shell_exec)" /var/www/html

注意:部分正常程序也可能使用这些函数,需结合文件路径和内容判断。

3. 检查隐藏文件和大文件

攻击者常将webshell命名为图片或隐藏文件,查找异常大或近期创建的文件:

find /var/www/html -type f -size +100k -mtime -30

4. 使用专业工具辅助

可下载开源工具如河马webshell查杀(注:此处不添加链接)进行扫描,但需从官方渠道获取。

5. 清除与验证

确认恶意文件后,将其移动到隔离目录而非直接删除,以便后续分析:

mkdir /tmp/quarantine && mv /path/to/shell.php /tmp/quarantine/

然后访问网站,确认恶意跳转是否消失。

四、修复漏洞与恢复网站

清除webshell只是治标,修复漏洞才能防止再次入侵。

  • 更新CMS和插件:确保使用最新版本,修复已知漏洞。
  • 检查文件上传功能:限制上传类型,重命名上传文件,并将上传目录设置为不可执行。在nginx中增加配置:
location ~* /uploads/.*\.(php|php5)$ { deny all; }
  • 修改所有密码:包括数据库、FTP、SSH和后台管理员密码。
  • 检查计划任务和启动项:攻击者可能留下定时任务:crontab -l 和 ls -la /etc/cron*。
  • 恢复网站文件:从备份中恢复被篡改的文件,或使用版本控制系统回滚。

五、加固与监控建议

恢复后需加强防护,避免重蹈覆辙。

  • 部署WAF:使用AegisX等WAF拦截恶意请求,提供虚拟补丁防护。
  • 设置文件完整性监控:使用工具如AIDE监控关键文件变化。
  • 定期备份:确保备份离线存储,并测试恢复流程。
  • 最小权限原则:Web目录权限设置为755,文件644,属主为运行用户。

六、检查清单

步骤操作命令/工具
1隔离网站修改nginx配置返回503
2备份日志和文件cp, tar
3分析访问日志grep, awk
4查找webshellfind, grep
5清除恶意文件mv到隔离目录
6修复漏洞更新、配置修改
7恢复文件从备份还原
8加固监控WAF、文件监控

行动建议:立即按照上述步骤排查,若技术能力有限,可寻求专业安全团队协助。平时做好备份和监控,才能临危不乱。

常见问题(FAQ)

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

立即隔离受感染的网站或服务器,防止恶意代码扩散或数据泄露。同时备份nginx访问日志和网站文件,为后续分析保留证据。不要急于删除文件,以免破坏现场。

如何通过nginx日志找到攻击入口?

重点分析访问日志中异常请求,如大量404、POST请求到非常规路径、包含可疑参数的URL。使用awk、grep等命令筛选高频IP和可疑User-Agent,结合时间点关联文件修改时间。

webshell通常藏在哪些目录?

常见于上传目录、缓存目录、图片目录及可写权限的文件夹。攻击者常将webshell伪装成图片或正常文件,需结合文件内容特征(如eval、base64_decode)进行扫描。

清除webshell后网站仍然有问题怎么办?

可能还存在其他后门或漏洞未修复。建议全面扫描系统文件,检查计划任务、启动项和数据库中的恶意代码,并修复导致入侵的漏洞(如文件上传漏洞、弱口令)。

如何预防网站再次被挂马?

定期更新CMS和插件,使用强密码,限制文件上传类型,部署WAF(如AegisX)拦截恶意请求,并设置文件完整性监控,及时发现异常改动。