视频讲解XXE 漏洞原理,我们来看看XXE 漏洞是基于什么特性导致的
你好,我是好刚,这一讲我们来了解XXE 漏洞 (XML External Entity Injection)。
1. XXE 漏洞原理
这次的漏洞是XXE漏洞,全称叫:XML 外部实体注入(XML External Entity Injection)。我们来看看这个名称。
首先是XML,XML 是一种标记语言,可以用来定义数据类型,定义好的数据可以方便的在系统间传输和使用。
这是一个XML文档,它的结构可以分为XML声明、文档类型定义(DTD)、文档元素,其中DTD 是可选的,这次漏洞就是在解析DTD 时产生的。
2. DTD 与实体
这里DTD(文档类型定义)的作用是定义XML文件中有哪些模块,这些模块能包含什么样的内容。常见的模块有元素,属性,实体,PCDATA,CDATA等等。
其中一种模块是实体。实体就像编程语言中的常量,我们可以将一串普通文本定义为一个实体,这样就可以在XML 通过这个实体引用这段文本。实体主要有两种,直接在DTD 中声明的实体称为内部实体,通过 从外部引入内容的是外部实体。
这样解释比较抽象,我们先来看一个内部实体的示例,看看实体到底是什么。
定义好实体后,在XML 中使用实体时,有固定的格式:以 开头,中间是实体名,再以 结尾。经过解析后,实体将会被替换成定义的内容,这里XML 会变成这样:
这就是实体,通过将一串文本定义为一个实体,就可以在XML 通过这个实体来引用这段文本。
3. 外部实体
在来看一下外部实体,这是一个外部实体的示例,外部实体的标志是使用 将外部文件的内容定义到实体上,然后可以在XML 中通过这个实体,引用外部文件的内容。
这里实体将会被替换成定义的内容,也就是,正常使用中 的内容可能被返回给用户,也就会将服务器 的内容暴露给了攻击者,导致服务器被攻击。
XXE 漏洞,正是利用了XML 外部实体可以解析外部文件的特性,才使得攻击成为可能。
这就是XXE 漏洞的原理,这一讲先介绍到这,下一讲我将介绍基于XXE 漏洞的攻击流程以及这次微信支付的漏洞到底出现在哪个环节。我是好刚,好钢用在刀刃上,我们下期见。
参考资料
领取专属 10元无门槛券
私享最新 技术干货