程序员人生 网站导航

ElasticSearch Groovy远程代码执行POC和exp

栏目:综合技术时间:2015-03-26 09:25:05


ElasticSearch的这个漏洞的编号是CVE⑵015⑴427,影响版本为1.3.0⑴.3.71.4.0⑴.4.2,漏洞成因详见:http://drops.wooyun.org/papers/5107,本文具体探讨1下漏洞利用。

1.2.0版本默许是禁用了脚本履行,如果要使用该功能的话,要在elasticsearch.yml中设置script.disable_dynamic:true

1.3.0版本,开始使用groovysandbox来进行脚本履行,其中使用了白名单机制,限制了可以调用的类和方法等等。

但是由于Java中的反射机制,我们可以通过白名单中的类获得到Runtime,也就造成了远程代码履行漏洞,威力很大。

空话不多说,使用espython客户端进行测试:

这里要注意,需要指定1下脚本的类型为groovy。这是由于1.3版本中,MVEL依然是默许的语言,效果以下:

既然是远程代码履行,那攻击面实在是太广阔了,这酸爽。

 1)谢绝服务攻击

调用exit便可。

2getshell

测试结果,成功返回1个反弹shell

如果Linux下,很多服务器都是以root权限运行,提权都省了~~


(3)任意文件读取

获得到输入流以后readLine就可以取得回显。

(4)任意文件写入(写shell)

只写了使用java代码实现的,并且本地测试成功,不过简单的1段java代码,使用反射竟然能这么长:

java.lang.Math.class.forName("java.io.FileOutputStream").getConstructor(java.io.File.class).newInstance(java.lang.Math.class.forName("java.io.File").getConstructor(java.lang.String.class).newInstance("c:/1.txt")).write(java.lang.Math.class.forName("java.lang.String").getConstructor(java.lang.String.class).newInstance("fuck").getBytes())
还可使用命令履行echo出shell来,思路多多。

这里不再写出exp程序,由于比较简单,不适用espython api,也能够自己构造1个要求给es服务器。1个query对应1项攻击方法。

批量利用的话,扫IP段的9200然后上攻击代码就好了,希望大家玩的愉快。


------分隔线----------------------------
------分隔线----------------------------

最新技术推荐