目录
写这篇文章目的就是想认真理理XEE这个漏洞,因为在学习过程中,听过老师的一些课,看过很多文章解释,我觉得讲的都是很官方话或者专业用语,对于初学者理解很难,可能我理解能力不够哈。以下内容仅仅是我个人理解,以及我个人的比喻,比喻可以让你更好理解这个东西,这是我学习的一个方法,可是使的抽象的东西变得比较具体一些。
1.xml 简单了解
XXE这个漏洞的理解,首先我们了解xml文档,因为该漏洞就是由xml文档引起的
XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素
这个是大家搜索xml时候出现的专业解释,那我简单粗暴理解就是来传输数据的,不过有自己的格式,就跟文章一样,有标题,有正文,有前言,有目录等等。文章是汉字,xml是代码而已。那么xml的格式是什么样子呢,它比写文章简单,只有三个部分,XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。接下来我们介绍这个三个部分干什么的。
1.1 xml声明
就是一个说明,简单介绍自己的,版本信息咯,还有编码信息,一般简单,就像文章标题,反正都得有,就和我一样出门必须的化妆,不然不能见人,哈哈哈,开个玩笑。
1.2文档类型定义
这个就是我们的重点,也是漏洞产生的地方,它有一个简称叫DTD,功能已经说明了文档类型定义,它会定义文档会出现那些子元素、父元素、子元素数据类型、实体等等。!DOCTYPE note 这个note就是父元素,在下面的文档元素里面出现了<note> </note>,子元素就是note括号里面就是子元素to,from,heading,body。文档元素子元素是在父元素里面的。子元素数据类型#PCDATA,元素格式都一样,就像南天门左右护法,只不过右护法多了一个长枪。有DTD会让你的xml文档更加规范好看,就跟化妆一样,DTD可以让你有一个正确的化妆顺序,呈现完美容颜,而不是所有化妆品堆在脸上,那你就是风华绝代的石榴姐了。
1.3文档元素
当你有个DTD的时候文档元素呈现就会很规范,那么在子元素中间的,比如John可以认为是xml文档的正文了。
1.4代码详解
-
<?xml version="1.0"?> <!DOCTYPE note [ <!ELEMENT note (to,from+,heading*,body?,(br|b))> <!--带有子序列的元素,需要按照先后顺序出现; to只能出现一次 from最少出现一次 heading次数随意 body出现零次或者一次 非出现br就出现b --> <!--元素约束--> <!ELEMENT to (#PCDATA)><!--pcdata元素--> <!ELEMENT from ANY><!--任何内容的元素--> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> <!ELEMENT br EMPTY><!--空元素--> <!ELEMENT b EMPTY><!--空元素--> <!--属性约束--> <!ATTLIST to number CDATA #REQUIRED><!--必须有属性值出现,且属性值类型为字符串--> <!ATTLIST from length CDATA "10"><!--默认属性值,不写出属性时属性值为10--> <!--假如您不希望强制作者包含属性,并且您没有默认值选项的话,请使用关键词 #IMPLIED。--> <!ATTLIST heading length CDATA #IMPLIED> <!ATTLIST body length CDATA #FIXED "123"><!--属性拥有固定的值,并不允许作者改变这个值--> <!ATTLIST br type (check|cash) "cash"><!--属性值可以为check和cash中的一个--> ]> <note> <to number="1234">Tove</to> <from>Jani</from> <heading length="10">Reminder</heading> <body length="123">Don't forget me this weekend</body> <br type="check"/> </note>
2.DTD两种使用方式
2.1内部声明
<?xml version="1.0"?>
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
&l