
核心要点(TL;DR)
- 定位webshell优先查最近修改文件与异常进程网络连接。
- 清除后门需彻底删除恶意文件并修复漏洞,否则会复发。
- 使用find命令按时间排序可快速缩小可疑文件范围。
- 排查后必须检查计划任务、启动项和SSH密钥等持久化后门。
痛点引入:网站反复被挂马,问题出在哪?
网站频繁被挂马,页面被插入恶意代码、跳转赌博网站,不仅影响用户体验,更导致搜索引擎降权、业务受损。许多运维人员仅删除表面恶意代码,但攻击者留下的webshell后门未清除,漏洞未修复,导致反复中招。本文提供一套从webshell定位到后门清除的完整实战流程,帮助你彻底解决挂马问题。
第一步:快速定位webshell文件
webshell是攻击者用于远程控制的脚本文件,通常隐藏在网站目录中。定位webshell是清除的第一步。
1. 按时间排查最近修改的文件
攻击者上传webshell后,文件修改时间会更新。使用find命令查找最近7天内修改的php文件:
find /var/www/html -type f -mtime -7 -name "*.php" -ls重点关注上传目录、缓存目录等可写权限较高的位置。
2. 搜索危险函数特征
webshell常使用eval、assert、base64_decode等函数。使用grep递归搜索:
grep -r --include=*.php -l -E "eval\(|assert\(|base64_decode\(|shell_exec\(" /var/www/html注意:正常业务代码也可能使用这些函数,需结合文件内容判断。
3. 检查访问日志中的可疑请求
分析Web访问日志,查找异常POST请求或访问不常见文件:
grep "POST" /var/log/nginx/access.log | awk '{print }' | sort | uniq -c | sort -nr | head -20关注访问次数异常多的动态页面,可能是webshell连接点。
4. 使用专业查杀工具
推荐使用D盾_Web查杀、河马webshell查杀、ClamAV等工具辅助扫描,提高效率。
第二步:分析入侵痕迹与后门
找到webshell后,需进一步分析攻击者留下的其他后门和入侵途径。
1. 检查异常进程与网络连接
使用netstat或ss查看是否有可疑外连:
netstat -antp | grep ESTABLISHED结合ps aux查看进程命令行,发现异常进程立即kill并删除文件。
2. 检查计划任务
攻击者常通过crontab留下定时后门:
crontab -l cat /etc/crontab ls /etc/cron.*删除未知的计划任务。
3. 检查启动项与SSH后门
查看/etc/rc.local、/etc/init.d/下的异常脚本,以及~/.ssh/authorized_keys是否被添加公钥。
4. 检查隐藏账号
查看/etc/passwd中是否有UID为0的非root账号,或使用命令:
awk -F: '==0 {print }' /etc/passwd第三步:彻底清除后门与修复漏洞
清除阶段需彻底删除恶意文件,并修复导致入侵的漏洞。
1. 删除webshell及恶意文件
确认文件为恶意后,直接删除。建议先备份样本用于分析。
2. 修复漏洞
根据日志分析入侵途径,常见漏洞包括:文件上传漏洞、SQL注入、弱口令、CMS漏洞。及时更新补丁,修改默认密码,限制上传目录执行权限。
3. 重置所有密码
包括服务器SSH密码、数据库密码、网站后台密码,防止攻击者利用已窃取凭证再次入侵。
4. 清除恶意代码
检查网站源码是否被插入恶意代码,可使用diff对比备份文件,或使用grep搜索<iframe>、document.write等特征。
第四步:加固与监控,防止复发
清除后需加强安全防护,避免再次被入侵。
1. 文件权限最小化
Web目录权限设置为755,文件644,上传目录禁止执行PHP:
chmod -R 755 /var/www/html find /var/www/html/uploads -type f -exec chmod 644 {} \; 并在Nginx配置中禁止上传目录解析PHP。
2. 部署WAF
使用AegisX WAF可实时拦截webshell上传、SQL注入等攻击,并提供虚拟补丁防护已知漏洞。
3. 定期扫描与监控
设置定时任务定期使用查杀工具扫描,并监控文件完整性,发现异常修改及时告警。
行动建议
立即按照上述步骤排查你的服务器:首先使用find和grep定位webshell,然后检查计划任务和网络连接清除后门,最后修复漏洞并加固权限。建议将本文加入收藏,作为安全事件应急手册。
常见问题(FAQ)
网站被挂马后,如何快速找到webshell文件?
首先通过find命令查找最近修改的文件,如:find /var/www -type f -mtime -7 -name '*.php'。同时检查访问日志中可疑的POST请求,结合grep搜索eval、base64_decode等危险函数。使用专业工具如D盾、河马webshell查杀可提高效率。
清除webshell后网站又出现挂马,是什么原因?
通常是因为后门未彻底清除或漏洞未修复。攻击者可能留下多个webshell、计划任务或隐藏账号。需全面检查系统进程、网络连接、启动项和定时任务,并修复导致入侵的漏洞(如文件上传漏洞、弱口令等)。
如何检查服务器是否留有后门?
检查异常进程和网络连接(netstat -antp),查看计划任务(crontab -l)、启动项(/etc/rc.local)、SSH授权文件(~/.ssh/authorized_keys),并搜索近期修改的系统文件。使用rkhunter、chkrootkit等工具辅助检测。
网站被挂马后需要重装系统吗?
取决于入侵程度。如果攻击者仅通过漏洞上传webshell,彻底清除并修复漏洞即可;如果获得root权限并植入rootkit,建议备份数据后重装系统,以确保安全。
如何预防网站再次被挂马?
定期更新CMS和插件,使用最小权限原则运行Web服务,部署WAF拦截恶意请求,定期扫描webshell,并监控文件完整性。同时,对上传目录进行严格限制,禁止执行脚本。