RuoYi框架部分历史漏洞

RuoYi框架部分历史漏洞

生产环境搭建(代码审计)

项目地址:若依 (y_project) - Gitee.com

官方文档:RuoYi

项目构成

因为RuoYi框架是基于SpringBoot搭建的,所以我们启动项目时不用像SpringMVC那样去配置我们的服务器然后把项目放到服务器上启动。我们成功导入项目之后会生成一些文件夹存放对应的代码文件,每一个文件夹都代表着不同的功能。

ruoyi-admin:全局配置

ruoyi-common:存放通用的工具包以及工具类

ruoyi-franmework:存放框架核心代码

ruoyi-generator:存放代码生成模块的代码

ruoyi--quartz :任务调度模块

ruoyi-system:项目业务开放模块

ruoyi-ui:前端代码模块

sql:存放项目功能数据脚本

1. IntelliJ IDEA【打开和管理 Ruoyi 项目的后端代码】
2. Node.js 和 npm【管理前端代码的依赖和构建】
3. Apache Maven【管理后端 Java 代码的构建和依赖】


PS C:\Users\Administrator> node -v
PS C:\Users\Administrator> npm -v
PS C:\Users\Administrator> mvn -version
PS C:\Users\Administrator> java -version
PS C:\Users\Administrator> javac -version
MySQL5.7.26
redis3.0.504

构建过程

  • 前端/后端配置
  • 数据库账号密码以及数据的导入
  • 端口
  • 前后端独立运行/jar包运行

若依说明

若依能够流行起来,主要得益于以下几个方面的优势:1、基于Spring Boot;2、可视化代码生成;3、丰富的组件和插件;4、前后端分离;5、安全性

SpringBoot框架

Spring Boot是一款开箱即用框架,提供各种默认配置来简化项目配置。让我们的Spring应用【Spring是一个轻量级Java开发框架】变的更轻量化、更快的入门。

Spring Boot 优点非常多,如:1、独立运行;2、简化配置;3、自动配置;4、无代码生成和XML配置;5、应用监控

漏洞说明

RuoYi历史漏洞包括Shiro反序列化漏洞、SSTI漏洞、SQL注入、默认口令、任意文件下载、定时任务远程RCE等。

其中,Shiro反序列化漏洞适用于RuoYi V-4.6.2之前的版本,SSTI漏洞适用于V-4.7.1版本,SQL注入适用于<V-4.6.2版本。任意文件下载漏洞适用于所有版本V-4.7.8之前,定时任务远程RCE适用于<V-4.7.2版本。

测试版本

RuoYi-v4.5.0

image-20240825160458063

RuoYi-v4.7.0

image-20240825160547927

RuoYi-v4.7.1

image-20240825160627385

RuoYi-v4.7.8

image-20240825160706213

1、默认口令(全版本)

很多时候开发人员的安全意识不足,可能存在未修改管理员密码的情况这样我们就能利用RuoYi的默认口令,进行登陆。

  • 不过在大多数情况下,开发者通常都会修改超级管理员的密码,而普通用户ry则可能忘记删除。

  • RuoYi默认口令:admin/admin123、ry/admin123;druid控制台:ruoyi/123456

image-20240825160917600

image-20240825160925291

druid说明

项目地址:https://github.com/alibaba/druid

Druid是Java语言中最好的、开源的、高性能的、配置最简单的数据库连接池。Druid能够提供强大的监控和统计、防SQL注入、高性能、富的配置选项等。

要在Java应用程序中使用Druid连接池,首先需要添加Druid的依赖。如果使用Maven,可以在pom.xml中添加以下依赖:

image-20240823095508544

基本的Druid配置示例:application-druid.yml

image-20240825163050155

2、Shiro反序列化(RuoYi<V4.6.2)

复现版本:4.5.0

Shiro说明

Apache Shiro 是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理等功能,Shiro框架直观、易用、同时也能提供健壮的安全性。

Shiro反序列化漏洞

Apache Shiro反序列化漏洞分为两种:Shiro-550、Shiro-721

Apache Shiro框架提供了记住密码的功能(RememberMe),用户登录成功后会生成经过加密并编码的cookie。在服务端对rememberMe的cookie值,先base64解码然后AES解密再反序列化,就导致了反序列化RCE漏洞。

Payload产生的过程:命令 => 序列化 => AES加密 => base64编码 => RememberMe Cookie值。在整个漏洞利用过程中,比较重要的是AES加密的密钥,如果没有修改默认的密钥那么就很容易就知道密钥了,Payload构造起来也是十分的简单。

若依上的利用

ruoyi使用的shiro的高版本,可以自定义密钥,但是由于开发者安全意识不强,在使用ruoyi开发框架时并未更改ruoyi代码中默认的密钥,这同样会导致shiro反序列化漏洞。

  • RuoYi-4.2版本使用的是shiro-1.4.2在该版本和该版本之后都需要勾选AES GCM模式
  • RuoYi-4.2可用利用链为CommonsBeanutilString这条链
  • RuoYi-4.6.2版本开始就使用随机密钥的方式,而不使用固定密钥,若要使用固定密钥需要开发者自己指定密钥,因此4.6.2版本以后,在没有获取到密钥的请情况下无法再进行利用。

RuoYi各版本的AES默认密钥

RuoYi 版本号 对象版本的默认AES密钥
4.6.1-4.3.1 zSyK5Kp6PZAAjlT+eeNMlg==
3.4-及以下 fCq+/xW488hMTCD+cmJ3aQ==

漏洞复现

image-20240825164543153

image-20240825164551326

4.5.0版本的密钥:

image-20240825164601861

RuoYi > V-4.6.2版本:

image-20240825164644950

3、后台任意文件下载漏洞

除了手动测试该漏洞,该可以通过postman接口调试工具来实现

RuoYi<V-4.5.1

复现版本:4.5.0

该漏洞是由于在RuoYi低版本文件下载接口 /common/download/resource 中未对输入的路径做限制,导致可下载任意文件。

  • 接口位置com/ruoyi/web/controller/common/CommonController.java

image-20240825171109897

  • 文件下载默认路径ruoyi-admin\src\main\resources\application.yml
  • E:\Users\Desktop\RuoYi-v4.5.0

image-20240825165908105

  • 路径前缀(即接收输入参数路径的前缀),因此接口即为 /common/constant/Constant

image-20240825170915051

复现过程

添加请求参数接口 + resource=/profile/1.txt

http://127.0.0.1:83/common/download/resource?resource=/profile/../../../../../../123.txt
http://127.0.0.1:83/common/download/resource?resource=/profile/123.txt

image-20240823102943264

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值