网站被入侵之后溯源,分析访问日志找攻击入口
网站被入侵后,最直接的溯源线索通常藏在 Web 服务器的访问日志里。
攻击者上传 webshell、利用漏洞或暴力破解,都会在 access.log 中留下请求记录。
本文面向零基础站长,讲清楚如何备份日志、筛选可疑请求、识别攻击特征,最终定位入口并封堵。
先别急着重装,把日志和现场保留下来
发现网站被篡改或挂马后,第一反应往往是重装系统,但这会破坏溯源证据。
正确做法是先隔离,再取证。
- 立即断开服务器外网访问,或通过防火墙只允许你的 IP 连接 SSH。
- 备份 Web 访问日志、错误日志、系统日志到本地或安全存储。
- 记录当前时间点,后续所有分析都围绕入侵发生前后这段时间展开。
以宝塔面板为例,Nginx 日志默认在 /www/wwwlogs/ 目录下,按站点名区分,例如 example.com.log。
如果使用原生 Nginx,通常在 /var/log/nginx/access.log。
用 scp 或宝塔文件管理下载到本地:
scp root@你的服务器IP:/www/wwwlogs/example.com.log ./backup_access.log
备份完成后,再开始分析,避免后续操作覆盖日志。
从访问日志里筛出可疑请求
攻击者留下的痕迹通常有规律:异常状态码、奇怪的用户代理、高频访问、可疑参数。
我们按优先级逐步过滤。
第一步:查看高频 IP 和请求路径
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -20
这条命令统计访问量最高的前 20 个 IP。
如果某个 IP 在短时间内请求上千次,很可能是扫描器或暴力破解。
第二步:筛选 POST 请求和异常状态码
Webshell 上传、登录爆破通常使用 POST。
查看返回 200 或 500 的 POST 请求:
awk '$6 ~ /POST/ && $9 ~ /200|500/ {print}' access.log | head -50
第三步:搜索常见攻击路径
攻击者常探测 /admin、/wp-login.php、/phpmyadmin、/.env、/shell.php 等。
用 grep 快速定位:
grep -Ei 'admin|wp-login|phpmyadmin|\.env|shell|eval|base64' access.log | head -50
如果日志量很大,可以按时间范围截取。
比如入侵发生在 2025-03-20 14:00 前后,先用 sed 或 grep 缩小范围:
grep '20/Mar/2025:14:' access.log > suspect.log
然后只分析 suspect.log,效率更高。
识别几种典型的入侵特征
不同攻击方式在日志中表现不同,掌握几个常见模式能帮你快速判断。
- 暴力破解:同一 IP 对登录接口高频 POST,状态码 200 和 302 交替出现,User-Agent 可能是
python-requests或空。 - 文件上传漏洞:POST 请求路径包含
upload、file、import,返回 200 后紧接着访问一个陌生.php文件。 - SQL 注入:URL 参数中出现
union select、sleep(、benchmark(、单引号闭合等特征。 - 已知 CMS 漏洞:请求路径匹配特定插件或版本漏洞,例如
/wp-content/plugins/xxx/readme.txt探测版本。
找到可疑请求后,重点看它返回的状态码和响应大小。
如果返回 200 且响应体较大,可能已经成功执行。
再结合时间点,去服务器上查找对应时间生成的文件:
find /www/wwwroot/example.com -type f -newermt '2025-03-20 13:50' ! -newermt '2025-03-20 14:10'
这条命令列出入侵时间窗口内被修改或新增的文件,重点关注 .php、.jsp、.asp 等可执行文件。
定位入口后怎么封堵和加固
找到攻击入口只是第一步,不封堵的话很快会被再次入侵。
- 修复漏洞:如果是 CMS 插件漏洞,立即升级到最新版;如果是上传接口,增加文件类型白名单和内容检测。
- 删除后门:根据前面
find的结果,逐一检查可疑文件,确认是 webshell 后删除,并对比官方源码校验完整性。 - 封禁攻击 IP:在防火墙或宝塔面板的 IP 黑名单中添加攻击源 IP。如果是动态 IP,可封禁整个 C 段,但要谨慎避免误伤。
- 修改所有密码:包括服务器 SSH、数据库、网站后台、FTP,全部换成强密码。
- 开启日志监控:配置日志轮转和告警,对高频 404、异常 POST 进行监控,便于下次及时发现。
如果使用宝塔面板,可以在「安全」页面查看 SSH 登录日志,在「网站」->「日志」中直接搜索访问记录,比命令行更直观。
几个容易踩坑的地方
- 不要只删木马不修漏洞:攻击者往往留了多个后门,只删一个很快会被重新上传。
- 日志被清空怎么办:有些攻击者会删除日志。如果发现日志缺失,检查系统日志
/var/log/secure、/var/log/auth.log,或从备份中恢复。 - 别忽略错误日志:
error.log中可能记录 PHP 报错、文件包含失败等信息,能辅助判断攻击是否成功。 - 溯源不是万能的:如果服务器被提权,攻击者可能清除痕迹,此时建议重装系统并做好安全基线配置。
分析访问日志找攻击入口,核心思路是:保留现场、缩小时间范围、筛选异常请求、结合文件修改时间交叉验证。
对零基础用户来说,先用 grep 和 awk 做粗筛,再人工复核,基本能定位大部分常见入侵。
处理完入口后,务必修复漏洞并加强监控,避免二次入侵。
如果你正在处理网站被入侵的问题,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。