ElasticSearch的这个漏洞的编号是CVE⑵015⑴427,影响版本为1.3.0⑴.3.7和1.4.0⑴.4.2,漏洞成因详见:http://drops.wooyun.org/papers/5107,本文具体探讨1下漏洞利用。
1.2.0版本默许是禁用了脚本履行,如果要使用该功能的话,要在elasticsearch.yml中设置script.disable_dynamic:true。
在1.3.0版本,开始使用groovy和sandbox来进行脚本履行,其中使用了白名单机制,限制了可以调用的类和方法等等。
但是由于Java中的反射机制,我们可以通过白名单中的类获得到Runtime,也就造成了远程代码履行漏洞,威力很大。
空话不多说,使用es的python客户端进行测试:
这里要注意,需要指定1下脚本的类型为groovy。这是由于1.3版本中,MVEL依然是默许的语言,效果以下:
既然是远程代码履行,那攻击面实在是太广阔了,这酸爽。
(1)谢绝服务攻击
调用exit便可。
(2)getshell
测试结果,成功返回1个反弹shell:
如果Linux下,很多服务器都是以root权限运行,提权都省了~~
(3)任意文件读取
获得到输入流以后readLine就可以取得回显。
(4)任意文件写入(写shell)
只写了使用java代码实现的,并且本地测试成功,不过简单的1段java代码,使用反射竟然能这么长:
这里不再写出exp程序,由于比较简单,不适用es的python api,也能够自己构造1个要求给es服务器。1个query对应1项攻击方法。
批量利用的话,扫IP段的9200然后上攻击代码就好了,希望大家玩的愉快。
上一篇 配置远程连接MySQL数据库