JavaWeb代码审计中【SQL注入漏洞】的进进出出,@你进来学习。
正在按部就班,循序渐进
火热练习ing......
下文配套的练习环境版本
可从文末处获取。
一、项目简介
RuoYi 是一个 Java EE 企业级快速开发平台,基于经典技术组合(Spring Boot、Apache Shiro、MyBatis、Thymeleaf、Bootstrap),内置模块如:部门管理、角色用户、菜单及按钮授权、数据权限、系统参数、日志管理、通知公告等。在线定时任务配置;支持集群,支持多数据源,支持分布式事务。
内置功能详解如下:
用户管理:用户是系统操作者,该功能主要完成系统用户配置。
部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。
岗位管理:配置系统用户所属担任职务。
菜单管理:配置系统菜单,操作权限,按钮权限标识等。
角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。
字典管理:对系统中经常使用的一些较为固定的数据进行维护。
参数管理:对系统动态配置常用参数。
通知公告:系统通知公告信息发布维护。
操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。
登录日志:系统登录日志记录查询包含登录异常。
在线用户:当前系统中活跃用户状态监控。
定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。
代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。
系统接口:根据业务代码自动生成相关的api接口文档。
服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。
缓存监控:对系统的缓存查询,删除、清空等操作。
在线构建器:拖动表单元素生成相应的HTML代码。
连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。
若依官方网站:
http://www.ruoyi.vip/
二、项目搭建
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
文件无报错,项目代码已编译为class
,Run/Debug Configurations...
处显示可以运行。
⑤、点击启动Run/Debug Configurations...
本项目。
记得自己配下端口号,默认的是80端口。
⑦、登录账号密码admin\admin123
。
3、Linux环境的项目部署流程
基于VMware虚拟机中的搭建的Ubuntu20操作系统
注意:以下步骤需要Ubuntu系统中安装所需的软件,可参考星球之前发的一篇文章:https://t.zsxq.com/Ea6qF6Y
本项目的默认打包方式就是JAR形式。并且本项目构建为SpringBoot多模块形式。我们所需要的运行的Jar程序打包在了RuoYi-v4.2/ruoyi-admin/target
目录下。
整体部署流程如下:
我为了方便,将数据源直接连接到了Windows下的Mysql,也就是PHPstaduy一键启动的。如果你也想这样做,请注意以下几点:
宿主机和虚拟机需要在同一网段下,简单来说就是能互相ping通。
Mysql启用远程访问,命令如下:
GRANT ALL PRIVILEGES ON *.* ‘root’@’%’ identified by ‘root’ WITH GRANT OPTION;
flush privileges;
②、使用Maven打包项目,选择若依总项目,依次点击clean
和package
,如下图所示:
③、我们将最终生成的ruoyi-admin.jar
文件,复制粘贴Vmware虚拟中的Ubuntu桌面。
④、下一步,我们打开命令行,CD进入Desktop,使用sudo java -jar ruoyi-admin.jar
运行项目。启动成功如下图所示:
⑤、最后我们就可以正常访问了。
⚠️注意:
java -jar
启动若依项目需要管理员权限,因此要在前面加上sudo
,如果报错说找不到命令。需要修改/etc/sudoers
文件中Defaults secure_path
位置,在后面加上java路径,如下图所示:
sudo vim /etc/sudoers 打开该文件
如果想要在其他环境中访问ruoyi,需要关闭防火墙,或者激活特定端口。偷个懒,直接关闭防火墙。
sudo ufw disable 关闭防火墙
三、SQL注入漏洞代码审计
3.1、SQL注入漏洞代码审计
单点漏洞代码审计首当其冲当然要先看SQL注入漏洞是否存在,全局搜索关键字$
,并限定文件类型为.xml
,发现sysDeptMapper.xml
、sysUserMapper.xml
等文件均有存在SQL注入的地方,如下图所示:
挑个幸运的Mapper小伙伴,追踪下流程,找到他的注入点。
那就选择SysRoleMapper.xml
这个吧(只因刚刚搜索结果他们没在一起),如下图所示:
开始追踪......
①、点击进入SysRoleMapper.xml
,SQL注入点在第58行,使用$
直接拼接了参数,如下图所示:
②、点击左侧箭头快速跳转到DAO层(IDEA中需要安装Free Mybatis plugin插件),如下图所示:
③、键盘按住Ctrl加鼠标左键,点击selectRoleList
,查看谁调用了它。最终来到SysRoleServiceImpl
的实现层,如下图所示:
④、进入SysRoleServiceImpl
后,再回溯到SysRoleService
层,可使用左侧快速跳转按钮。或者选中selectRoleList
后使用快捷键ctrl+u
,如下图所示:
⑤、键盘按住Ctrl加鼠标左键,点击selectRoleList
,回溯到Controller
层,最终发现是SysRoleController
调用了这个方法,如下图所示:
⑥、点击进入,最终定位到src\main\java\com\ruoyi\web\controller\system\SysRoleController.java
,第58行和第68行都有调用,如下图所示:
⑦、键盘按住Ctrl加鼠标左键,点击SysRole
,进入看看定义了哪些实体类,其中发现了DataScope
,如下图所示:
⑧、回顾追溯流程
回顾下整理流程,如下所示:
sysRoleMapper.xml -> SysRoleMapper.java -> SysRoleServiceImpl.java -> ISysRoleService.java -> SysRoleController.java
简单说,我们从XxxxMapper
文件追踪到Controller
层,主要就是在找漏洞入口。顺带看看整个流程是否对参数有特殊处理。
⑨、汇总信息
最后,我们将追溯的过程,以及有用的信息汇总一下。
通过Controller层,我们可以知道,漏洞URL路径为
/system/role/list
通过Service层和Controller层的注释,我们大致知道该功能位于角色信息处。
大致知道这些信息后,下一步访问WEB页面,找找这个功能,并通过渗透测试验证一下。
剩下几个还存在SQL注入漏洞的地方,追溯过程留作业给你们。务必动手操作,加深印象。举一反三,形成笔记后,并提交到对应的作业处。
四、SQL注入漏洞名称验证
4.1、漏洞简述
通过代码审计,我们了解到角色相关的功能下展示角色信息列表处存在SQL注入。
访问WEB页面,发现名叫角色管理
的功能。
当然了,如果我们没有找到功能,也完全可以自己构造数据包。
4.2、漏洞验证
①、访问角色管理
功能,通过点击下面的各个按钮,并配合BurpSuite抓包,发现搜索
功能,会向/system/role/list
接口发送数据,如下图所示:
②、发送到Repeater模块,发现请求Body中没有DataScope
,没关系,我们照葫芦画瓢自己添加上,最终如下图所示:
③、输入单引号(')
,验证是否存在漏洞,发现返回了报错信息,如下图所示:
④、直接上SQLMAP,不多费时了,最终结果如下图所示:
第五套若依系统代码审计正按部就班火热练习中,本次练习真的力荐,各种高危漏洞等你学习。如果大家想循序渐进跟着学习JavaWeb代码审计,欢迎扫码加入炼石计划。
【炼石计划加入方式】
方式一
【玄说安全知识星球成员免费畅享炼石计划50套代码审计课程】
xq
方式二
现加入炼石计划知识星球价格为99元一年,自加入起计算。随着课程有序推进,价格只增不减。现在投资自己最为合适。
点击下方链接获取【前八套】练习环境
内含本文【若依管理系统】
以及前几套练习环境对应代码审计文章