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 外带数据,把文件内容带出到攻击者服务器。

相关推荐
tianyuanwo7 天前
深入解析 RISC-V 虚拟化中的 UEFI 固件配置:从 XML 到 NVRAM 的生命周期管理
xml·linux·risc-v
见青..9 天前
文件上传漏洞之原理、探测、利用、绕过、防御
web安全·网络安全·漏洞·文件上传
糖果店的幽灵10 天前
软件测试接口测试从入门到精通:常见接口类型与数据格式
xml·软件测试·json·接口测试·数据格式
网络研究院10 天前
网络研究观-严重漏洞允许以 root 用户身份执行任意命令:CVE-2026-0273 分析
网络·安全·漏洞·修复·设备
摇滚侠11 天前
SpringMVC 入门到实战 配置类替换 XML 配置文件 86-91
xml·java·后端·spring·maven·intellij-idea
就叫_这个吧11 天前
IDEA Mybatis xml文件,实现sql语句联想,自动填入补充
xml·mysql·intellij-idea·mybatis
范什么特西11 天前
配置文件xml和properties
xml·前端
阿昭L12 天前
Windows堆dword shoot
windows·安全·漏洞·堆溢出
曹牧13 天前
Oracle:xml转义
xml·数据库·oracle
曹牧13 天前
Java:XML转义
xml·java·开发语言