浅谈一种特殊格式的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注入

  1. 解压DOCX文件:unzip example.docx -d extracted
  2. 编辑word/document.xml文件:
    <!DOCTYPE test [<!ENTITY test SYSTEM 'file:///etc/passwd'> ]>
    <w:t>&test;</w:t>
    
  3. 重新压缩文件:zip -r modified.docx *
  4. 上传到目标系统

特点

  • 仅适用于LibreOffice,微软Word无法解析
  • 案例:HackPack 2021 Indead v2 CTF题目

0x03 进阶XXE利用方法

方法2:通过docProps/app.xml注入

当document.xml被检测或过滤时,可利用页码显示位置:

  1. 编辑docProps/app.xml文件
  2. <Pages>标签中插入XXE实体

方法3:OLE对象链接技术(仅限LibreOffice)

适用于在线Word转PDF服务(通常使用LibreOffice):

  1. 在LibreOffice中创建文档
  2. 插入 → OLE对象 → 选择"链接到文件"
  3. 链接到目标文件(如/etc/passwd
  4. 先保存为ODT格式,再修改扩展名为DOCX
  5. 解压后编辑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 防御建议

  1. 完全禁用XML实体解析
  2. 多层面检测:
    • 检查document.xml中的可疑实体
    • 检查app.xml等辅助文件
    • 监控OLE对象链接
  3. 处理工具选择:
    • 注意LibreOffice与MS Word的解析差异
    • 在线转换服务的特殊风险

0x06 拓展资源

  1. XXE Cheat Sheet by SecurityIdiots
  2. XML External Entity Injection案例

总结

DOCX文件因其XML和ZIP双重特性成为XXE攻击的潜在载体。攻击者可通过多种途径利用这一特性,防御需要全面考虑文件结构各个部分和不同办公软件的处理差异。安全人员应了解这些技术以有效防御相关攻击。

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 文件: 重新压缩文件: 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 : 优势 : 绕过基于document.xml的检测 可读取服务器端文件 限制 : 读取行数有限(需自定义文本框解决) 0x04 其他相关攻击向量 ZIP压缩包特性利用 DOCX作为ZIP文件的特性可被用于: 通过PHP伪协议利用(如 zip:// ) 隐藏恶意代码在压缩包中 0x05 防御建议 完全禁用XML实体解析 多层面检测: 检查document.xml中的可疑实体 检查app.xml等辅助文件 监控OLE对象链接 处理工具选择: 注意LibreOffice与MS Word的解析差异 在线转换服务的特殊风险 0x06 拓展资源 XXE Cheat Sheet by SecurityIdiots XML External Entity Injection案例 总结 DOCX文件因其XML和ZIP双重特性成为XXE攻击的潜在载体。攻击者可通过多种途径利用这一特性,防御需要全面考虑文件结构各个部分和不同办公软件的处理差异。安全人员应了解这些技术以有效防御相关攻击。