CVE-2021-27905 Apache Solr SSRF漏洞

news2025/1/22 17:59:59

预备知识
1. 漏洞信息

漏洞编号:CVE-2021-27905  
漏洞名称:Apache Solr SSRF漏洞 

漏洞描述:Apache Solr是一个开源的搜索服务,使用Java编写、运行在Servlet容器的一个独立的全文搜索服务器,是Apache Lucene项目的开源企业搜索平台。该漏洞是由于Solr默认安装未开启身份验证,攻击者可未授权通过Config API修改配置,导致SSRF和任意文件读取。

影响版本:Apache Solr <= 8.8.1

2. ApacheSolr相关实验

<CVE-2019-0192 Apache Solr远程反序列化代码执行漏洞>

实验目的
通过实验学习Apache Solr SSRF及任意文件读取漏洞的产生原因和利用方式。

实验环境
Attack:Kali Linux
Target:Windows 10、IP:10.1.1.200
实验步骤一
任务描述:漏洞环境:源码搭建及创建core。

1. target机器下载漏洞环境并解压,进入bin目录,执行solr start -p 8983


2. 浏览器访问http://ip:8983即可看到solr的主界面:


3. 刚下载的环境是没有core的,点击左侧的Core Admin来创建一个core:


4. 直接点击Add Core发现报错:

5. 但是此时Solr已经在/server/solr目录下创建了名为new_core的文件夹,需要把/server/solr/configsets/_default文件夹下的conf目录整个拷贝到new_core文件夹下:


6. 复制完成后再点击Add Core即可创建成功:


实验步骤二
任务描述:漏洞代码块分析。


1.  漏洞代码块 

https://github.com/apache/solr/blob/main/solr/core/src/java/org/apache/solr/servlet/SolrRequestParsers.java:

这里获取stream.url参数并调用了URLStream。
2.  跟进URLStream:

发现其getStream()方法与url建立了连接,导致SSRF漏洞。
3. 同样在SolrRequestParsers.java文件中:

和SSRF代码类似,这里调用的是ContentStreamBase.FileStream。

4. 跟进FileStream:


没有任何过滤,所以可以读取任意文件。

实验步骤三
任务描述:漏洞复现,获取core_name,发送请求开启远程读取文件流,任意文件读取。

1.  Attack机器通过浏览器访问http://ip:8983/solr/admin/cores?indexInfo=false&wt=json,可以获取目标机器core的名字:

2.  利用Config API打开默认关闭的requestDispatcher.requestParsers.enableRemoteStreaming开关。
访问http://ip:8983/solr/core_name/config,使用burp发送以下POST请求包:

{"set-property": {"requestDispatcher.requestParsers.enableRemoteStreaming":true}}

注意修改MIME类型为application/json
可以测试是否存在漏洞,响应码为200,说明远程读取流文件配置开启成功。

3.  开启后寻找某个路径进行文件读取,在 https://github.com/apache/solr/blob/7ada4032180b516548fc0263f42da6a7a917f92b/solr/core/src/resources/ImplicitPlugins.json 中提供了很多请求路径。

4.  其中/debug/dump主要是输出一些请求头和响应头信息,可以针对该路径进行利用:

POST/solr/core_name/debug/dump

stream.url=file://想要读取的文件名称

例如读取hosts文件:C:\Windows\System32\drivers\etc\hosts

stream.url参数触发SSRF漏洞,Java中可以利用file协议实现任意文件读取。

实验步骤四
任务描述:漏洞检测POC测试。


1.  Attack机器下载漏洞检测POC并解压:

2.  执行漏洞检测POC并输入待检测的URL:

3.  输入想要读取的文件名称:

漏洞修复
将Solr端口仅对内网开放,并配置访问策略:
1、 关闭ConfigAPI,禁止通过API修改配置,在bin目录下的solr.in.cmd中加入:
set SOLR_OPTS=%SOLR_OPTS%-Ddisable.configEdit=true
2、 关闭远程读取文件流,修改core_name/conf/configoverlay.json中的远程读取文件流的配置修改为false:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/434220.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在Claude穿越千年,问了孔子人生问题

&#x1f4d5;如果大家还不知道Claude的话&#xff0c;可以先了解下&#xff0c;它是chatgpt最大的竞争对手。他有很多的知识&#xff0c;能做的事情也非常的多。 今天我们就让他用孔子的思想来跟我们对话&#xff0c;看看他会怎么回答我们的人生问题。 我们先问问他&#xf…

组播协议的RP

某组播网络示意图如图,其中MCS1是组播地址(G1)的组播源,PC1和PC2是组G1的接收者。 1.上述组播网络中,端口1、2、3需要运行哪些协议,为什么需要运行这些协议?(仅填必配的组播协议)详细写出具体原因 结合上述拓扑,考虑到存在RP场景,因此运行组播路由协议为PIM-SM协议,…

『pyqt5 从0基础开始项目实战』07. 次数清零与多行数据删除(保姆级图文)

目录 导包和框架代码 次数清零按钮添加绑定事件实现数据清零 数据删除按钮添加绑定事件实现删除功能完整代码总结 欢迎关注 『pyqt5 从0基础开始项目实战』 专栏&#xff0c;持续更新中 欢迎关注 『pyqt5 从0基础开始项目实战』 专栏&#xff0c;持续更新中 导包和框架代码 请…

GEE:Gmeans图像分割

G-means是一种聚类算法,它是基于K-means算法的改进版本。K-means算法的一个主要缺点是需要事先指定聚类的数量,而G-means算法则可以自动确定聚类的数量。 G-means算法使用了类似于K-means的迭代过程,但在每次迭代时,它会检查每个聚类是否可以继续细分为两个子聚类。这个检…

保护你的数字资产:网络安全的重要性和应对策略

网络安全已经成为现代企业和组织的重要问题。在数字化的时代&#xff0c;网络攻击和安全威胁的规模和复杂性不断增加&#xff0c;因此保护数字资产变得越来越重要。而Log360作为一款全面的网络安全解决方案&#xff0c;可以帮助企业识别、分析和应对网络安全威胁&#xff0c;从…

【PyTorch】第六节:乳腺癌的预测(二分类问题)

作者&#x1f575;️‍♂️&#xff1a;让机器理解语言か 专栏&#x1f387;&#xff1a;PyTorch 描述&#x1f3a8;&#xff1a;PyTorch 是一个基于 Torch 的 Python 开源机器学习库。 寄语&#x1f493;&#xff1a;&#x1f43e;没有白走的路&#xff0c;每一步都算数&#…

【SCI电气】考虑不同充电需求的电动汽车有序充电调度方法(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【Python】【进阶篇】二十、Python爬虫实现Cookie模拟登录

目录 二十、Python爬虫实现Cookie模拟登录20.1 注册登录20.2 分析网页结构20.3 编写完整程序 二十、Python爬虫实现Cookie模拟登录 在使用爬虫采集数据的规程中&#xff0c;我们会遇到许多不同类型的网站&#xff0c;比如一些网站需要用户登录后才允许查看相关内容&#xff0c…

【获奖案例巡展】信创先锋之星——甘肃省住房和城乡建设厅住建数据大脑

为表彰使用大数据、人工智能等基础软件为企业、行业或世界做出杰出贡献和巨大创新的标杆项目&#xff0c;星环科技自2021年推出了“新科技 星力量” 星环科技科技实践案例评选活动&#xff0c;旨在为各行业提供更多的优秀产品案例&#xff0c;彰显技术改变世界的力量&#xff0…

推进数字化转型进程,AntDB数据库协同神州云动共促新发展

当今&#xff0c;数字化转型已成为企业发展的必由之路。随着新技术的不断发展和市场的日益竞争&#xff0c;越来越多的企业开始意识到数字化转型的重要性&#xff0c;在帮助企业数字化转型过程中&#xff0c;高效的客户关系管理软件和具有灵活性、可伸缩的数字底座&#xff0c;…

关于于pyreadline模块的py3k_compat.py的函数collections.Callable兼容性问题

上图警告的官网链接地址 上图警告信息是一个警告信息,提醒你在代码中使用了即将被弃用的函数或配置项,建议及时修改以避免在将来的版本中出现不兼容的情况。具体解释如下: 这段段警告信息来自于pyreadline模块的py3k_compat.py文件,提示你使用了collections模块中即将被弃用…

code=45, title=禁止登录, message=登录失败,建议升级最新版本后重试,或通过问题反馈与我们联系。

如果你是采用 java 开发的&#xff0c;你可以参考本文章&#xff0c;java 和 kotlin 都是可以相互转换的。 在解决之前&#xff0c;先说明环境: JDK版本&#xff1a;java version "17.0.3.1" 【Oracle JDK】 Kotlin版本&#xff1a;1.8.20 采取simbot核心包开发&am…

PLATO-2: Towards Building an Open-Domain Chatbot via Curriculum Learning论文学习

一、概述 Motivation&#xff1a;直接提升PLATO的size训练不work Methods&#xff1a; 通过curriculum learning技术来构建一个高质量的开放领域机器人第一阶段&#xff1a;coarse-gained generation model&#xff1a;再简单的one-to-one框架下学习粗力度的回复生成模型第二…

【Micropython】ESP8266驱动mpu6050读取数据

【Micropython】ESP8266驱动mpu6050读取数据 &#x1f4cc;相关篇《【MicroPython ESP32】ssd1306驱动0.96“I2C屏幕mpu6050图形控制》 ✨本案例基于Thonny平台开发。✨ &#x1f516;esp8266固件版本&#xff1a;MicroPython v1.19.1 on 2022-06-18 &#x1f4cd;本篇需要使…

2023 年打破认知,这个开源 API 管理工具你应该知道

关于 API 管理工具&#xff0c;如今的市场已经把用户教育的差不多了&#xff0c;毫不夸张地说&#xff0c;如果我随机抽取一位幸运读者&#xff0c;他都能给我罗列出一二三四款大家耳熟能详的工具&#xff0c;但我今天还是要推荐这一款我上手后&#xff0c;亲测觉得不错的开源 …

深入浅出OpenGL三维渲染管线

1 前言 在计算机图形学中&#xff0c;渲染是根据模型描述在显示器上生成图像的过程。3D图形渲染管线输入根据图元顶点(如三角形、点、线和四边形)对3D模型的描述&#xff0c;并为显示器上的像素生成颜色值。 如下图所示的是3D图形渲染管线的流程。 3D图形渲染管线主要包含以…

JVM知识

类加载机制 虚拟机把class文件加载到内存&#xff0c;并对数据进行校验&#xff0c;转换解析和初始化&#xff0c;形成虚拟机可以直接使用的Java类型&#xff0c;即java.lang.class 装载(Load) ClassFile -> 字节流 ->类加载器 查找和导入class文件 1&#xff1a;通…

解决方案|以大数据为抓手,打造粮食安全智慧监管平台

食为政首&#xff0c;粮安天下&#xff0c;粮食问题一直深受总书记记挂&#xff0c;总书记多次提到&#xff1a;“中国十三亿多人口&#xff0c;吃饭主要靠自己&#xff0c;不能靠外面来解决。” 近年来粮食安全事件频发&#xff0c;中央纪委国家监委在全国开展粮食购销领域腐败…

程序员的那些事儿

作者主页&#xff1a;爱笑的男孩。 持续分享&#xff1a;机器学习、深度学习、python相关内容、日常BUG解决方法及Windows&Linux实践小技巧。 如发现文章有误&#xff0c;麻烦请指出&#xff0c;我会及时去纠正。有其他需要可以私信我或者发我邮箱:zhilong666foxmail.com 目…

编译后的hue 替换cdh默认版本hue步骤

基于hue源码编译的hue 进行替换cdh6.x.x默认带的hue版本,主要解决hue滚动条 拉的时候,一下就到末尾的bug,通过源码编译githu上的hue解决问题 一. 拷贝编译好的hue到cdh目录替换原来hue目录 三.启动hue报错 问题一:没有pip命令 pip list -bash: pip: command not found …