前提提要
两个月前审计过RuoYi4.7.0漏洞的成因,从漏洞提交直接分析,但这样的分析让我感到远远不够,我还是不特别明白这个漏洞完整的造成原因。所以我打算进一步的去审计相关代码,但没想到因为中间参加了工作、面试、审计的难度,种种原因,让这篇文章这么久才发布~(真不是因为我懒啊啊啊啊),如果没有看过第一篇的朋友,可以前往链接RuoYi4.7.0漏洞复现与通读审计——(定时任务)任意文件下载
正式开始
首先前面的两个坑点交代一下:
1.profile赋值是怎么做到的,其实就是如何让调用字符串中的函数进行执行的
2.C://Users//luche//Desktop//1.txt1.txt为什么最后变成了C://Users//luche//Desktop//1.txt
文章开始前可以公布一下答案:第一个问题解决了,第二个问题还没找出原因~
好了,让我们开始吧,走入代码的海洋!!!
首先抓取调用定时函数的包
当我们点击确定后,通过抓包软件,知道了他是调用该接口的包,调用了这三个接口。
也可以通过IDEA软件内,看到调用了哪个接口,然后直接复制进行全局搜索。
知道了以后我们就通过追踪该路径,D:\RuoYi-v4.7.0\ruoyi-quartz\src\main\java\com\ruoyi\quartz\controller\SysJobController.java
最后追踪位置就是SysJobController.java文件,证据如下:
在该文件中找到关于定时任务的那一部分:
我们首先要找到,定时任务的传参,因为要知道是从哪里接收的一个具体参数嘛。
很多小白师傅可能没见过editSave(@Validated SysJob job) 这样的写法,我也没见过,那么经过我的查询以后
其实很好理解,意思就是声明了一个SysJob job的一个变量。
要是还不能理解,大家是否理解Sysjob job = new SysJob(),这段语句的意义是声明并初始化变量job
这里Sysjob类是自定义的。
而@Validated 是 Spring Framework 提供的注解,用来传入的对象合法性
现在我们就要解决两个问题:
1.那么这里配合使用的注解在哪呢?进行了怎样的清洗?
2.查看这个job参数是怎么来的?
首先我们查到了,本段代码中有引用com.ruoyi.quartz.domain.SysJob;
那么我们就进一步跳转到SysJob类型声明的地方
可以看到,这里写了Sysjob具体的定义,以及配合@Validated使用的注释@Size、@NotBlank。
值得注意的是@Excel并不是。
@NotBlank注释的作用是保证传入的字符不为空。
@Size注释的作用则是限制输入的长度。
那么我们一一整理:
总结一下就是:
1.参数jobName invokeTarget cronExpression这三个参数不能为空,这三个参数分别对应任务名称、调用目标字符串、Cron执行表达式不能为空
2.其中任务名称不能超过64个字符,调用目标字符串不能超过1000个字符,Cron执行表达式不能超过255个字符
为了直观的展示,我们退出SysJob.java文件,回到SysJobController.java直接开启调试。
在新增的时候:
job接收到的参数有:
可以发现这些值和上面刚刚说的完全是一致的,代表我们的文件没有找错~
misfirePolicy、concurrent、status三个值中的1和0的意思是:
该代码段位于:D:\RuoYi-v4.7.0\ruoyi-quartz\src\main\java\com\ruoyi\quartz\domain\SysJob.java-- 上面有提过,引用了该代码
总结一下,job收到了哪些参数:
invokeTarget:调用目标字符串
cronExpression:cron表达式
misfirePolicy:执行策略(0默认、1立即触发执行、2触发一次执行、3不触发立即执行)
concurrent:并发执行(1允许、2禁止)
status:状态(1启动、2暂停)
remark:备注
我们其实重点要关注的只有一个字段:invokeTarget,调用目标字符串的字段
关于参数是怎么传到job中的,这不是我们本次研究需要关注的重点,所以可以
4A评测 - 免责申明
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!
程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。
侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)