首页/安全/渗透测试与安全评估速查/CRLF 注入检测(响应拆分)
常见漏洞验证121 条

CRLF 注入检测(响应拆分)

输入进入响应头(Location、Set-Cookie 名称等)且未过滤换行符时可能造成响应拆分;验证关注回车换行是否可注入响应头结构。

CRLF 注入是什么

CRLF 注入指的是用户输入里的回车换行没有被过滤,直接进入了响应头(Location、Set-Cookie 名称、自定义头取值)。换行符一旦进入头部,响应结构就可能被拆分,攻击者可以在响应中插入新的头部甚至响应体。验证要点是「结构变化」而不是「内容回显」:提交带换行编码的取值,对比原始响应与新响应的头部数量与内容差异即可。涉及共享缓存时,任何进一步验证都要先与客户确认窗口。

基本信息

常见入口跳转参数、Cookie 名称、自定义响应头取值、日志回显
信号响应头数量与内容异常、下游代理处理行为改变
编码形式百分号编码的换行、其他等价编码方式
原则只验证结构变化,不做缓存投毒
环境差异中间代理可能对换行做规范化,结果依链路而异

典型使用场景

  • Web 检查中的常规项,重点看跳转与重定向参数
  • Cookie 写入相关的参数核查
  • 排查「响应头异常增加」这类现象
  • 评估修复方案:是否在写入响应头前统一过滤控制字符
  • 与缓存类问题组合判断影响范围(需先约定验证窗口)

验证步骤

验证步骤
# 1. 找到进入响应头的输入,常见于跳转目标
curl -sI 'https://example.com/go?url=/home'          # 记录原始响应头基线
# 2. 提交含换行编码的取值,观察响应头是否被拆分
curl -sI 'https://example.com/go?url=/home%0d%0aX-Test:%20injected'
# 3. 对比响应头数量与内容差异,记录现象(脱敏)
# 4. 不针对共享缓存做进一步动作;需要验证时先与客户确认窗口

现象与判断

现象含义处置
响应头中新增了注入的头部换行未过滤,头部被注入列缺陷,建议过滤控制字符
返回 400 或请求被拒绝存在输入校验记录为已核查
响应体中出现异常内容可能影响到响应结构谨慎记录,避免扩大请求量
代理层规范化后无变化链路中有规范化处理说明验证位置与局限
若目标前面有 CDN 或共享缓存,任何进一步验证都要先与客户确认窗口:一旦标记被缓存,会影响真实用户。
结论要说明验证位置:从外网经代理访问与在内网直连服务的表现可能不同,同一输入在不同链路上结果不一样。

易错点

  • 只看请求端回显:CRLF 的问题是响应结构被改变,回显内容说明不了问题
  • 忽略代理层对换行的处理差异:不同链路结果不同,结论必须写明验证路径
  • 验证时影响共享缓存:标记可能被缓存并回放给其他用户,属于高风险副作用
  • 用生产用户可访问的跳转参数做大量尝试:请求量增长会触发告警与备用封禁

数据来源与参考

  • OWASP WSTG(HTTP Response Splitting)
  • CWE-113
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌