浅谈一种特殊格式的xxe
字数 1227 2025-08-29 08:32:19
XXE漏洞在DOCX文件中的利用技术详解
0x00 背景与概述
DOCX格式文件在微软Office 2007及以后版本中引入,其本质是一个包含XML文件的ZIP压缩包。这种特性使得DOCX文件可能成为XXE(XML External Entity)攻击的载体。本文详细分析DOCX文件中的XXE利用技术,包括多种攻击向量和绕过方法。
0x01 DOCX文件结构基础
- DOCX文件本质:ZIP压缩包,包含多个XML文件
- 关键文件位置:
word/document.xml- 存储文档主要内容 - 内容存储格式:文本内容位于
<w:t>标签内 - 解压方法:使用
unzip命令解压DOCX文件
0x02 基本XXE利用方法
方法1:通过document.xml注入
- 解压DOCX文件:
unzip example.docx -d extracted - 编辑
word/document.xml文件:<!DOCTYPE test [<!ENTITY test SYSTEM 'file:///etc/passwd'> ]> <w:t>&test;</w:t> - 重新压缩文件:
zip -r modified.docx * - 上传到目标系统
特点:
- 仅适用于LibreOffice,微软Word无法解析
- 案例:HackPack 2021 Indead v2 CTF题目
0x03 进阶XXE利用方法
方法2:通过docProps/app.xml注入
当document.xml被检测或过滤时,可利用页码显示位置:
- 编辑
docProps/app.xml文件 - 在
<Pages>标签中插入XXE实体
方法3:OLE对象链接技术(仅限LibreOffice)
适用于在线Word转PDF服务(通常使用LibreOffice):
- 在LibreOffice中创建文档
- 插入 → OLE对象 → 选择"链接到文件"
- 链接到目标文件(如
/etc/passwd) - 先保存为ODT格式,再修改扩展名为DOCX
- 解压后编辑
content.xml:<text:section text:name="string"> <text:section-source xlink:href="/flag" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/> </text:section>
优势:
- 绕过基于document.xml的检测
- 可读取服务器端文件
限制:
- 读取行数有限(需自定义文本框解决)
0x04 其他相关攻击向量
ZIP压缩包特性利用
DOCX作为ZIP文件的特性可被用于:
- 通过PHP伪协议利用(如
zip://) - 隐藏恶意代码在压缩包中
0x05 防御建议
- 完全禁用XML实体解析
- 多层面检测:
- 检查document.xml中的可疑实体
- 检查app.xml等辅助文件
- 监控OLE对象链接
- 处理工具选择:
- 注意LibreOffice与MS Word的解析差异
- 在线转换服务的特殊风险
0x06 拓展资源
总结
DOCX文件因其XML和ZIP双重特性成为XXE攻击的潜在载体。攻击者可通过多种途径利用这一特性,防御需要全面考虑文件结构各个部分和不同办公软件的处理差异。安全人员应了解这些技术以有效防御相关攻击。