Web安全学院
Web安全学院
  • 首页
  • 译序
  • 学习路线
  • 前篇
    • Web应用程序安全测试
    • 动态应用程序安全测试(DAST)
    • 带外应用程序安全测试(OAST)
  • 服务器端主题
    • SQL注入
      • SQL注入
      • SQL注入UNION攻击
      • 在SQL注入攻击中检索数据库
      • SQL盲注
      • SQL注入速查表
    • 认证
      • 认证漏洞
      • 基于密码登录中的漏洞
      • 多因素认证中的漏洞
      • 其他认证机制中的漏洞
      • 如何保护你的认证机制
    • 目录遍历
      • 目录遍历
    • 命令注入
      • OS命令注入
    • 业务逻辑漏洞
      • 业务逻辑漏洞
      • 业务逻辑漏洞示例
    • 信息泄露
      • 信息泄露漏洞
      • 如何发现并利用信息泄露漏洞
    • 访问控制
      • 访问控制漏洞与权限提升
      • 不安全的直接对象引用(IDOR)
      • 访问控制安全模型
    • 文件上传漏洞
      • 文件上传漏洞
    • 条件竞争
      • 条件竞争
    • 服务器端请求伪造(SSRF)
      • 服务器端请求伪造(SSRF)
      • 盲SSRF漏洞
    • XXE注入
      • XML外部实体(XXE)注入
      • XML实体
      • 发现并利用盲XXE漏洞
  • 客户端主题
    • 跨站脚本(XSS)
      • 跨站脚本
      • 反射型XSS
      • 存储型XSS
      • 基于DOM的XSS
      • XSS上下文
        • 跨站脚本上下文
        • 客户端模版注入
      • 利用跨站脚本漏洞
      • 内容安全策略
      • 悬空标记注入
      • 如何防范XSS漏洞
      • 跨站脚本(XSS)速查表
    • 跨站请求伪造(CSRF)
      • 跨站请求伪造(CSRF)
      • XSS与CSRF
      • 绕过CSRF令牌验证
      • 绕过SameSite Cookie限制
      • 绕过基于Referer的CSRF防御
      • 如何防范CSRF漏洞
    • 跨域资源共享(CORS)
      • 跨域资源共享(CORS)
      • 同源策略(SOP)
      • CORS和Access-Control-Allow-Origin响应标头
    • 点击劫持
      • 点击劫持(UI伪装)
    • 基于DOM的漏洞
      • 基于DOM的漏洞
      • 控制Web消息源
      • 基于DOM的开放重定向
      • 基于DOM的Cookie操纵
      • 基于DOM的JavaScript注入
      • 基于DOM的document-domain操纵
      • 基于DOM的WebSocket URL投毒
      • 基于DOM的链接操纵
      • Web消息操纵
      • 基于DOM的Ajax请求标头操纵
      • 基于DOM的本地文件路径操纵
      • 基于DOM的客户端SQL注入
      • 基于DOM的HTML5 Storage操纵
      • 基于DOM的客户端XPath注入
      • 基于DOM的客户端JSON注入
      • DOM-data操纵
      • 基于DOM的拒绝服务
      • DOM破坏
    • WebSocket
      • 测试WebSocket安全漏洞
      • 什么是WebSocket?
      • 跨站WebSocket劫持
  • 进阶主题
    • 不安全的反序列化
      • 不安全的反序列化
      • 利用不安全的反序列化漏洞
    • 测试GraphQL API
      • 测试GraphQL API
      • 什么是GraphQL?
    • 服务器端模板注入
      • 服务器端模板注入
      • 利用服务器端模板注入漏洞
    • Web缓存投毒
      • Web缓存投毒
      • 缓存设计缺陷的利用
      • 缓存实现缺陷的利用
    • HTTP Host标头攻击
      • HTTP Host标头攻击
      • 如何识别和利用HTTP Host头的漏洞
      • 密码重置投毒
    • HTTP请求走私
      • HTTP请求走私
      • 查找HTTP请求走私漏洞
      • 利用HTTP请求走私漏洞
      • 高级请求走私
        • 高级请求走私
        • HTTP/2降级
        • 响应队列投毒
        • HTTP/2专属载体
        • HTTP请求隧道
      • 浏览器驱动的请求伪造
        • 浏览器驱动的请求伪造
        • CL.0请求走私
        • 客户端异步攻击
        • 基于暂停的异步攻击
    • OAuth认证
      • OAuth 2.0认证漏洞
      • OAuth授权类型
      • OpenID Connect
      • 如何防范OAuth认证漏洞
    • JWT攻击
      • JWT攻击
      • 在Burp Suite中使用JWT
      • 算法混淆攻击
    • 原型污染
      • 什么是原型污染?
      • JavaScript原型和继承
      • 客户端
        • 客户端原型污染漏洞
        • 通过浏览器API进行原型污染
      • 服务器端
        • 服务器端原型污染
      • 预防原型污染漏洞
    • 基本技能
      • 基本技能
      • 使用编码混淆攻击
      • 在手动测试中使用Burp Scanner
Powered by GitBook
On this page
  • 测试CL.0漏洞
  • 引发CL.0行为
  • 利用CL.0漏洞
  • H2.0漏洞
  • 如何防止CL.0漏洞
  1. 进阶主题
  2. HTTP请求走私
  3. 浏览器驱动的请求伪造

CL.0请求走私

Previous浏览器驱动的请求伪造Next客户端异步攻击

Last updated 1 year ago

请求走私漏洞是由于链式系统确定每个请求的开始和结束位置的方式存在差异而产生的。通常是由于标头解析的不一致,导致一个服务器使用请求的Content-Length,而另一个服务器将消息视为分块。然而,我们可以在不依赖这些问题的情况下进行许多相同的攻击。

在某些情况下,服务器可以被说服忽略Content-Length标头,这意味着它们假设每个请求都在标头结束时结束。实际上这与将Content-Length视为0的效果是一样的。

如果后端服务器表现出这种行为,但前端仍然使用Content-Length标头来确定请求的结束位置,那么你就可能可以利用这种差异进行HTTP请求走私。我们决定将其称之为“CL.0”漏洞。

PortSwigger Research

本节中的材料和实验基于PortSwigger Research的《》。

测试CL.0漏洞

要探测CL.0漏洞,首先发送一个在其正文中包含另一个部分请求的请求,然后再发送一个正常的后续请求。之后你可以检查后续请求的响应是否受到了走私前缀的影响。

在下面的例子中,对主页的后续请求收到了404响应。这强烈表明后端服务器将POST请求的正文(GET /hopefully404...)解释为另一个请求的开始。

POST /vulnerable-endpoint HTTP/1.1 Host: vulnerable-website.com Connection: keep-alive Content-Type: application/x-www-form-urlencoded Content-Length: 34 GET /hopefully404 HTTP/1.1 Foo: xGET / HTTP/1.1 Host: vulnerable-website.com

HTTP/1.1 200 OK HTTP/1.1 404 Not Found

关键的是,请注意我们没有以任何方式篡改标头,请求的长度由完全正常、准确的Content-Length标头指定。

要使用Burp Repeater自己尝试这个:

  1. 创建一个包含设置请求的选项卡和一个包含任意后续请求的选项卡。

  2. 按正确的顺序将这两个选项卡添加到一个组中。

  3. 使用Send按钮旁边的下拉菜单,将发送模式更改为Send group in sequence (single connection)。

  4. 将Connection标头更改为keep-alive。

  5. 发送序列并检查响应。

在实际环境中,我们观察到的这种行为大多发生在不期望POST请求的端点上,因此它们隐式地假设没有请求有正文。触发服务器级别重定向的端点和请求静态文件的端点是首要的候选者。

引发CL.0行为

如果找不到任何看起来易受攻击的端点,你可以尝试引发这种行为。

当一个请求的标头触发一个服务器错误时,一些服务器会发出错误响应,但不会消耗套接字上的请求体。如果它们在此之后没有关闭连接,这可以提供一个替代的CL.0异步载体。

利用CL.0漏洞

你可以利用CL.0漏洞进行我们在之前的请求走私材料中介绍的服务器端请求走私攻击。可以使用以下实验自己尝试。

LAB

H2.0漏洞

如果后端服务器忽略降级请求的Content-Length标头,则将HTTP/2请求降级为HTTP/1的网站可能容易受到类似“H2.0”问题的攻击。

如何防止CL.0漏洞

接下来做什么?

你可以在这一部分学到的基础上,进行一些请求走私攻击的客户端版本。要了解如何做到这一点,请查看客户端异步攻击实验。

你还可以尝试使用带有混淆的Content-Length标头的GET请求。如果你能够隐藏这个标头使得后端服务器看不到,但前端服务器能够看到,这也有可能导致异步。在之前介绍TE.TE请求走私时,我们研究了一些。

关于你可以采取的一些高级措施,以防止CL.0漏洞和其他形式的异步攻击,请参阅。

浏览器驱动的异步攻击:HTTP请求走私的新前沿
标头混淆技术
CL.0请求走私
如何防止HTTP请求走私漏洞