XXE漏洞原理及防御方式。

目录

1.xml 简单了解

1.1 xml声明

1.2文档类型定义

1.3文档元素

1.4代码详解

2.DTD两种使用方式

2.1内部声明

2.2外部声明

3.DTD实体

3.1内部实体声明引用

3.2外部实体声明引用

3.3参数实体声明引用

4.XXE漏洞原理

5.XXE漏洞利用

5.1读取本地文件

 5.2读取系统文件

5.3内网IP探测

5.4内网端口探测

5.5无回显读取文件

6.如何检测XXE漏洞

6.1人工

6.2工具

7.如何防御XXE

7.1使用开发语言提供的禁用外部实体的方法

7.2过滤用户提交的XML数据


写这篇文章目的就是想认真理理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代码详解

  1. <?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
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值