JavaWeb代码审计实战之若依管理系统,细节满满的万字文章,非常值得好好进阶学习的一个系统哦!!!

本文主要是介绍JavaWeb代码审计实战之若依管理系统,细节满满的万字文章,非常值得好好进阶学习的一个系统哦!!!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言:

【如需转载,请详细表明来源,请勿设置原创】

嗨,大家好,我是闪石星曜CyberSecurity创始人Power7089。

欢迎大家搜索关注 “闪石星曜CyberSecurity” ,这里专注分享渗透测试,Java代码审计,PHP代码审计等内容,都是非常干的干货哦。

炼石计划理念:一个系统化从入门到提升学习的成长型知识星球。这里不仅注重夯实基础,更加专注实战进阶。

今天为大家带来的是一篇实战代码审计若依管理系统的一篇文章,若依管理系统也是现在比较常用的一个系统了。非常有必要好好学习研究一下。

一、项目简介

RuoYi 是一个 Java EE 企业级快速开发平台,基于经典技术组合(Spring Boot、Apache Shiro、MyBatis、Thymeleaf、Bootstrap),内置模块如:部门管理、角色用户、菜单及按钮授权、数据权限、系统参数、日志管理、通知公告等。在线定时任务配置;支持集群,支持多数据源,支持分布式事务。

内置功能详解如下:

  1. 用户管理:用户是系统操作者,该功能主要完成系统用户配置。
  2. 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。
  3. 岗位管理:配置系统用户所属担任职务。
  4. 菜单管理:配置系统菜单,操作权限,按钮权限标识等。
  5. 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。
  6. 字典管理:对系统中经常使用的一些较为固定的数据进行维护。
  7. 参数管理:对系统动态配置常用参数。
  8. 通知公告:系统通知公告信息发布维护。
  9. 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。
  10. 登录日志:系统登录日志记录查询包含登录异常。
  11. 在线用户:当前系统中活跃用户状态监控。
  12. 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。
  13. 代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。
  14. 系统接口:根据业务代码自动生成相关的api接口文档。
  15. 服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。
  16. 缓存监控:对系统的缓存查询,删除、清空等操作。
  17. 在线构建器:拖动表单元素生成相应的HTML代码。
  18. 连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。

二、项目搭建

1、环境要求

JDK >= 1.8 (推荐1.8版本)
Mysql >= 5.7.0 (推荐5.7版本)
Maven >= 3.0

2、Windows环境的项目部署流程

基于windows10操作系统。

①、命令行进入Mysql,创建数据库名为ry,并切换使用该数据库。

create datavase ry; 创建名为ry的数据库
use ry; 切换使用ry数据库

②、将项目文件中的/sql/ry_20200323.sql的数据导入到ry数据库,注意导入路径中应使用正斜杠/

source /绝对路径/sql/ry_20200323.sql; 导入数据库文件

③、使用IDEA打开本项目,等待Maven自动加载依赖项,如果时间较长需要自行配置Maven加速源。几个现象表明项目部署成功。pom.xml文件无报错,项目代码已编译为classRun/Debug Configurations...处显示可以运行。

④、修改src\main\resources\application-druid.yml配置文件内容,具体如下图所示:

在这里插入图片描述

⑤、点击启动Run/Debug Configurations...本项目。

⑥、项目访问地址如下:

  • 后台地址:http://127.0.0.1:8088/login

记得自己配下端口号,默认的是80端口。

⑦、登录账号密码admin\admin123

3、Linux环境的项目部署流程

基于VMware虚拟机中的搭建的Ubuntu20操作系统

注意:以下步骤需要Ubuntu系统中安装所需的软件,可参考星球之前发的一篇文章:https://t.zsxq.com/Ea6qF6Y

本项目的默认打包方式就是JAR形式。并且本项目构建为SpringBoot多模块形式。我们所需要的运行的Jar程序打包在了RuoYi-v4.2/ruoyi-admin/target目录下。

整体部署流程如下:

①、使用IDEA打开项目,我们修改一下数据源链接地址。如下图所示:

在这里插入图片描述

我为了方便,将数据源直接连接到了Windows下mysql,也就是PHPstaduy一键启动的。如果你也想这样做,请注意以下几点:

  • 宿主机和虚拟机需要在同一网段下,简单来说就是能互相ping通。
  • Mysql启用远程访问,命令如下:
GRANT ALL PRIVILEGES ON *.*  ‘root’@’%’ identified by ‘root’ WITH GRANT OPTION; 
flush privileges;

②、使用Maven打包项目,选择若依总项目,依次点击cleanpackage,如下图所示:

在这里插入图片描述

③、我们将最终生成的ruoyi-admin.jar文件,复制粘贴到Ubuntu中。

④、在此,我们使用sudo java -jar ruoyi-admin.jar运行项目。如下图所示:

在这里插入图片描述

⑤、最后我们就可以正常访问了。

⚠️注意:

  • java -jar启动若依项目需要管理员权限,因此要在前面加上sudo,如果报错说找不到命令。需要修改/etc/sudoers文件中Defaults secure_path位置,在后面加上java路径,如下图所示:
sudo vim /etc/sudoers 打开该文件

在这里插入图片描述

  • 如果想要在其他环境中访问ruoyi,需要关闭防火墙,或者激活特定端口。偷个懒,直接关闭防火墙。
sudo ufw disable 关闭防火墙

三、代码审计漏洞挖掘

1、第三方组件漏洞审计

本项目使用Maven构建的。因此我们直接看pom.xml文件引入了哪些组件。通过IDEA打开该若依,发现本项目采用了多模块方式。因此每个模块下都会有一个pom.xml,项目最外层的pom.xml为父POM。我们可以通过pom.xml或者External Libraries来确定引入组件的版本,具体整理如下:

组件名称组件版本是否存在漏洞
shiro1.4.2存在
thymeleaf2.0.0存在
druid1.1.14不存在
mybatis1.3.2不存在
bitwalker1.19不存在
kaptcha2.3.2不存在
swagger2.9.2不存在
pagehelper1.2.5不存在
fastjson1.2.60存在
oshi3.9.1不存在
commons.io2.5存在
commons.fileupload1.3.3不存在
poi3.17存在
velocity1.7存在
snakeyaml1.23存在

等等。

经过整理,我们发现本项目存在漏洞的组件为:Shiro 1.4.2Thymeleaf 2.0.0Fastjson 1.2.60Commons.io 2.5oi 3.17velocity 1.7snakeyaml 1.23

通过版本号进行初步判断后,我们还需再进一步验证。

2、组件漏洞代码审计

针对存在漏洞的组件进行代码审计

2.1、Shiro组件漏洞代码审计

本项目使用了Shiro 1.4.2。Shiro在 1.4.2 到 1.8.0版本都是存在权限绕过的问题。

在代码审计中,我们主要关注Shiro配置文件,一般文件名为ShiroConfig。本项目Shiro配置文件位于RuoYi-v4.2\ruoyi-framework\src\main\java\com\ruoyi\framework\config\ShiroConfig.java

进入Shiro配置文件,我们关注对资源访问的拦截器配置,位于第231行 ~ 276行。发现第272行作者使用了/**表达式,对路径进行拦截。因此,本项目不存在Shiro权限绕过的漏洞的。如下图所示:

在这里插入图片描述

关于shiro的拦截匹配模式,Shiro的URL路径表达式为Ant格式有如下解释:

/hello:只匹配url,比如 http://7089.com/hello
/h?:只匹配url,比如 http://7089.com/h+任意一个字符
/hello/*:匹配url下,比如 http://7089.com/hello/xxxx 的任意内容,不匹配多个路径
/hello/**:匹配url下,比如 http://7089.com/hello/xxxx/aaaa 的任意内容,匹配多个路径
2.2、Fastjson组件漏洞代码审计

本项目使用了Fastjson 1.2.60Fastjson <= 1.2.68都是存在漏洞的。

已确定了Fastjson版本存在问题,进一步寻找触发Fastjson的漏洞点。我们关注两个函数parseparseObject

搜索关键字发现本项目使用了parseObject,如下图所示:

这篇关于JavaWeb代码审计实战之若依管理系统,细节满满的万字文章,非常值得好好进阶学习的一个系统哦!!!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/563878

相关文章

Java图片压缩三种高效压缩方案详细解析

《Java图片压缩三种高效压缩方案详细解析》图片压缩通常涉及减少图片的尺寸缩放、调整图片的质量(针对JPEG、PNG等)、使用特定的算法来减少图片的数据量等,:本文主要介绍Java图片压缩三种高效... 目录一、基于OpenCV的智能尺寸压缩技术亮点:适用场景:二、JPEG质量参数压缩关键技术:压缩效果对比

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

Java利用docx4j+Freemarker生成word文档

《Java利用docx4j+Freemarker生成word文档》这篇文章主要为大家详细介绍了Java如何利用docx4j+Freemarker生成word文档,文中的示例代码讲解详细,感兴趣的小伙伴... 目录技术方案maven依赖创建模板文件实现代码技术方案Java 1.8 + docx4j + Fr

SpringBoot首笔交易慢问题排查与优化方案

《SpringBoot首笔交易慢问题排查与优化方案》在我们的微服务项目中,遇到这样的问题:应用启动后,第一笔交易响应耗时高达4、5秒,而后续请求均能在毫秒级完成,这不仅触发监控告警,也极大影响了用户体... 目录问题背景排查步骤1. 日志分析2. 性能工具定位优化方案:提前预热各种资源1. Flowable

基于SpringBoot+Mybatis实现Mysql分表

《基于SpringBoot+Mybatis实现Mysql分表》这篇文章主要为大家详细介绍了基于SpringBoot+Mybatis实现Mysql分表的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录基本思路定义注解创建ThreadLocal创建拦截器业务处理基本思路1.根据创建时间字段按年进

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整