XML 外部实体 (XXE) 注入是一种 Web 安全漏洞,当应用程序在未正确禁用外部实体引用时解析来自不受信任源的 XML 输入时发生。此漏洞允许攻击者访问服务器端文件、执行服务器端请求伪造 (SSRF),并在某些情况下执行远程代码或发起拒绝服务攻击。
有关 XML 处理相关的漏洞,请参阅 XSLT 注入。
XML 解析器可以处理在 XML 文档的文档类型定义 (DTD) 部分中定义的外部实体引用。当应用程序接受 XML 输入并使用易受攻击的解析器配置对其进行处理时,攻击者可以利用此功能。
来源:XXE Injection/README.md3-4 XXE Injection/README.md43-57
XXE 漏洞可以根据应用程序的行为以不同的方式利用
| 类型 | 描述 | 用例示例 |
|---|---|---|
| 经典 XXE | 直接检索文件内容 | 读取 /etc/passwd 或其他敏感文件 |
| 基于错误的 XXE | 通过错误消息提取数据 | 在无法直接输出时泄露数据 |
| 盲注 XXE | 带外数据渗漏 | 在没有反射输出时提取数据 |
| DoS XXE | 导致资源耗尽 | 十亿乐(Billion Laughs)或二次方爆炸攻击 |
来源:XXE Injection/README.md71-102 XXE Injection/README.md164-178
要检测应用程序是否易受 XXE 攻击,您可以提交一个基本的实体测试
这会测试应用程序是否处理外部实体并在响应中显示其内容。
来源:XXE Injection/README.md50-70
来源:XXE Injection/README.md77-102
当直接检索可能会被过滤或编码不当时
来源:XXE Injection/README.md111-115
对于 PHP 应用程序,可以使用过滤器包装器来读取源代码
来源:XXE Injection/README.md117-130
当无法修改 DOCTYPE 元素时
来源:XXE Injection/README.md132-148
XXE 可通过让服务器访问内部资源来执行服务器端请求伪造
来源:XXE Injection/README.md150-162
此攻击创建嵌套实体,这些实体会指数级扩展,可能耗尽服务器内存。
来源:XXE Injection/README.md164-178
来源:XXE Injection/README.md179-207
基于错误的 XXE 在无法直接输出时使用错误消息来提取数据。
此技术利用本地 DTD 文件将敏感文件包含在错误消息中。
来源:XXE Injection/README.md209-255
当无法看到直接输出时,可以通过带外技术渗漏数据。
使用远程回调测试盲注 XXE
来源:XXE Injection/README.md335-347
此技术将文件内容发送到攻击者控制的服务器。
来源:XXE Injection/README.md367-380
XML 解析器使用各种方法来检测编码
将载荷转换为不同的编码可以绕过 WAF 过滤器
来源:XXE Injection/README.md422-446
尝试将 Content-Type 从 JSON 切换到 XML
| 内容类型 | 数据 |
|---|---|
application/json | {"search":"name","value":"test"} |
application/xml | <?xml version="1.0" encoding="UTF-8" ?><root><search>name</search><value>data</value></root> |
来源:XXE Injection/README.md447-466
XXE 漏洞可能存在于内部使用 XML 的各种文件格式中。
来源:XXE Injection/README.md470-486
来源:XXE Injection/README.md521-529
Office 文档(DOCX、XLSX)是包含可被利用的 XML 文件的 ZIP 存档
7z x -oXXE xxe.docx 提取zip -r -u ../xxe.docx * 重新打包来源:XXE Injection/README.md531-587 XXE Injection/README.md589-616
为防止 XXE 漏洞
不同语言的安全配置示例
| 语言 | 安全配置 |
|---|---|
| PHP | libxml_disable_entity_loader(true) |
| Java | factory.setFeature("https://apache.ac.cn/xml/features/disallow-doctype-decl", true) |
| Python | 使用 defusedxml 库 |
| .NET | XmlReaderSettings.DtdProcessing = DtdProcessing.Prohibit |
来源:XXE Injection/README.md41-49
一些工具可以帮助进行 XXE 利用
来源:XXE Injection/README.md41-49
XML 外部实体 (XXE) 注入对于处理 XML 输入的应用程序来说仍然是一个重大的安全风险。了解各种利用技术并实施适当的防御措施对于保护应用程序免受这些攻击至关重要。
通过禁用外部实体处理并保持 XML 解析器更新,开发人员可以有效地减轻其应用程序中 XXE 漏洞的风险。
刷新此 Wiki
最后索引时间2025 年 4 月 18 日(7eb75c)