xxe漏洞浅谈以及复现

一、xxe利用部分

     ————>  xml声明

]>  ————>  DTD部分
    
&xxe;
                      ————>  xml部分

我们主要利用DTD中的实体部分

1、什么是DTD呢?

文档定义类型(DTD)1、定义元素(对应下xml中的标签) 2、定义实体(对应xml中内容)

xxe漏洞浅谈以及复现_第1张图片

 note.dtd中包含了标签note(根元素)、to、from等

2、两种外部文档说明(DTD)

1、 当引用的DTD文件是本地文件的时候,用SYSTEM标识,并写上”DTD的文件路径”,如下:

    

 2、 如果引用的DTD文件是一个公共文件时,采用PUBLIC标识,如下:

    

3、四种实体声明

1.  内部实体声明

[ ]>

&xxe;

2.  外部实体声明

 
]>
  
&test; 
login 

上述两种均为引用实体,主要在XML文档中被应用,引用方式:&实体名称; 末尾要带上分号,这个引用将直接转变成实体内容。

3.  参数实体声明

 

]>

login

参数实体,被DTD文件自身使用 ,引用方式为:%实体名称。和通用实体一样,参数实体也可以外部引用。

允许包含外部实体,就可能存在XXE 攻击。

外部引用可支持http,file等协议,不同的语言支持的协议不同,但存在一些通用的协议,具体内容如下所示:

xxe漏洞浅谈以及复现_第2张图片

  

4.  公共实体声明

上述如果我们可以将恶意代码放入自定实体中(entities.dtd)

二、复现vulhub中xxe漏​​​​洞

查看libxml版本为2.8.0

xxe漏洞浅谈以及复现_第3张图片

 Web目录为./www,其中包含4个文件:

$ tree .
.
├── dom.php # 示例:使用DOMDocument解析body
├── index.php
├── SimpleXMLElement.php # 示例:使用SimpleXMLElement类解析body
└── simplexml_load_string.php # 示例:使用simplexml_load_string函数解析body

dom.phpSimpleXMLElement.phpsimplexml_load_string.php均可触发XXE漏洞,具体输出点请阅读这三个文件的代码。

利用payload

 

]>

&xxe;

xxe漏洞浅谈以及复现_第4张图片

 

你可能感兴趣的:(开发语言,php,web安全)