XXE漏洞攻防原理
方便永远是安全的敌人
你的知识面,决定你的攻击面
0x01 简述
XXE(XML External Entity)是指xml外部实体攻击漏洞。XML外部实体攻击是针对解析XML输入的应用程序的一种攻击。当包含对外部实体的引用的XML输入被弱配置XML解析器处理时,就会发生这种攻击。这种攻击通过构造恶意内容,可导致读取任意文件、执行系统命令、探测内网端口、攻击内网网站等危害。
而如今越来越多的WEB程序被发现和报告存在XXE漏洞,比如说facebook,paypal等等。很多XML的解析器默认是含有XXE漏洞的,这意味着开发人员有责任确保这些程序不受此漏洞的影响。尽管XXE漏洞已经存在了很多年,但是他从来没有获得他应得的关注度。究其原因一方面是对XXE这种利用难度高的漏洞不够重视,另一方面是XML的存在对互联网的广泛影响,以至于他出现任何问题时牵扯涉及到的应用、文档、协议、图像等等都需要做相应的更改。
0x02 XML结构介绍
要了解XXE漏洞,那么一定要先学习一下有关XML的基础知识。
XML是一种非常流行的标记语言,在1990年代后期首次标准化,并被无数的软件项目所采用。它用于配置文件,文档格式(如OOXML,ODF,PDF,RSS,…),图像格式(SVG,EXIF标题)和网络协议(WebDAV,CalDAV,XMLRPC,SOAP,XMPP,SAML, XACML,…),他应用的如此的普遍以至于他出现的任何问题都会带来灾难性的结果。
XML被设计为传输和存储数据,其焦点是数据的内容,目的是把数据从HTML分离,是独立于软件和硬件的信息传输工具。XML文档有自己的一个格式规范,这个格式规范是由一个叫做DTD(document type definition)的东西控制的,如下:
上面这个DTD定义了XML的根元素是message,然后元素下面还有一些子元素,其中DOCTYPE是DTD的声明;ENTITY是实体的声明,所谓实体可以理解为变量;SYSTEM、PUBLIC是外部资源的申请。那么XML到时候必须像如下这么写:
现在我们了解了XML的实体的定义,但是还没有对实体进行分类,从两个角度可以把XML分为两类共4个类型:(内部实体、外部实体)、(通用实体、参数实体)。其中两大类含有重复的地方。
内部实体:
(DTD定义代码)
(引用代码)