Web 日志投毒是什么
Web 访问日志可以被注入换行与控制字符:请求 URL 里带上 %0a、%0d,写入日志后就伪造出额外的日志行,污染统计、误导审计结论,甚至打穿解析脚本。排查时关注异常编码字符、超长请求行与裸控制字符的数量。
基本信息
| 投毒形态 | URL 中 %0a、%0d 换行注入伪造日志行 |
|---|---|
| 检测点 | 异常转义序列、超长请求行、裸控制字符 |
| 影响 | 污染日志分析、误导审计,可能打穿解析器 |
| 处置方式 | 先保存原始副本,再评估日志链完整性 |
| 相关攻击 | 伪造日志掩盖真实来源与时间 |
| 适用平台 | nginx、Apache、IIS 等访问日志都可能受影响 |
典型使用场景
- 排查日志统计结果异常的原因
- 审计前确认日志是否可以被信任
- 排查「日志里出现不认识的行」的现象
- 事件处置时评估日志链是否完整
- 加固巡检:确认日志格式与解析脚本能抗注入
- 与上游采集平台对比行数差异
- 演练中练习日志投毒的识别方法
查找可疑编码与超长请求
查找可疑编码与超长请求
grep -aE '%0[ad]|%27|%3Cscript' /var/log/nginx/access.log | head -n 20 # 找编码注入
awk 'length($0) > 2000 {print NR": "length($0)}' /var/log/nginx/access.log | head # 超长请求行
tr -cd '\r' < /var/log/nginx/access.log | wc -c # 统计控制字符数量
cp -a /var/log/nginx/access.log /evidence/access.log.bak # 先备份原件
wc -l /var/log/nginx/access.log; ls -la /var/log/nginx/access.log # 行数与体积现象与处置
| 现象 | 含义 | 处置 |
|---|---|---|
| URL 含 %0a、%0d | 换行注入尝试 | 提取来源地址与时间,纳入封禁评估 |
| 请求行超长 | 填充或注入载体 | 结合请求体大小判断是否为攻击 |
| 裸控制字符 | 文件含 CR 等字符 | 用 grep -a 查看,避免终端误渲染 |
| 行数突然跳变 | 可能存在伪造行 | 与采集平台对账确认 |
| 时间戳乱序 | 注入伪造的时间 | 逐行核对字段数与格式 |
确认投毒后要用可信副本重做统计:被污染的行会破坏按行解析,直接影响时间线还原与来源统计的准确性。
不要在原始日志上直接清洗:先完整备份,再在副本上处理,原始件保持只读。