HTTP请求走私攻击详解
字数 779 2025-11-07 12:34:03

HTTP请求走私攻击详解

描述
HTTP请求走私攻击是一种利用HTTP协议解析差异的安全漏洞,攻击者通过构造特殊的HTTP请求,使前端服务器(如反向代理、负载均衡器)和后端服务器对请求边界产生不同理解,导致请求被误解析。这种攻击可导致缓存投毒、会话劫持、绕过安全限制等严重后果。

前置知识

  1. HTTP/1.1支持持久连接(Keep-Alive),多个请求可通过同一TCP连接发送
  2. 请求边界通过Content-Length(CL)和Transfer-Encoding(TE)头部界定
  3. 当前端与后端服务器对协议解析不一致时,会产生请求走私

攻击原理分步解析

第一步:理解边界界定机制

  • Content-Length机制:明确指定消息体字节数
    POST /test HTTP/1.1
    Content-Length: 13
    \r\n
    hello world!
    
  • Transfer-Encoding: chunked分块编码:
    POST /test HTTP/1.1
    Transfer-Encoding: chunked
    \r\n
    5\r\n
    hello\r\n
    6\r\n
    world!\r\n
    0\r\n
    

第二步:识别解析差异点
关键漏洞点:服务器对CL和TE头部处理优先级不同

  • 案例1:前端使用CL,后端使用TE
  • 案例2:前端使用TE,后端使用CL
  • 案例3:两者都存在时的优先级冲突

第三步:CL-TE攻击(前端认CL,后端认TE)
攻击请求构造:

POST / HTTP/1.1
Host: example.com
Content-Length: 6
Transfer-Encoding: chunked
\r\n
0\r\n        # 后端认为这是结束标记
\r\n
G          # 前端认为这是下一个请求的开始

结果:字符"G"会被前端当作新请求的起始字符

第四步:TE-CL攻击(前端认TE,后端认CL)
攻击请求构造:

POST / HTTP/1.1
Host: example.com
Content-Length: 3
Transfer-Encoding: chunked
\r\n
8\r\n        # 前端解析分块长度
SMUGGLED\r\n # 前端认为这是第一个消息体
0\r\n        # 前端认为请求结束
\r\n

后端因优先处理CL,只读取3字节("8\r\n"),剩余内容会被附加到下一个请求

第五步:防御方案

  1. 禁用连接重用:对敏感请求使用Connection: close
  2. 使用HTTP/2:彻底消除协议歧义问题
  3. 服务器配置:确保前后端使用相同解析逻辑
  4. 前端服务器:规范化有歧义的请求后再转发
  5. 后端服务器:拒绝包含CL和TE双重头部的请求

检测方法

  • 时间延迟技术:通过响应时间差异检测请求队列
  • 差异反射:利用走私内容影响后续请求的响应

此攻击的危害程度取决于具体应用场景,但可能造成严重的安全绕过问题。

HTTP请求走私攻击详解 描述 HTTP请求走私攻击是一种利用HTTP协议解析差异的安全漏洞,攻击者通过构造特殊的HTTP请求,使前端服务器(如反向代理、负载均衡器)和后端服务器对请求边界产生不同理解,导致请求被误解析。这种攻击可导致缓存投毒、会话劫持、绕过安全限制等严重后果。 前置知识 HTTP/1.1支持持久连接(Keep-Alive),多个请求可通过同一TCP连接发送 请求边界通过Content-Length(CL)和Transfer-Encoding(TE)头部界定 当前端与后端服务器对协议解析不一致时,会产生请求走私 攻击原理分步解析 第一步:理解边界界定机制 Content-Length机制:明确指定消息体字节数 Transfer-Encoding: chunked分块编码: 第二步:识别解析差异点 关键漏洞点:服务器对CL和TE头部处理优先级不同 案例1:前端使用CL,后端使用TE 案例2:前端使用TE,后端使用CL 案例3:两者都存在时的优先级冲突 第三步:CL-TE攻击(前端认CL,后端认TE) 攻击请求构造: 结果:字符"G"会被前端当作新请求的起始字符 第四步:TE-CL攻击(前端认TE,后端认CL) 攻击请求构造: 后端因优先处理CL,只读取3字节("8\r\n"),剩余内容会被附加到下一个请求 第五步:防御方案 禁用连接重用:对敏感请求使用Connection: close 使用HTTP/2:彻底消除协议歧义问题 服务器配置:确保前后端使用相同解析逻辑 前端服务器:规范化有歧义的请求后再转发 后端服务器:拒绝包含CL和TE双重头部的请求 检测方法 时间延迟技术:通过响应时间差异检测请求队列 差异反射:利用走私内容影响后续请求的响应 此攻击的危害程度取决于具体应用场景,但可能造成严重的安全绕过问题。