XXE漏洞

声明:本文中所有操作均在合法合规的靶场环境、虚拟环境中进行。

任何个人和组织不得从事非法侵入他人网络、干扰他人网络正常功能、窃取网络数据等危害网络安全的活动;不得提供专门用于从事侵入网络、干扰网络正常功能及防护措施、窃取网络数据等危害网络安全活动的程序、工具;明知他人从事危害网络安全的活动的,不得为其提供技术支持、广告推广、支付结算等帮助。

一、XXE 基础概念

1. 漏洞全称

XXE:XML External Entity(XML 外部实体注入漏洞)

  • 原理:XML 规范支持外部实体引用,若后端 XML 解析器未禁用外部实体解析,攻击者可构造恶意 XML,使服务端读取本地文件、发起内网请求,形成高危注入漏洞。

2.XML 设计初衷

XML 用于传输、存储结构化数据 ,核心聚焦数据内容描述,DTD 实体语法是 XML 扩展功能,本意是复用数据片段,外部实体可引用本地文件 / 远程 URL,漏洞源于未做安全限制。

二、基础 Payload 解析

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ANY [
<!ENTITY file SYSTEM "php://filter/read=convert.base64-encode/resource=xxe.php" >
]>
<root>
<name>&file;</name>
<password>123123</password>
</root>

字段拆解

  1. <?xml version="1.0" encoding="UTF-8"?>:XML 头部声明,定义版本与字符编码;

  2. <!DOCTYPE ANY [...]>:DTD 文档类型定义,用于自定义实体;

  3. <!ENTITY file SYSTEM "协议路径">:自定义外部实体fileSYSTEM关键字代表加载外部资源;

  4. &file;:实体调用,解析 XML 时会替换为外部资源内容;

  5. php://filter/read=convert.base64-encode:PHP 专属伪协议,base64 编码回显文件,规避特殊字符乱码,防止读取内容被页面过滤。

三、修改实体路径实现文件读取

1.Linux 系统(读取系统用户文件)

修改 resource 参数:file:///etc/passwd

  • /etc/passwd:Linux 系统用户清单文件,存放所有本地用户信息,是 XXE 经典读取目标。

2.Windows 系统(读取本地 hosts)

路径:C:/Windows/System32/drivers/etc/hosts

  • hosts 文件:本地域名解析配置文件,可查看自定义域名绑定关系。

补充:常用协议

协议 作用
file:// 读取服务器本地任意文件(XXE 最常用)
http://,https:// 发起 SSRF 请求,扫描内网 IP、端口
php://filter PHP 环境下读取源码并 base64 编码

四、XXE 漏洞核心利用方式(补充拓展)

  1. 读取任意文件

    利用**file://**协议读取配置文件、网站源码、密钥、数据库账号配置。

  2. SSRF 内网探测

    将实体路径改为内网地址,例:http://127.0.0.1:6379,探测内网存活主机与开放端口,攻击内网未授权服务(Redis、Elasticsearch)。

  3. DOS 拒绝服务

    构造递归实体炸弹,无限嵌套实体,耗尽服务器 CPU / 内存资源,使服务宕机。

复制代码
<!DOCTYPE x [<!ENTITY a "&a;&a;&a;">]>
<x>&a;</x>

五、XXE 漏洞防御方案

  1. 禁用 DTD 文档定义(最优方案)

    Java/PHP/Python 等解析 XML 时,关闭 DOCTYPE、外部实体解析功能;

    • PHP:libxml_disable_entity_loader(true);

    • Java:dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl",true);

  2. 白名单校验 XML 数据,过滤用户可控的 DOCTYPE、ENTITY 关键字;

  3. 升级 XML 解析组件,使用安全版本解析库。

关键补充知识点

  1. 有回显 XXE:payload 读取内容直接在页面返回(笔记示例就是有回显场景);

  2. 无回显 XXE(盲 XXE):页面不返回数据,通过 DNS/HTTP 外带数据,把文件内容带出到攻击者服务器。

相关推荐
小书房2 小时前
Android UI为什么由XML转向Compose
xml·ui·compose·声明式ui
学编程的小程6 小时前
配置范式演进:XML、JavaConfig 与 Spring Boot
xml·spring boot·后端
菩提小狗1 天前
每日安全情报报告 · 2026-06-02
网络安全·漏洞·cve·安全情报·每日安全
le1616161 天前
Android Compose基础布局——从传统XML的视角切入了解
xml·compose
网络研究院2 天前
即将过期的安全启动证书将如何影响 Windows 设备
安全·微软·系统·漏洞·硬件
网络研究院2 天前
管理瘫痪、人员短缺:深度解析 NIST NVD 为什么审不动漏洞了?
网络·安全·漏洞·管理·危机
XiYang-DING2 天前
【MyBatis】XML方式实现CRUD
xml·mybatis
IT 青年4 天前
从根域名出发的全量资产收集方法论
信息收集·网安
菩提小狗4 天前
每日安全情报报告 · 2026-05-30
网络安全·漏洞·cve·安全情报·每日安全