欢迎光临
我们一直在努力

HTTP走私漏洞详解与防御

HTTP请求走私是一种利用前端服务器(如反向代理、负载均衡器、CDN)与后端服务器对HTTP请求解析不一致,从而将恶意请求“走私”到正常请求流中的攻击技术。其核心危害在于绕过安全控制、劫持用户会话、访问未授权API、进行Web缓存投毒等。

漏洞成因与分类

漏洞的根本原因是前端和后端服务器对Content-Length (CL) 和 Transfer-Encoding (TE) 这两个HTTP请求头处理方式不同,导致对请求体结束位置的判断出现分歧。主要分为以下四类:

攻击类型前端服务器解析依据后端服务器解析依据关键特征
CL.TE Content-Length Transfer-Encoding 前端根据CL确定请求体长度,后端期待TE分块编码。
TE.CL Transfer-Encoding Content-Length 前端处理分块请求,后端根据CL读取请求体。
TE.TE Transfer-Encoding(处理特定值) Transfer-Encoding(处理不同值) 前后端均声明支持TE,但对TE头的值(如chunked、xchunked)或格式(如空格、大小写)的解析存在差异。
CL.CL 第一个Content-Length头 第二个Content-Length头 请求中包含两个具有不同值的CL头,前后端选择了不同的值进行解析。

攻击示例与利用

以最常见的CL.TE型攻击为例,攻击者构造一个包含冲突头部的请求,使前端认为的请求结束位置与后端不同,从而将后续请求的一部分“走私”为当前请求的一部分。

POST /vulnerable-endpoint HTTP/1.1
Host: target.com
Content-Length: 13
Transfer-Encoding: chunked

0

SMUGGLED

  • 前端视角:看到Content-Length: 13,认为请求体是 0\\r \\r SMUGGLED(共13字节),并将整个请求转发给后端。
  • 后端视角:看到Transfer-Encoding: chunked,按分块编码解析。0\\r \\r表示一个长度为0的块,即请求体在此结束。而后面的SMUGGLED会被视为下一个请求的开始。

当攻击者连续发送两个这样的请求时,SMUGGLED就可能被后端当作第二个独立请求(如GET请求)的一部分执行,实现请求走私。

检测方法

  • 时间延迟检测:发送一个可能造成走私的请求,如果服务器处理异常(如等待超时),则可能存在漏洞。
  • 响应差异检测:发送两个请求,观察第二个请求的响应是否受到第一个请求中“走私”内容的影响。
  • 工具自动化:使用Burp Suite的 HTTP Request Smuggler 插件或 h2cSmuggler(针对HTTP/2)等工具进行高效扫描。
  • 防御措施

    • 统一解析:确保前端和后端服务器使用相同品牌、版本的HTTP解析器,并配置一致。
    • 禁用歧义头:在前端代理处规范化请求,例如始终优先使用Transfer-Encoding,或完全禁用分块编码。
    • 升级协议:使用HTTP/2,因其具有严格的分帧机制,能从根本上消除请求走私的解析歧义。同时需注意防范HTTP/2降级攻击。
    • 纵深防御:在后端应用层实施额外的安全校验,不依赖前端代理传递的请求边界信息。

    参考来源

    • HTTP请求走私实战 | 从零解析PortSwigger靶场漏洞(CL.TE篇)
    • CDN与负载均衡器混用埋雷?解密HTTP请求走私的4种攻击场景及防御方案
    • 终极 h2cSmuggler 教程:如何利用 HTTP/2 走私攻击绕过安全防护 [特殊字符]
    • 2025年渗透测试面试题总结-240(题目+回答)
    • HTTP请求走私漏洞原理与利用手段分析

     

    赞(0)
    未经允许不得转载:171主机测评 » HTTP走私漏洞详解与防御
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址