ruoyi4.8后台RCE分析
字数 1258 2025-08-29 22:41:10
RuoYi 4.8后台RCE漏洞分析与利用教学文档
漏洞概述
RuoYi 4.8后台存在远程代码执行(RCE)漏洞,通过组合利用计划任务功能和文件上传功能,可实现任意代码执行。该漏洞利用需要知道profile目录路径。
环境搭建
- 下载RuoYi 4.8版本
- 导入数据库
- 修改配置文件:
- 修改
application-druid.yml中的数据库账号密码 - 修改
application.yml中的文件路径及log存放路径
- 修改
- 启动系统
漏洞分析
计划任务功能分析
- 路由定位:通过提交数据包锁定后端路由
- 安全校验:
- 检查是否包含
rmi、ldap、http等关键词,禁止对这些协议进行调用 - 检查是否使用了黑名单中的类
- 检查是否包含
- 白名单校验:
- 提取调用的类名,判断是否包含白名单字符串
com.ruoyi.quartz.task - 使用正则匹配,该字符串可以出现在任意位置,存在绕过可能
- 提取调用的类名,判断是否包含白名单字符串
- 任务执行流程:
- 启动任务时获取调用的类名、方法名和参数值
- 方法参数处理:只允许字符串、布尔、长整、浮点、整型,无法传递类对象
- 实例化该类并反射调用其方法(方法必须为public修饰)
利用条件
- 使用的类不在黑名单中
- 类名包含
com.ruoyi.quartz.task字符串 - 不能使用
rmi、ldap、http等协议
文件上传功能分析
- 系统存在文件上传点
- 可以上传文件名包含
com.ruoyi.quartz.task字符串的文件
漏洞利用步骤
1. 利用JNI机制
Java中存在JNI(Java Native Interface)机制,可以通过加载外部链接库执行其中的构造函数:
- 使用
com.sun.glass.utils.NativeLibLoader的loadLibrary方法(public修饰)加载链接库 - 注意:会自动添加
.dylib等后缀(不同系统后缀不同) - 需要考虑系统架构兼容性
2. 构造并上传恶意链接库
- 编译恶意链接库文件
- 上传该文件到系统
3. 修改文件名
使用RenameUtil类方法修改文件名:
- 将上传的文件名修改为包含
com.ruoyi.quartz.task字符串的名称
4. 启动计划任务
- 创建计划任务调用
NativeLibLoader.loadLibrary方法 - 指定加载修改后的恶意链接库文件
- 触发RCE执行
关键点总结
- 白名单绕过:利用正则匹配特性,确保类名中包含
com.ruoyi.quartz.task字符串 - 文件上传:上传恶意链接库文件是攻击的关键步骤
- JNI利用:通过加载本地库实现代码执行,绕过Java安全限制
- 文件名修改:使用系统提供的工具类修改文件名以满足白名单要求
- 系统兼容性:注意不同操作系统下的库文件后缀和架构差异
防御建议
- 严格限制计划任务可调用的类和方法
- 加强文件上传功能的安全检查
- 更新到最新版本的RuoYi系统
- 实施最小权限原则,限制后台功能的访问权限
- 监控系统日志,特别是计划任务和文件操作相关的日志