若依CMS 4.7.x版本代码审计与分析
本文由
创作,已纳入「FreeBuf原创奖励计划」,未授权禁止转载
1.安装过程
在\src\main\resources\application-druid.yml配置数据库等信息。
代码审计与分析
主要针对的版本为4.7.6与4.7.7
4.7.6 定时任务导致的任意文件下载
此任意文件下载,需要配合定时任务来实现
在com.ruoyi.web.controller.common.resourceDownload存在任意文件下载
首先简单分析下其代码:
请求url如:http://127.0.0.1:8080/common/download/resource?resource=1.htm
跟进checkAllowDownload校验的方法,发现是白名单校验,这里htm也在名单中,所以通过
可以发现在RuoYiConfig.getProfile();获取到的路径为D:/ruoyi/uploadPath
此路径从配置文件中获取
而后面代码就是下载,在最后的writeBytes后,就是将D:/ruoyi/uploadPath写入到response中。
// 数据库资源地址 downloadPath为D:/ruoyi/uploadPath String downloadPath = localPath + StringUtils.substringAfter(resource, Constants.RESOURCE_PREFIX); // 下载名称 downloadName为uploadPath String downloadName = StringUtils.substringAfterLast(downloadPath, "/"); response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); FileUtils.setAttachmentResponseHeader(response, downloadName); FileUtils.writeBytes(downloadPath, response.getOutputStream());
但是若依有一处定时任务,该定时任务可以直接调用Bean其对应方法
而在com.ruoyi.common.config包中有一个RuoYiConfig配置类。可以看到该类是与application.yml有关联。因为在application.yml中发现了profile设置了文件下载的路径,于是乎就可以通过定时任务的set方法来对其进行更改
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
文章目录