CVE-2017-12629包含两个漏洞,分别是XXE和远程命令执行。
CVE-2017-12629 XXE
首先这个漏洞点在于这个路径中(demo是自己创建core,可能名字会有所不一样): /solr/demo/select?q=payload&wt=xml&defType=xmlparser
首先老老实实按照vulhub上利用http://协议简单验证一下漏洞的存在。修改vulhub上的payload,让服务器访问我的VPS。
监听6657端口,并向服务器发送构造好的请求。
看到vulhub最后有一个读取/etc/passwd文件的截图。想着自己也试一试。于是继续更改payload,使用file:///etc/passwd来回显结果。但是一直发生如图错误:
因为没有过多的了解Blind XXE,一直以为是我payload那里参数写错了。后来在查找解决方法的过程中看到了这篇文章:https://www.freebuf.com/vuls/194489.html
才知道上图的报错其实是正常的Blind XXE回显,是能确保/etc/passwd存在的,并且能被XML解析器正常打开读取,只是因为/etc/passwd不是个有效的XML文档类型定义,所以解析失败并报错。
按照参考文章中,利用外带的思路来解决这个问题。先写好一个XML文档,上传到我自己的服务器中,文档内容为:
再利用http://协议访问我服务器上写好的XML文档,进行内容的回显。Payload构造如下:
发送请求,得到/etc/passwd内容的回显:
CVE-2017-12629 RCE
该漏洞需要创建一个Listener,按照vulhub上的payload可以进行修改,修改为执行echo “u been hacked” > /tmp/1.sh
如果响应如上图则表示Listener添加成功,目前我对这个Listener了解的还没有完全深入,还需要继续学习。只是通过实践得知,再执行命令,需要命名新的Listener,否则会报错,在哪里能删除旧的Listener还需要查找资料。我这里先放过去。
然后利用update更新,触发新创建的Listener。
查看服务器内的文件信息,命令执行成功,可以做到向服务器内写shell。因为靶机环境内没有nc等一堆命令,所以就没复现执行nc反弹shell的操作。不过这个RCE还是挺神通广大的。