不一样的SRC挖洞思路: HTTP请求拆分漏洞实战
字数 1408 2025-08-19 12:40:55

HTTP请求拆分与走私漏洞实战教学文档

1. 漏洞概述

HTTP请求拆分(HTTP Request Splitting)和HTTP请求走私(HTTP Request Smuggling)是两种密切相关的Web安全漏洞,它们利用HTTP协议解析的差异性,通过精心构造的恶意请求来破坏请求处理流程。

1.1 核心概念

  • HTTP请求拆分:通过注入CRLF(回车换行)字符,将一个HTTP请求拆分成多个请求
  • HTTP请求走私:利用前后端服务器对HTTP请求解析的差异,将恶意请求"走私"到后端

1.2 国内现状

  • 普遍认为国内难以挖掘这类漏洞
  • 实际案例较少,主要来自国外
  • 作者证实国内存在这类漏洞,并已通过挖掘获得超过10万元赏金

2. 漏洞原理

2.1 CRLF注入

CRLF(回车换行,即\r\n)是HTTP协议中用于分隔头部和正文的标准分隔符。攻击者通过注入这些控制字符,可以:

  1. 提前结束当前请求
  2. 插入额外的请求头
  3. 创建全新的请求

2.2 请求处理流程差异

漏洞通常出现在多层代理架构中,当不同层级的服务器对请求的解析不一致时:

客户端 --> 反向代理1 --> 反向代理2 --> 后端服务器

2.3 案例中的架构分析

作者发现的案例架构如下:

client ----> 反向代理1 --CRLF--> 反向代理2 --Host--> (web server1 | web server2 | web server3 | ...)

关键特点:

  • 反向代理1和反向代理2之间支持HTTP流水线(pipeline)
  • 反向代理2根据Host头将请求路由到不同的后端服务器

3. 漏洞利用技术

3.1 基本利用方法

通过URL编码的CRLF字符构造恶意请求:

https://case.target.cn/%20HTTP/1.1%0d%0aHost:case.target.cn%0d%0a%0d%0aPOST%20/%3fid=%20HTTP/1.1%0d%0aHost:targ

解码后相当于:

GET / HTTP/1.1\r\n
Host: case.target.cn\r\n
\r\n
POST /?id= HTTP/1.1\r\n
Host: targ...

3.2 多层代理的利用

  1. 反向代理1将恶意请求转发给反向代理2
  2. 反向代理2将CRLF注入的请求解析为两个独立请求
  3. 第二个请求可能被路由到不同的后端服务器

3.3 响应处理特性

  • 反向代理1会将多个响应合并为一个返回给客户端
  • 这使得攻击者可以获取到原本无法直接访问的后端响应

4. 漏洞挖掘方法

4.1 测试流程

  1. 寻找CRLF注入点:测试所有用户可控的输入点
  2. 验证注入是否会影响请求解析
  3. 尝试构造能产生两个有效请求的payload
  4. 观察响应是否包含多个请求的结果

4.2 测试要点

  • 测试不同位置的可控输入:URL路径、参数、头部等
  • 尝试不同的编码方式:URL编码、Unicode编码等
  • 观察服务器对畸形请求的处理行为

5. 防御措施

5.1 开发层面

  1. 严格验证用户输入,过滤CRLF等特殊字符
  2. 使用标准库进行HTTP协议解析
  3. 禁用HTTP流水线(pipeline)支持

5.2 配置层面

  1. 统一所有代理服务器的HTTP解析配置
  2. 限制请求行和头部的最大长度
  3. 使用最新版本的代理软件

5.3 监控层面

  1. 监控异常的HTTP请求格式
  2. 记录并分析包含特殊字符的请求
  3. 设置针对连续CRLF的告警规则

6. 实战技巧

6.1 目标识别

  • 多层代理架构的系统风险更高
  • 使用不同技术栈的代理组合更容易出现解析差异
  • 支持HTTP/1.1流水线的系统更易受攻击

6.2 漏洞验证

  1. 先尝试简单的CRLF注入测试响应变化
  2. 逐步增加复杂的请求构造
  3. 使用时间延迟技术判断请求是否被拆分

6.3 利用扩展

  • 尝试绕过身份验证
  • 尝试访问内部API
  • 尝试缓存投毒(Web Cache Poisoning)

7. 总结

HTTP请求拆分和走私漏洞在国内确实存在,且危害严重。通过理解多层代理架构中的请求处理流程差异,安全研究人员可以有效地挖掘这类漏洞。防御方面需要开发、运维和安全团队的协同努力,从输入验证、协议解析到系统监控多个层面进行防护。

HTTP请求拆分与走私漏洞实战教学文档 1. 漏洞概述 HTTP请求拆分(HTTP Request Splitting)和HTTP请求走私(HTTP Request Smuggling)是两种密切相关的Web安全漏洞,它们利用HTTP协议解析的差异性,通过精心构造的恶意请求来破坏请求处理流程。 1.1 核心概念 HTTP请求拆分 :通过注入CRLF(回车换行)字符,将一个HTTP请求拆分成多个请求 HTTP请求走私 :利用前后端服务器对HTTP请求解析的差异,将恶意请求"走私"到后端 1.2 国内现状 普遍认为国内难以挖掘这类漏洞 实际案例较少,主要来自国外 作者证实国内存在这类漏洞,并已通过挖掘获得超过10万元赏金 2. 漏洞原理 2.1 CRLF注入 CRLF(回车换行,即 \r\n )是HTTP协议中用于分隔头部和正文的标准分隔符。攻击者通过注入这些控制字符,可以: 提前结束当前请求 插入额外的请求头 创建全新的请求 2.2 请求处理流程差异 漏洞通常出现在多层代理架构中,当不同层级的服务器对请求的解析不一致时: 2.3 案例中的架构分析 作者发现的案例架构如下: 关键特点: 反向代理1和反向代理2之间支持HTTP流水线(pipeline) 反向代理2根据Host头将请求路由到不同的后端服务器 3. 漏洞利用技术 3.1 基本利用方法 通过URL编码的CRLF字符构造恶意请求: 解码后相当于: 3.2 多层代理的利用 反向代理1将恶意请求转发给反向代理2 反向代理2将CRLF注入的请求解析为两个独立请求 第二个请求可能被路由到不同的后端服务器 3.3 响应处理特性 反向代理1会将多个响应合并为一个返回给客户端 这使得攻击者可以获取到原本无法直接访问的后端响应 4. 漏洞挖掘方法 4.1 测试流程 寻找CRLF注入点:测试所有用户可控的输入点 验证注入是否会影响请求解析 尝试构造能产生两个有效请求的payload 观察响应是否包含多个请求的结果 4.2 测试要点 测试不同位置的可控输入:URL路径、参数、头部等 尝试不同的编码方式:URL编码、Unicode编码等 观察服务器对畸形请求的处理行为 5. 防御措施 5.1 开发层面 严格验证用户输入,过滤CRLF等特殊字符 使用标准库进行HTTP协议解析 禁用HTTP流水线(pipeline)支持 5.2 配置层面 统一所有代理服务器的HTTP解析配置 限制请求行和头部的最大长度 使用最新版本的代理软件 5.3 监控层面 监控异常的HTTP请求格式 记录并分析包含特殊字符的请求 设置针对连续CRLF的告警规则 6. 实战技巧 6.1 目标识别 多层代理架构的系统风险更高 使用不同技术栈的代理组合更容易出现解析差异 支持HTTP/1.1流水线的系统更易受攻击 6.2 漏洞验证 先尝试简单的CRLF注入测试响应变化 逐步增加复杂的请求构造 使用时间延迟技术判断请求是否被拆分 6.3 利用扩展 尝试绕过身份验证 尝试访问内部API 尝试缓存投毒(Web Cache Poisoning) 7. 总结 HTTP请求拆分和走私漏洞在国内确实存在,且危害严重。通过理解多层代理架构中的请求处理流程差异,安全研究人员可以有效地挖掘这类漏洞。防御方面需要开发、运维和安全团队的协同努力,从输入验证、协议解析到系统监控多个层面进行防护。