vlambda博客
学习文章列表

JavaWeb代码审计中【SQL注入漏洞】的进进出出,@你进来学习。

嗨,朋友你好,关于JavaWeb代码审计
欢迎跟我一起来学习。
炼石计划之50套JavaWeb代码审计
第五套:若依管理系统某版本
第六套:任务调度系统
第七套:OFCMS
第八套:企业级报表平台
第九套:JPress

正在按部就班,循序渐进

火热练习ing......




下文配套的练习环境版本

可从文末处获取。


一、项目简介

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找出系统性能瓶颈。

若依官方网站:
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文件无报错,项目代码已编译为classRun/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目录下。

整体部署流程如下:

JavaWeb代码审计中【SQL注入漏洞】的进进出出,@你进来学习。

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

  • 宿主机和虚拟机需要在同一网段下,简单来说就是能互相ping通。

  • Mysql启用远程访问,命令如下:

GRANT ALL PRIVILEGES ON *.*  ‘root’@’%’ identified by ‘root’ WITH GRANT OPTION; 
flush privileges;

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

JavaWeb代码审计中【SQL注入漏洞】的进进出出,@你进来学习。

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

④、下一步,我们打开命令行,CD进入Desktop,使用sudo java -jar ruoyi-admin.jar运行项目。启动成功如下图所示:

JavaWeb代码审计中【SQL注入漏洞】的进进出出,@你进来学习。


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

⚠️注意:

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

sudo vim /etc/sudoers 打开该文件
  • 如果想要在其他环境中访问ruoyi,需要关闭防火墙,或者激活特定端口。偷个懒,直接关闭防火墙。

sudo ufw disable 关闭防火墙

三、SQL注入漏洞代码审计

3.1、SQL注入漏洞代码审计

单点漏洞代码审计首当其冲当然要先看SQL注入漏洞是否存在,全局搜索关键字$,并限定文件类型为.xml,发现sysDeptMapper.xmlsysUserMapper.xml等文件均有存在SQL注入的地方,如下图所示:

JavaWeb代码审计中【SQL注入漏洞】的进进出出,@你进来学习。

挑个幸运的Mapper小伙伴,追踪下流程,找到他的注入点。

那就选择SysRoleMapper.xml这个吧(只因刚刚搜索结果他们没在一起JavaWeb代码审计中【SQL注入漏洞】的进进出出,@你进来学习。),如下图所示:

JavaWeb代码审计中【SQL注入漏洞】的进进出出,@你进来学习。


开始追踪......


①、点击进入SysRoleMapper.xml,SQL注入点在第58行,使用$直接拼接了参数,如下图所示:

JavaWeb代码审计中【SQL注入漏洞】的进进出出,@你进来学习。

②、点击左侧箭头快速跳转到DAO层(IDEA中需要安装Free Mybatis plugin插件),如下图所示:

JavaWeb代码审计中【SQL注入漏洞】的进进出出,@你进来学习。

③、键盘按住Ctrl加鼠标左键,点击selectRoleList,查看谁调用了它。最终来到SysRoleServiceImpl的实现层,如下图所示:

JavaWeb代码审计中【SQL注入漏洞】的进进出出,@你进来学习。

④、进入SysRoleServiceImpl后,再回溯到SysRoleService层,可使用左侧快速跳转按钮。或者选中selectRoleList后使用快捷键ctrl+u,如下图所示:

JavaWeb代码审计中【SQL注入漏洞】的进进出出,@你进来学习。


JavaWeb代码审计中【SQL注入漏洞】的进进出出,@你进来学习。

⑤、键盘按住Ctrl加鼠标左键,点击selectRoleList,回溯到Controller层,最终发现是SysRoleController调用了这个方法,如下图所示:

JavaWeb代码审计中【SQL注入漏洞】的进进出出,@你进来学习。

⑥、点击进入,最终定位到src\main\java\com\ruoyi\web\controller\system\SysRoleController.java,第58行和第68行都有调用,如下图所示:

JavaWeb代码审计中【SQL注入漏洞】的进进出出,@你进来学习。

⑦、键盘按住Ctrl加鼠标左键,点击SysRole,进入看看定义了哪些实体类,其中发现了DataScope,如下图所示:

JavaWeb代码审计中【SQL注入漏洞】的进进出出,@你进来学习。

⑧、回顾追溯流程

回顾下整理流程,如下所示:


sysRoleMapper.xml -> SysRoleMapper.java -> SysRoleServiceImpl.java -> ISysRoleService.java -> SysRoleController.java

JavaWeb代码审计中【SQL注入漏洞】的进进出出,@你进来学习。

简单说,我们从XxxxMapper文件追踪到Controller层,主要就是在找漏洞入口。顺带看看整个流程是否对参数有特殊处理。

⑨、汇总信息

最后,我们将追溯的过程,以及有用的信息汇总一下。

  • 通过Controller层,我们可以知道,漏洞URL路径为/system/role/list

  • 通过Service层和Controller层的注释,我们大致知道该功能位于角色信息处。

大致知道这些信息后,下一步访问WEB页面,找找这个功能,并通过渗透测试验证一下。

剩下几个还存在SQL注入漏洞的地方,追溯过程留作业给你们。务必动手操作,加深印象。举一反三,形成笔记后,并提交到对应的作业处。

四、SQL注入漏洞名称验证

4.1、漏洞简述

通过代码审计,我们了解到角色相关的功能下展示角色信息列表处存在SQL注入。

访问WEB页面,发现名叫角色管理的功能。

当然了,如果我们没有找到功能,也完全可以自己构造数据包。

4.2、漏洞验证

①、访问角色管理功能,通过点击下面的各个按钮,并配合BurpSuite抓包,发现搜索功能,会向/system/role/list接口发送数据,如下图所示:

JavaWeb代码审计中【SQL注入漏洞】的进进出出,@你进来学习。

②、发送到Repeater模块,发现请求Body中没有DataScope,没关系,我们照葫芦画瓢自己添加上,最终如下图所示:

JavaWeb代码审计中【SQL注入漏洞】的进进出出,@你进来学习。

③、输入单引号('),验证是否存在漏洞,发现返回了报错信息,如下图所示:

JavaWeb代码审计中【SQL注入漏洞】的进进出出,@你进来学习。

④、直接上SQLMAP,不多费时了,最终结果如下图所示:


第五套若依系统代码审计正按部就班火热练习中,本次练习真的力荐,各种高危漏洞等你学习。如果大家想循序渐进跟着学习JavaWeb代码审计,欢迎扫码加入炼石计划。

【炼石计划加入方式】

方式一

【玄说安全知识星球成员免费畅享炼石计划50套代码审计课程】

xq


方式二

现加入炼石计划知识星球价格为99元一年,自加入起计算。随着课程有序推进,价格只增不减。现在投资自己最为合适。


点击下方链接获取【前八套】练习环境


内含本文【若依管理系统】

以及前几套练习环境对应代码审计文章