【如需转载,请详细表明来源,请勿设置原创】
嗨,大家好,我是闪石星曜CyberSecurity创始人Power7089。
欢迎大家搜索关注 “闪石星曜CyberSecurity” ,这里专注分享渗透测试,Java代码审计,PHP代码审计等内容,都是非常干的干货哦。
炼石计划理念:一个系统化从入门到提升学习的成长型知识星球。这里不仅注重夯实基础,更加专注实战进阶。
今天为大家带来的是一篇实战代码审计若依管理系统的一篇文章,若依管理系统也是现在比较常用的一个系统了。非常有必要好好学习研究一下。
RuoYi 是一个 Java EE 企业级快速开发平台,基于经典技术组合(Spring Boot、Apache Shiro、MyBatis、Thymeleaf、Bootstrap),内置模块如:部门管理、角色用户、菜单及按钮授权、数据权限、系统参数、日志管理、通知公告等。在线定时任务配置;支持集群,支持多数据源,支持分布式事务。
内置功能详解如下:
JDK >= 1.8 (推荐1.8版本)
Mysql >= 5.7.0 (推荐5.7版本)
Maven >= 3.0
基于windows10操作系统。
①、命令行进入Mysql,创建数据库名为ry
,并切换使用该数据库。
create datavase ry; 创建名为ry的数据库
use ry; 切换使用ry数据库
②、将项目文件中的/sql/ry_20200323.sql
的数据导入到ry
数据库,注意导入路径中应使用正斜杠/
。
source /绝对路径/sql/ry_20200323.sql; 导入数据库文件
③、使用IDEA打开本项目,等待Maven自动加载依赖项,如果时间较长需要自行配置Maven加速源。几个现象表明项目部署成功。class
,Run/
处显示可以运行。
④、修改srcmainl
配置文件内容,具体如下图所示:
⑤、点击启动Run/
本项目。
⑥、项目访问地址如下:
127.0.0.1:8088/login
记得自己配下端口号,默认的是80端口。
⑦、登录账号密码adminadmin123
。
基于VMware虚拟机中的搭建的Ubuntu20操作系统
注意:以下步骤需要Ubuntu系统中安装所需的软件,可参考星球之前发的一篇文章:
本项目的默认打包方式就是JAR形式。并且本项目构建为SpringBoot多模块形式。我们所需要的运行的Jar程序打包在了RuoYi-v4.2/ruoyi-admin/target
目录下。
整体部署流程如下:
①、使用IDEA打开项目,我们修改一下数据源链接地址。如下图所示:
我为了方便,将数据源直接连接到了Windows下mysql,也就是PHPstaduy一键启动的。如果你也想这样做,请注意以下几点:
GRANT ALL PRIVILEGES ON *.* ‘root’@’%’ identified by ‘root’ WITH GRANT OPTION;
flush privileges;
②、使用Maven打包项目,选择若依总项目,依次点击clean
和package
,如下图所示:
③、我们将最终生成的ruoyi-admin.jar
文件,复制粘贴到Ubuntu中。
④、在此,我们使用sudo java -jar ruoyi-admin.jar
运行项目。如下图所示:
⑤、最后我们就可以正常访问了。
⚠️注意:
java -jar
启动若依项目需要管理员权限,因此要在前面加上sudo
,如果报错说找不到命令。需要修改/etc/sudoers
文件中Defaults secure_path
位置,在后面加上java路径,如下图所示:sudo vim /etc/sudoers 打开该文件
sudo ufw disable 关闭防火墙
本项目使用Maven构建的。因此我们直接看l文件引入了哪些组件。通过IDEA打开该若依,发现本项目采用了多模块方式。因此每个模块下都会有一个l,项目最外层的l为父POM。我们可以通过External Libraries
来确定引入组件的版本,具体整理如下:
组件名称 | 组件版本 | 是否存在漏洞 |
---|---|---|
shiro | 1.4.2 | 存在 |
thymeleaf | 2.0.0 | 存在 |
druid | 1.1.14 | 不存在 |
mybatis | 1.3.2 | 不存在 |
bitwalker | 1.19 | 不存在 |
kaptcha | 2.3.2 | 不存在 |
swagger | 2.9.2 | 不存在 |
pagehelper | 1.2.5 | 不存在 |
fastjson | 1.2.60 | 存在 |
oshi | 3.9.1 | 不存在 |
commons.io | 2.5 | 存在 |
commons.fileupload | 1.3.3 | 不存在 |
poi | 3.17 | 存在 |
velocity | 1.7 | 存在 |
snakeyaml | 1.23 | 存在 |
等等。
经过整理,我们发现本项目存在漏洞的组件为:Shiro 1.4.2
,Thymeleaf 2.0.0
,Fastjson 1.2.60
,Commons.io 2.5
,oi 3.17
,velocity 1.7
,snakeyaml 1.23
…
通过版本号进行初步判断后,我们还需再进一步验证。
针对存在漏洞的组件进行代码审计
本项目使用了Shiro 1.4.2
。Shiro在 1.4.2 到 1.8.0
版本都是存在权限绕过的问题。
在代码审计中,我们主要关注Shiro配置文件
,一般文件名为ShiroConfig
。本项目Shiro配置文件位于RuoYi-v4.2ruoyi-frameworksrcmainjavacomruoyiframeworkconfigShiroConfig.java
。
进入Shiro配置文件,我们关注对资源访问的拦截器配置,位于第231行 ~ 276行
。发现第272行
作者使用了/**
表达式,对路径进行拦截。因此,本项目不存在Shiro权限绕过的漏洞的。如下图所示:
关于shiro的拦截匹配模式,Shiro的URL路径表达式为Ant格式有如下解释:
/hello:只匹配url,比如
/h?:只匹配url,比如 +任意一个字符
/hello/*:匹配url下,比如 的任意内容,不匹配多个路径
/hello/**:匹配url下,比如 的任意内容,匹配多个路径
本项目使用了Fastjson 1.2.60
,Fastjson <= 1.2.68
都是存在漏洞的。
已确定了Fastjson版本存在问题,进一步寻找触发Fastjson的漏洞点。我们关注两个函数parse
和parseObject
。
搜索关键字发现本项目使用了parseObject
,如下图所示:
本文发布于:2024-01-31 09:49:37,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170666578027645.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |