某不知名博客 某不知名博客
首页
  • 《vulcat文档》
  • Web安全

    • 《BurpSuite及官方实验室》
    • 《OSWE学习历程》
  • 云原生安全

    • 《Docker命令大全》
    • 《CKS考试学习指南》
    • 《旧-Kubernetes教程》
漏洞库
  • 《渗透工具大全》
  • 《云安全》
事件库
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Carsaid

安全界的小学生
首页
  • 《vulcat文档》
  • Web安全

    • 《BurpSuite及官方实验室》
    • 《OSWE学习历程》
  • 云原生安全

    • 《Docker命令大全》
    • 《CKS考试学习指南》
    • 《旧-Kubernetes教程》
漏洞库
  • 《渗透工具大全》
  • 《云安全》
事件库
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 前言

  • 服务器端主题(翻译)

  • 客户端主题(翻译)

  • 高级主题(翻译)

  • 扩展阅读(翻译)

  • 个人学习笔记

    • 说明
    • 笔记-服务端主题

    • 笔记-客户端主题

    • 笔记-高级主题

      • 不安全的反序列化笔记
      • GraphQL API漏洞笔记
      • 服务端模板注入笔记
      • Web缓存投毒笔记
        • Web缓存基本知识
          • 1、Web缓存的工作原理
          • 2、缓存键是什么?
        • Web缓存投毒基本知识
          • 1、Web缓存投毒是什么?
          • 2、Web缓存投毒涉及哪两个阶段?
          • 3、Web缓存投毒攻击的危害?
          • 4、构造Web缓存投毒攻击的三个步骤?
          • 5、为什么要识别和评估无键(unkeyed)的输入?
          • 6、如何快速识别无键的输入?
        • 利用Web缓存投毒 - 缓存设计缺陷
          • 1、缓存设计缺陷是什么?
          • 2、缓存设计缺陷的攻击手段
        • 利用Web缓存投毒 - 缓存实现缺陷
          • 1、缓存实现缺陷是什么?
          • 2、缓存设计缺陷 和 缓存实现缺陷 之间的区别?
          • 3、缓存实现缺陷(缓存键缺陷)的原理?
          • 4、缓存实现缺陷中的缓存探测方法?
          • 5、缓存实现缺陷的攻击手段
        • 如何防范Web缓存投毒漏洞
      • HTTP主机头攻击笔记
      • HTTP请求走私笔记
      • OAuth身份验证漏洞笔记
      • JWT攻击笔记
      • 原型链污染笔记
  • 实验室做题记录

  • BurpSuite及官方实验室
  • 个人学习笔记
  • 笔记-高级主题
carsaid
2023-12-20
目录

Web缓存投毒笔记

个人总结

参考:https://portswigger.net/web-security/web-cache-poisoning

- name: 个人总结
  desc: 参考:https://portswigger.net/web-security/web-cache-poisoning
  bgColor: '#F0DFB1'
  textColor: 'green'
1
2
3
4

# Web缓存投毒笔记

# 1Web缓存基本知识

# 1、Web缓存的工作原理

答案

缓存位于服务器和用户之间,它保存(也称缓存)对特定请求的响应,这通常会被缓存在一段固定的时间点。

如果另一个用户随后发送了一个等效请求,则缓存直接向用户提供缓存响应的副本,而无需与后端进行任何交互。

这减少了服务器必须处理的重复请求数,极大地减轻了服务器的负载。

# 2、缓存键是什么?

答案
  • 当缓存收到一个 HTTP 请求时,它首先必须确定,是否有一个可以直接提供的缓存响应,或者是否必须转发该请求 以供后端服务器处理。
  • 缓存通过比较请求组件的预定义子集(统称为 “缓存键”)来识别等效请求。通常,这将包含请求行和Host标头。
  • 如果某个请求的缓存键 未被包含在缓存当中,则称为 “无键”(unkeyed)。
  • 如果传入请求的 缓存键 与前一个请求的键匹配,则缓存会认为它们是等效的。因此,它将提供为原始请求生成的缓存响应副本。这适用于 具有匹配缓存键 的所有后续请求,直到缓存的响应过期。
  • 当匹配到缓存键之后,缓存会完全忽略请求的其他组成部分。

# 2Web缓存投毒基本知识

# 1、Web缓存投毒是什么?

答案

攻击者可以借助 Web 服务器和缓存的行为,向其他用户提供有害的 HTTP 响应。

# 2、Web缓存投毒涉及哪两个阶段?

答案
  1. 从后端服务器引出一个 包含某种危险有效载荷 的响应。
  2. 成功引出响应之后,需要确保这些响应已经被缓存,并在随后的过程中提供给预期的受害者。

# 3、Web缓存投毒攻击的危害?

答案

Web 缓存投毒的影响,在很大程度上取决于两个关键因素:

  • 攻击者究竟可以成功缓存什么。由于缓存投毒更像是一种分发攻击的手段,而不是一种独立的攻击,因此 Web 缓存投毒的影响与所注入的载荷危害程度密不可分。与大多数类型的攻击一样,Web 缓存投毒也可以与其他攻击结合使用,以进一步升级潜在的影响。
  • 受影响网页的流量。在缓存投毒时,被投毒的响应 仅提供给 访问了受影响页面的用户。因此,影响范围飘忽不定,具体取决于这个页面的受欢迎程度。例如,如果攻击者设法毒害了一个 主要网站 的首页缓存响应,则该攻击可能会自动影响数千名用户,而无需攻击者进行任何后续交互。

# 4、构造Web缓存投毒攻击的三个步骤?

答案
  1. 识别和评估无键(unkeyed)的输入。
  2. 从后端服务器引出有害响应。一旦你发现了一个无键的输入,下一步就是评估网站是如何处理它的。了解这一点对于 成功地引发有害响应 至关重要。如果一个输入没有经过适当的清理,就反馈在来自服务器的响应中,或者被用来动态生成其他数据,那么这就是 Web 缓存投毒的潜在入口点。
  3. 获取缓存的响应。“是否缓存响应” 可能取决于各种因素,例如文件扩展名、内容类型、路由、状态代码和响应标头。你可能需要花一些时间,来简单地处理不同页面上的请求,并研究缓存的行为方式。一旦你弄清楚了 如何缓存包含恶意输入的响应,你就可以将漏洞利用传递给潜在的受害者了。

# 5、为什么要识别和评估无键(unkeyed)的输入?

答案

任何 Web 缓存投毒攻击都依赖于对无键输入(如标头)的操纵。

Web 缓存在决定是否向用户提供缓存响应时,会忽略无键的输入。此行为意味着,你可以使用它们来注入有效载荷并引发 “投毒” 的响应,如果该响应被缓存,则稍后该响应将被提供给 请求中具有匹配缓存键 的所有用户。

因此,构建 Web 缓存投毒攻击的第一步是,识别服务器支持哪些无键输入。

# 6、如何快速识别无键的输入?

答案

你可以从 BApp 商店将 Param Miner (opens new window) 扩展添加到 Burp 中,从而自动识别无键的输入。

要使用 Param Miner,你只需右键单击想要调查的请求,然后单击 “Guess header”(猜测标头)。然后,Param Miner 将在后台运行,使用其大量的内置标头列表,生成并发送具有不同输入的请求。如果其注入的某个请求 对响应有影响,Param Miner 会将其记录在 Burp 中。

# 3利用Web缓存投毒 - 缓存设计缺陷

# 1、缓存设计缺陷是什么?

答案

如果网站以不安全的方式处理无键输入,并允许缓存后续的 HTTP 响应,则容易受到 Web 缓存投毒的影响。此漏洞可用于传递各种不同的攻击。

# 2、缓存设计缺陷的攻击手段

答案
  • 通过 Web 缓存投毒实现 XSS 攻击
  • 通过 Web 缓存投毒来利用资源导入的不安全处理
  • 通过 Web 缓存投毒来利用 Cookie 处理漏洞
  • 使用多个标头利用 Web 缓存投毒漏洞
  • 利用暴露过多信息的响应(例如缓存控制标头Age、Cache-Control、Vary等)
  • 通过 Web 缓存投毒实现基于 DOM 的漏洞
  • 链接 Web 缓存投毒漏洞

# 3利用Web缓存投毒 - 缓存实现缺陷

# 1、缓存实现缺陷是什么?

答案

Host标头和请求行,这两个请求组件几乎总是被包含在缓存键中。不同的Host标头和请求行,会引发不同的缓存响应。这使得它们不可能用于缓存投毒。

然而,经过仔细观察,我们会发现这些值经常被解析、转换和规范化,从而引入了些许差异,使得我们可以利用这些漏洞。这些差异源于危险但故意的功能,一直到解析错误和幼稚的逃逸问题,这些问题让我们能够使完全不同的请求发生冲突。

利用之后,不同的Host标头和请求行,会引发相同的缓存响应。

# 2、缓存设计缺陷 和 缓存实现缺陷 之间的区别?

答案
  • 缓存设计缺陷是 缓存功能本身 存在的一种缺陷,这是一种直接的利用方法,因此对所有缓存的影响都是一样的。
  • 缓存实现缺陷是 某些网站在应用缓存系统时 引入了些许解析差异(在本项研究中主要指的是 “缓存键生成方式的缺陷”),导致部分站点受到影响。

# 3、缓存实现缺陷(缓存键缺陷)的原理?

答案

例如,假设Host标头被包含在缓存键中,但对于Host: vulnerable-website.com:1337,缓存系统 和 应用程序使用了不同的处理方式,引入了些许差异:

  • 缓存系统排除了端口,只将域名vulnerable-website.com作为缓存键
  • 而应用程序接受了域名和端口vulnerable-website.com:1337,并将其用作处理

这个差异导致,不管你是请求Host: vulnerable-website.com还是Host: vulnerable-website.com:1337,都会收到同一个缓存响应。

简而言之,虽然Host标头是一个缓存键,但缓存系统转换它的方式 允许我们将有效载荷 传递到应用程序中,同时,映射到其他用户请求的 “正常” 缓存键仍然会被保留。原理展示:探测键处理

# 4、缓存实现缺陷中的缓存探测方法?

答案

与经典的 Web 缓存投毒方法略有不同。这些较新的技术依赖于 缓存的特定实现方式和配置中的缺陷,这些缺陷可能因站点而异。这意味着,你需要更深入地了解目标缓存及其行为。该方法包括以下步骤:

  • 识别合适的缓存预言机(一个页面或端点,提供有关缓存行为的反馈)
  • 探测键处理(手动调查该缓存,在生成缓存键时,目标系统是否对输入执行了任何附加处理)
  • 识别可利用的Gadgets(用这个缓存键缺陷来链接漏洞)

# 5、缓存实现缺陷的攻击手段

答案
  • 无键端口
    • 如果目标站点基于Host标头来动态生成重定向的 URL,则可以添加无效端口号,构建 DoS 攻击
    • 如果网站允许你指定非数字端口,则此类攻击可能会进一步升级。例如,你可以使用它来注入 XSS 有效载荷。
  • 无键查询字符串(整个查询字符串都从缓存键中被排除)
  • 无键查询参数(只排除某些特定参数)
  • 缓存参数伪装
    • 参数解析的差异(例如 Rails 框架支持使用&和;来分隔请求参数)
    • 畸形GET请求(目标网站接受具有正文的GET请求)
    • 畸形GET请求(使用诸如X-HTTP-Method-Override的标头来覆盖默认请求方法)
    • 利用资源导入中的动态内容
  • 缓存键规范化(有编码 和 无编码的响应,共用同一个缓存键)
  • 缓存键注入(键控组件被捆绑在查询字符串中)
  • 内部缓存投毒

# 4如何防范Web缓存投毒漏洞

答案
  • 完全禁用缓存。
  • 将缓存限制为纯静态响应。
  • 检查 CDN 以及其他默认设置,禁用不需要的请求标头。
  • 在实现缓存时,还应采取以下预防措施:
    • 如果出于性能原因,想要从缓存键中排除某些内容,请重写整个请求。
    • 不要接受畸形GET请求。请注意,默认情况下,某些第三方技术可能允许此操作。
    • 修补客户端漏洞,即使它们看起来不可利用。由于缓存行为中的不可预测的异常,其中一些漏洞实际上可能是可利用的。这只是一个时间问题,当有人发现一个解析差异时,无论是基于缓存还是其他方式,都可能使这个漏洞被利用。
编辑 (opens new window)
服务端模板注入笔记
HTTP主机头攻击笔记

← 服务端模板注入笔记 HTTP主机头攻击笔记→

最近更新
01
API测试笔记
04-30
02
msfvenom
03-29
03
Metasploit
03-29
更多文章>
Theme by Vdoing | Copyright © 2023-2024 Carsaid | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式