一、概述
XXE(XML External Entity Injection),即MXL外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站,发起dos攻击。
XXE漏洞触发的点出现在系统可以上传XML文件的位置,应用程序对XML输入进行解析时,没有对上传的XML文件内容进行过滤,没有禁止加载外部实体,导致攻击者可以构造一个恶意的XML文件进行上传。
二、基本概念
1.XML
XML,即可扩展标记语言,标准通用标记语言的子集。是一种用于标记电子文件使其具有结构性的标记语言。
在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如文章等。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。是Internet环境中跨平台的、依赖于内容的技术,也是当今处理分布式结构信息的有效工具。
2.DTD
DTD(Document Type Definition),即文档类型定义。我们在XML中可以自定义标记,那XML解析器怎么认识这些自定义标记并根据自定义标记的处理法则来处理元素呢?这需要DTD,它是我们用来定义我们自己定义的标记的含义,我们自己定义元素的相关属性的文档。
3.实体
实体可以理解为变量,其必须在DTD中定义声明,可以在文档中的其他位置引用该变量的值。
实体按照类型主要分为:内置实体、字符实体、通过实体、参数实体。
实体按照应用方式分为:内部实体和外部实体。
三、产生原因
XXE产生的本质原因是:
1.有外部实体,将数据传入服务器,而且传入的格式是XML。如下:
<!DOCTYPE message[<!ENTITY ms SYSTEN “file:///d:1.txt”>]>
2.服务器会将XML进行解析,解析后将内容最终显示到某一个地方。
3.最终显示数据的地方能够被取到。
四、防御手段
1.检查服务器是否必须对XML进行解析。
2.检查服务器是否必须将解析的内容加载到页面或数据库。
3.检查服务器是否对XML文件头进行检查。