Web日志分析实战

约 8 分钟读完

Web日志分析实战

概述

Web日志是应急响应和安全分析中最重要的数据源之一。每一次HTTP请求都会在日志中留下记录,包括请求时间、来源IP、请求方法、URL路径、状态码、User-Agent等关键信息。通过对Web日志的深入分析,可以还原攻击者的入侵路径、识别攻击手法、评估影响范围,并为后续的防护加固提供依据。

在Web攻击场景中,无论是SQL注入、XSS跨站脚本、WebShell上传还是目录遍历,攻击者的所有操作都会在Web日志中留下痕迹。熟练掌握Web日志分析技术,能够帮助蓝队人员从海量日志中快速定位恶意请求,是应急响应必备的核心技能。

Apache和Nginx作为最主流的Web服务器,其日志格式虽然有差异,但核心字段基本一致。本文将重点介绍这两种Web服务器的日志格式、分析方法和常见攻击特征的识别技巧。

核心概念

Web日志格式详解

Apache 默认的 Combined Log Format 格式为:%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"。各字段含义依次为:客户端IP、远程用户名(通常为空)、认证用户名、请求时间、请求行、响应状态码、响应字节数、Referer头和User-Agent头。

Nginx 默认日志格式在 log_format 指令中配置,典型配置包含 remote_addr(客户端IP)、remote_user、time_local、request(请求行)、status(状态码)、body_bytes_sent(响应大小)、http_referer 和 http_user_agent。

自定义日志格式可以添加更多有用的字段,如请求处理时间(用于性能分析)、X-Forwarded-For(获取真实客户端IP)、Cookie信息和请求体内容(用于POST请求分析)。

常用命令行分析工具

基础统计命令:awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -20 统计访问量前20的IP地址;awk '{print $7}' access.log | sort | uniq -c | sort -rn | head -20 统计访问量前20的URL;awk '$9 >= 400' access.log | wc -l 统计4xx/5xx错误请求数量。

时间维度分析:grep "05/Jul/2026" access.log | wc -l 统计某天的请求量;使用 awk 提取小时字段可以生成请求量的时序分布图,发现异常流量峰值。

高级分析技巧:使用 grep -E 配合正则表达式匹配特定模式;使用 awk 的条件过滤功能筛选特定状态码、特定URL或特定IP的请求;结合 sortuniq 进行去重统计;使用 sed 进行日志格式转换和字段提取。

对于大规模日志,推荐使用 GoAccess 进行实时分析和可视化,或使用 ELK Stack(Elasticsearch + Logstash + Kibana)进行集中化的日志管理和分析。

SQL注入攻击特征识别

SQL注入的典型日志特征:URL参数中包含SQL关键字(如 UNION、SELECT、INSERT、DROP、WHERE、OR 1=1 等),使用 grep -iE "union|select|insert|drop|update|delete|where|or 1|and 1|concat|char|benchmark|sleep\(|waitfor" access.log 进行匹配。

常见的SQL注入绕过特征:使用大小写混写(如 SeLeCt)、使用URL编码(如 %27 代表单引号 '%2e 代表点号)、使用注释符绕过(如 /**/--#)、使用双重编码、使用 HAVING、GROUP BY 等较少见的SQL子句。

分析时需要结合响应状态码:如果某个IP的SQL注入尝试返回了 200 状态码且响应体大小异常,可能意味着注入成功。同时关注是否存在多阶段注入行为——攻击者通常先进行探测(如单引号测试),再进行数据提取。

WebShell上传与访问特征

WebShell上传特征:POST 请求到上传接口、请求体中包含可执行代码片段(如 <?php eval<% Runtime)、上传文件的扩展名为可执行类型(.php、.jsp、.asp、.aspx)、上传请求的响应状态为成功(200)。

WebShell访问特征:对某个非业务文件的频繁POST请求、URL路径中包含可疑的目录名(如 upload、temp、images 等非脚本目录中的脚本文件)、请求参数中包含 base64 编码的字符串、User-Agent 为 Python-urllib、curl 等非浏览器客户端。

进一步分析:对于疑似WebShell的文件,可以通过响应内容的大小和返回时间来判断——正常的WebShell通常返回较小的响应内容且响应时间较短。大量对同一文件的不同参数POST请求高度可疑。

目录遍历与敏感文件访问

目录遍历特征:URL中包含 ../..%2f%2e%2e/ 等目录遍历序列,尝试访问 /etc/passwd/proc/self/environweb.config.env 等敏感文件。

敏感文件扫描特征:短时间内大量404响应(扫描器在探测存在的路径)、请求 robots.txt 中禁止的路径、尝试访问常见备份文件(如 www.zipbackup.tar.gzdatabase.sql)、访问管理后台路径(如 /admin/phpmyadmin/wp-admin)。

可以使用统计分析方法发现扫描行为:某个IP在短时间内产生大量404响应、按URL路径排序发现大量相似的探测请求模式。

实战要点

  • 建立分析检查清单:制定标准化的日志分析检查清单,涵盖IP访问统计、URL访问统计、状态码分布、异常请求模式匹配、时间段分析等维度,确保分析的全面性和一致性。
  • 关注POST请求:在Web攻击中,大量恶意操作通过POST请求进行(如SQL注入POST型、WebShell通信),但默认的日志分析往往更关注GET请求的URL。建议将POST请求的请求体纳入日志记录和分析范围。
  • 结合多源日志关联分析:Web日志应与系统日志、数据库日志、防火墙日志等进行关联分析。例如发现WebShell访问后,进一步查看数据库日志确认是否有异常的数据库操作。
  • 利用基线发现异常:建立Web应用的正常访问基线(正常URL、正常访问时段、正常User-Agent),通过与基线对比可以更精准地发现异常行为,减少误报。
  • 自动化分析脚本化:将常用的日志分析命令和规则编写为Shell脚本或Python脚本,实现一键式日志分析,提高应急响应效率。可以结合ELK等平台实现自动告警。

总结

Web日志分析是蓝队应急响应中不可或缺的技能。通过熟练掌握日志格式、命令行分析工具和常见攻击特征,安全人员可以从海量日志中快速定位恶意活动。在实际工作中,建议建立标准化的分析流程,结合自动化工具提高效率,并持续更新攻击特征库以应对不断演变的攻击手法。

← Windows应急响应排查手册 Scapy网络包构造与嗅探 →