XXE从入门到放弃

来源:岁月联盟 编辑:猪蛋儿 时间:2020-01-29


 
认识XML和XXE
XXE全称XML External Entity Injection,也就是XML外部实体注入攻击,是对非安全的外部实体数据进行处理时引发的安全问题。要想搞懂XXE,肯定要先了解XML语法规则和外部实体的定义及调用形式。
XML基础知识
XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。
XML语法规则如下:
所有的XML元素都必须有一个关闭标签
XML标签对大小写敏感
XML必须正确嵌套
XML属性值必须加引号””
实体引用        (在标签属性,以及对应的位置值可能会出现符号,但是这些符号在对应的XML中都是有特殊含义的,这时候我们必须使用对应html的实体对应的表示,比如符号对应的实体就是gt)
在XML中,空格会被保留          (案例如:
a空格B,这时候a和B之间的空格就会被保留)
xml version="1.0" encoding="UTF-8"?>  //xml声明
   //定义元素
        //定义外部实体test
]>
to>
reset>                    //下面为文档元素
  login>&test;login>            //调用test实体(此步骤不可缺)
  secret>loginsecret>
reset>
to>
 
XML元素介绍
XML元素是指从(且包括)开始标签直到(且包括)结束标签的部分。
每个元素又有可以有对应的属性。XML属性必须加引号。
注意:
XML文档必须有一个根元素
XML元素都必须有一个关闭标签
XML标签对大小写敏感
XML元素必须被正确的嵌套
XML属性值必须加引号

XML DTD介绍
DTD文档类型定义,约束了xml文档的结构。拥有正确语法的XML被称为“形式良好”的XML,通过DTD验证约束XML是“合法”的XML。
xml version="1.0" encoding="utf-8" ?> 



]>
学生名册>  
    学生 学号="a1">
姓名>张三姓名>
性别>男性别>
年龄>20年龄>  
学生>
学生 学号="a2">
姓名>李四姓名>
性别>男性别>
年龄>24年龄>
学生>
学生名册>

DTD是什么?
XML 文档有自己的一个格式规范,这个格式规范是由一个叫做 DTD文档类型定义(document type definition) 的东西控制的。
DTD用来描述xml文档的结构,一个DTD文档包含:
元素的定义规则;元素之间的关系规则;属性的定义规则。
DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。
他就是长得下面这个样子:
内部的 DOCTYPE 声明
内部声明DTD类型
内部声明DTD类型声明:
xml version="1.0" encoding="UTF-8"?>  //xml声明
   //定义元素
        //定义外部实体test
]>
note>
to>to>
from>                    from>
login>&test;login>

引用外部实体:
我们主要关注XML外部实体的定义和调用方式:
"URI">
xml version="1.0" encoding="gb2312"?>
!DOCTYPE students SYSTEM "StudentDTD.dtd">
   students>   
      student sno="_0010">       
         name>Markname>       
         age>23age>       
         course>Englishcourse>       
         course>Mathcourse>   
     student>   
     student sno="_0109" role="student">       
        name sex="Male">Andyname>       
        age>19age>       

[1] [2] [3] [4]  下一页