-
什么是XXE漏洞?
XXE,即XML外部实体注入漏洞,XXE 漏洞发生在应用程序解析 XML 输入时, 没有禁止外部实体的加载 ,导致可加载恶意外部文件,造成文件读取、命令执行、攻击内网网站等危险。
XXE漏洞触发的点往往是可以上传xml文件的位置,没有对上传的xml文件进行过滤,导致可上传恶意xml文件。
-
什么是XML?
XML指可扩展标记语言,xml标签对大小写敏感
XML被设计用来传输和存储数据。xml元素必须要有一个关闭标签
XML语言没有预定义的标签,允许作者定义自己的标签和自己的文档结构。
-
xml和html结构类似,不同的是:
XML 被设计用来传输和存储数据。
HTML 被设计用来显示数据。
XML 文档结构包括 XML 声明、DTD 文档类型定义(可选)、文档元素
-
实体引用
实体引用是因为在浏览器中直接使用这几个符号可能无法成功打印出来,可能会有歧义,所以就需要实体引用起作用了
-
什么是DTD?
文档类型定义(DTD)可定义合法的XML文档构建模块,它使用一系列合法的元素来定义文档的结构。
DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。
-
DTD实体
实体是用于定义引用普通文本或特殊字符的快捷方式的变量。
实体引用是对实体的引用。
实体可以在内部或外部进行声明
-
实体ENTITY:
XML中的实体类型,一般有下面几种:
1.内部实体(变量声明)
<!ENTITY 实体名称 "实体的值">
内部实体可以说成是变量声明,内部实体只能在DTD或者XML文件开始部分(<!DOCTYPE>语句中)
2.外部实体
外部普通实体声明:
<!ENTITY 实体名称 SYSTEM "URL">
外部实体用于加载外部文件的内容。(显示XXE攻击主要利用普通实体)
外部参数实体声明:
<!ENTITY %实体名称 "值">
<!ENTITY %实体名称 SYSTEM ”URI”>
参数实体是以字符%开始,以字符(;)结束。只有在DTD文件中才能在参数实体声明的时候引用其他实体。(Blind(无回显) XXE攻击常利用参数实体进行数据回显)
外部声明默认协议及PHP扩展协议
其中PHP支持的伪协议较多。
防御XXE
使用开发语言提供的禁用外部实体的方法
#过滤用户提交的XML数据
过滤关键字:<\!DOCTYPE和<\!ENTITY,或者SYSTEM和PUBLIC。
不允许XML中含有自己定义的DTD
知识点源于:
XXE漏洞基础及简单利用_xxe漏洞的利用方法-CSDN博客
(渗透学习)XXE漏洞原理 & 挖掘 & 利用 & 防御_xxe漏洞挖掘-CSDN博客
浅谈XML实体注入漏洞 - FreeBuf网络安全行业门户