一、XXE描述
1、前言
XML外部实体注入,简称XXE漏洞,XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素,目前,XML文件作为配置文件(Spring、Strust2等)、文档结构说明文件(PDF、RSS等)、图片格式文件(SVG header)应用比较广泛。XML的语法规范由DTD来进行控制。
2、简介
XML是可扩展的标记语言,设计用来进行数据的传输和存储。
二、XML和DTD介绍
1、示例
2、PCDATA
pcdata的意思是被解析的字符数据。
可以把字符数据想象为XML元素的开始标签与结束标签之间的文本,PCDATA是会被解析器解析的文本,这些文本将被解析器检查实体以及标记,文本中的标签会被当做标记来处理,而实体会被展开,不过,被解析的字符数据不应当包含任何&、<、>字符,需要用&;<;以及>;实体来分别替换他们。
3、CDATA
CDATA的意思是字符数据。
CDATA是不会被解析器解析的文本,在这些文本中的标签不会被当做标记来对待,其中的实体也不会被展开。
4、常见的xml语法结构
实体:实体是对数据的引用,根据实体种类的不同,XML解析器将使用实体的替代文本或者外部文档的内容来替代实体引用,它主要分为以下四类。
- 内置实体
- 字符实体
- 通用实体
- 参数实体
参数实体用%实体名称申明,引用时也用%实体名称。
其余实体直接用实体名称申明,引用时用实体名称。
参数实体只能在DTD中申明,DTD中引用。
其余实体只能在DTD中申明,在xml文档中引用。
==注意:参数实体是在DTD中被引用的,而其余实体是在xml文档中被引用的,另外定义%后面跟空格。==
5、DTD中的一些重要关键字
- DOCTYPE(DTD的声明)
- ENTITY(实体的声明)
- SYSTEM、PUBLIC(外部资源申请)