3种XXE不同攻击方式
字数 1004 2025-08-26 22:11:34

XML外部实体(XXE)注入攻击全面解析

什么是XXE攻击?

XML外部实体(XXE)注入是一种严重的安全漏洞,允许攻击者:

  • 读取服务器上的本地文件
  • 访问内部网络资源
  • 扫描内部端口
  • 在远程服务器上执行命令

当应用程序解析包含外部实体引用的XML输入时,如果XML解析器配置不当,攻击者可以通过嵌入恶意内联DOCTYPE定义来利用此漏洞。

XXE攻击的三种主要方式

1. 本地文件劫持服务器

攻击原理
攻击者发送包含恶意DOCTYPE定义的XML payload,服务器处理后会返回敏感信息如:

  • /etc/passwd文件
  • 应用程序配置文件
  • 内部网络详情

两种实现方式

  1. 直接响应:服务器直接返回请求的文件内容
  2. 外带数据:通过包含攻击者控制的URL,诱导服务器向攻击者服务器发送数据

示例payload

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

2. 通过文件上传功能访问服务器文件

攻击场景
利用支持XML格式文件上传的功能(如DOCX, XLSX, PPTX, SVG等),上传包含XXE payload的恶意文件。

特点

  • 不同XML解析库可能有不同行为
  • 绕过常规Web防护措施
  • 利用业务功能实现攻击

攻击步骤

  1. 创建包含XXE payload的Office文档
  2. 上传到目标系统
  3. 系统解析文件时执行payload
  4. 泄露服务器敏感信息

3. 递归实体扩展DoS攻击(十亿笑攻击/XML炸弹)

攻击原理
通过定义递归引用的实体,导致解析器无限扩展实体,耗尽服务器资源。

示例payload

<?xml version="1.0"?>
<!DOCTYPE data [
  <!ENTITY lol "lol">
  <!ENTITY lol1 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">
  <!ENTITY lol2 "&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;">
  <!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">
  <!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">
  <!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;">
  <!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;">
  <!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;">
  <!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;">
  <!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">
]>
<data>&lol9;</data>

效果

  • CPU使用率急剧上升
  • 内存耗尽
  • 服务器崩溃或无响应

XXE防御措施

  1. 禁用外部实体处理

    • 在XML解析器中禁用DTD和外部实体
    • 必要时仅允许受限和受信任的外部链接
  2. 使用安全的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);
    
  3. 输入验证

    • 验证所有XML输入
    • 过滤或拒绝包含DOCTYPE声明的XML
  4. 文件上传防护

    • 对上传的XML文件进行严格检查
    • 使用专用沙箱环境处理上传文件
  5. 保持XML库更新

    • 确保使用的XML库是最新版本
    • 及时修补已知漏洞

总结

XXE攻击位列OWASP Top 10 2017年第4位,虽然不是一个新漏洞,但在现代应用中仍然广泛存在。成功的XXE攻击可能导致:

  • 敏感数据泄露
  • 系统拒绝服务
  • 内部网络渗透
  • 远程代码执行

开发人员和安全团队应当充分了解XXE的各种攻击方式,并在应用程序设计和部署阶段实施适当的防护措施。

XML外部实体(XXE)注入攻击全面解析 什么是XXE攻击? XML外部实体(XXE)注入是一种严重的安全漏洞,允许攻击者: 读取服务器上的本地文件 访问内部网络资源 扫描内部端口 在远程服务器上执行命令 当应用程序解析包含外部实体引用的XML输入时,如果XML解析器配置不当,攻击者可以通过嵌入恶意内联DOCTYPE定义来利用此漏洞。 XXE攻击的三种主要方式 1. 本地文件劫持服务器 攻击原理 : 攻击者发送包含恶意DOCTYPE定义的XML payload,服务器处理后会返回敏感信息如: /etc/passwd 文件 应用程序配置文件 内部网络详情 两种实现方式 : 直接响应 :服务器直接返回请求的文件内容 外带数据 :通过包含攻击者控制的URL,诱导服务器向攻击者服务器发送数据 示例payload : 2. 通过文件上传功能访问服务器文件 攻击场景 : 利用支持XML格式文件上传的功能(如DOCX, XLSX, PPTX, SVG等),上传包含XXE payload的恶意文件。 特点 : 不同XML解析库可能有不同行为 绕过常规Web防护措施 利用业务功能实现攻击 攻击步骤 : 创建包含XXE payload的Office文档 上传到目标系统 系统解析文件时执行payload 泄露服务器敏感信息 3. 递归实体扩展DoS攻击(十亿笑攻击/XML炸弹) 攻击原理 : 通过定义递归引用的实体,导致解析器无限扩展实体,耗尽服务器资源。 示例payload : 效果 : CPU使用率急剧上升 内存耗尽 服务器崩溃或无响应 XXE防御措施 禁用外部实体处理 : 在XML解析器中禁用DTD和外部实体 必要时仅允许受限和受信任的外部链接 使用安全的XML解析器配置 : 输入验证 : 验证所有XML输入 过滤或拒绝包含DOCTYPE声明的XML 文件上传防护 : 对上传的XML文件进行严格检查 使用专用沙箱环境处理上传文件 保持XML库更新 : 确保使用的XML库是最新版本 及时修补已知漏洞 总结 XXE攻击位列OWASP Top 10 2017年第4位,虽然不是一个新漏洞,但在现代应用中仍然广泛存在。成功的XXE攻击可能导致: 敏感数据泄露 系统拒绝服务 内部网络渗透 远程代码执行 开发人员和安全团队应当充分了解XXE的各种攻击方式,并在应用程序设计和部署阶段实施适当的防护措施。