0X01:何为XXE漏洞?XXE是指xml外部实体攻击
0x02:那么xml是什么?xml实体攻击是什么?
有些XML文档包含system标识符定义的“实体”,这些XML文档会在DOCTYPE头部标签中呈现。这些定义的’实体’能够访问本地或者远程的内容。比如,下面的XML文档样例就包含了XML ‘实体’。
这一段代码,其中entityex就是外部实体,我们可以通过这个参数来访问file://etc/passwd的内容,因为我们web服务器在解析xml文档的过程中,实体entityes的值会直接被替换成file://etc/passwd。关键字'SYSTEM'会告诉XML解析器,'entityes'的实体值将会从后面的URL获取,也就是我们所替换的file:///etc/passwd文件,其实这个过程就是XML实体攻击过程。
0x03:如何识别xml实体攻击漏洞?
最直接的方法就是用burp抓包,然后,修改HTTP请求方法,修改Content-Type头部字段等等,查看返回包的响应,看看应用程序是否解析了发送的内容,一旦解析了,那么有可能XXE攻击漏洞,接下来,来看一个小小的展示:
这个是测试wvs的测试点:http://testhtml5.vulnweb.com/
我们点击Login下面的Forgot Pwd?然后用burp抓包
点击repeater,我们来查看返回包
从上面我们可以看到,web应用正在解析xml的内容,接受用户特定或者自定义的输入,然后呈现给用户。为了验证,我们可以构造如下的输入:
可以看到应用程序确实是直接解析了xml,那么如果xml文档中有一个参数是用来调用远程服务器的内容?这个参数是可控的,
如上述所说的:
myentity通过 SYSTEM参数来实体解析远程服务器中的etc/passwd文件,导致xml外部实体攻击。
案例分析
wuyun镜像地址:http://wooyun.jozxing.cc/
在介绍案例之前,首先我普及一个概念,即wsdl这个关键词
wsdl百度搜索如下:
wsdl(网络服务描述语言)是Web Service的描述语言,它包含一系列描述某个web service的定义
wsdl元素是基于XML语法描述了与服务进行交互的的基本元素,所以有wsdl服务的地方就可能存在xxe漏洞
wuyun案例分析:1:http://wooyun.jozxing.cc/static/bugs/wooyun-2016-0205725.html
2:http://wooyun.jozxing.cc/static/bugs/wooyun-2016-0169109.html
问题点出现在:http://**.**.**.**/webservice/services/webservice?wsdl
漏洞证明:
0x01:首先是构造代码:
%remote;]>
0x02:获取系统目录,根据返回可知,当前定义的文件参数实体被引用了
0x03:这个漏洞可以说跟ssrf漏洞的利用价值一样大,可以直接各种协议来进行任意文件读取,如下:
成功获取了根目录文件(配合wvs的Web Service Editor功能)
案例二:
漏洞标题:xxx平台XXE漏洞
漏洞简要描述:xxx平台XXE漏洞
漏洞类型:WEB漏洞
漏洞等级:高危漏洞
漏洞大类:XML实体注入
0x01:一般这种漏洞在使用xml的地方(用wvs能够扫描出这些点),看到了SYSTEM这个参数就有的利用了,然后采用burp抓包,构造payload进行xml实体注入。
我们这里直接用burp抓包,利用file读取文件目录,如果是root权限的话,就可以进一步读取shadows文件,数据库配置文件等等,利用价值比较大,普通权限的话我只能根据用户名来爆破ssh,ftp等等服务,或者查看能够读取的文件,进一步扩大渗透范围,暂时没有好的思路,如果有白帽子懂的进一步利用的话,可以交流一下。