首页/安全/应急响应速查/Web 日志投毒与异常字符识别

Web 日志投毒与异常字符识别

访问日志可被注入换行与控制字符(日志投毒),排查时关注不存在于正常流量的编码字符、超长请求与异常 CR 数量。

应急响应速查安全更新于 2026-10-13

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 查看,避免终端误渲染
行数突然跳变可能存在伪造行与采集平台对账确认
时间戳乱序注入伪造的时间逐行核对字段数与格式
确认投毒后要用可信副本重做统计:被污染的行会破坏按行解析,直接影响时间线还原与来源统计的准确性。
不要在原始日志上直接清洗:先完整备份,再在副本上处理,原始件保持只读。

易错点

  • 用 cat 原样查看:终端渲染控制字符会误导判断,应改用 grep -a
  • 直接在原日志上清洗:破坏原始证据,必须先备份再操作
  • 只看行数不看格式:注入行往往字段数不对,按字段数校验更敏感
  • 忽略采集平台副本:本机日志被污染不代表上游也是,两边对账能更快确认

数据来源与参考

  • OWASP Log Injection 说明
  • MITRE ATT&CK T1565.001 存储数据操纵

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌