xxe(未完工)

本文最后更新于 2026年4月10日 晚上

XXE前置知识(部分资料借鉴于XXE漏洞学习 - Suzen)

​ XXE 是一种 XML 外部实体注入漏洞。当应用程序解析用户提交的 XML 时,如果启用了外部实体解析,并且没有正确过滤或限制,攻击者可以通过定义外部实体来读取服务器本地文件发起 SSRF 等。

​ 1.基础的xxe利用方式

基础文件读取(有回显)

原理:通过定义外部实体引用本地文件(如 /etc/passwd),当 XML 被解析且内容被回显时,文件内容会直接出现在响应中。

前提:后端解析 XML 并将字段内容返回给用户。

用途:读取敏感文件(配置密码flag 等)。

​ 2.Base64 编码绕过

原理:利用 PHP 的 php://filter 流包装器,在读取文件时自动进行 Base64 编码,避免明文内容触发关键词过滤(如flag)。

前提:后端使用 PHP 且支持流包装器。

用途:绕过输出内容中的敏感词检测。

​ 3.带外数据外传(OOB - Out-of-Band)

原理:当服务器不回显解析结果时,通过构造恶意 DTD 文件,让目标服务器在解析过程中主动向攻击者控制的服务器发起 HTTP 或 DNS 请求,并将文件内容嵌入请求的 URL 或子域名中。

前提:目标允许外联(可访问互联网或内网特定服务)。

用途:在无回显场景下窃取数据。

​ 4.XInclude 注入

原理:利用 XML 标准中的 XInclude 功能动态包含外部资源,无需声明 DOCTYPE 或 ENTITY,从而绕过基于 DTD 的检测规则。

前提:后端 XML 解析器支持并启用了 XInclude(如 JavaPython lxml)。

用途:在严格过滤 <!DOCTYPE 的环境中实现文件读取。

​ 5.SSRF(服务端请求伪造)

原理:通过 http:// 或 https:// 协议的外部实体,让服务器向内网或第三方服务发起请求。

前提:解析器允许网络协议。

用途:探测内网服务(如云元数据接口 169.254.169.254)攻击内部系统。

​ 6.源码泄露(PHP 环境)

原理:使用 php://filter 读取 PHP 源文件而不执行,获取应用逻辑硬编码凭证或真实 flag 路径。

前提:目标为 PHP 应用。

用途:辅助进一步攻击或直接获取 flag。

​ 7.命令执行(极少见)

原理:在 PHP 启用了危险的 expect 模块时,可通过 expect:// 协议执行系统命令。

前提:expect 扩展启用(默认不安装)。

用途:远程代码执行(RCE),但现实中几乎不可用。

​ 8.WAF 绕过技巧(混淆与编码)

原理:通过大小写变换Unicode 实体编码协议变种等方式,绕过基于字符串匹配的 Web 应用防火墙(WAF)。

前提:WAF 规则简单,未做语义分析。

用途:使标准 payload 不被拦截。

​ 9.二次注入 / 嵌套实体(进阶 OOB)

原理:在外部 DTD 中动态构造新的实体,实现多阶段解析,将文件内容拼接到外联请求中。

前提:支持参数实体和嵌套引用。

用途:实现更隐蔽更可靠的 OOB 数据外传。

实践

首先我们都得有一个最基础的框架:

1
2
3
<?xml version="1.0" encoding="utf-8"?>
<root>


xxe(未完工)
https://azumisaki.github.io/2026/04/07/xxe/
作者
AzumiSaki
发布于
2026年4月7日
许可协议