从官方文档到0day挖掘思路
字数 1551 2025-08-15 21:32:28

XXL-JOB 漏洞挖掘与分析教学文档

1. 漏洞挖掘核心思想

核心原则:挖洞的本质就是信息收集

方法论

  • 从官方文档中挖掘有用信息(API利用、默认口令、硬编码等)
  • 通过源码分析发现潜在漏洞
  • 结合配置文件和实际功能验证漏洞

2. XXL-JOB 项目概述

2.1 项目功能

  • 调度平台:分布式管理平台,设置定时任务并分配给执行器
  • 主要功能
    • 执行脚本(支持Shell、Python、NodeJS、PHP、PowerShell等)
    • 提供通用命令行任务Handler("CommandJobHandler")

2.2 项目组成

  • 调度中心(xxl-job-admin):
    • 统一管理任务调度
    • 触发调度执行
    • 提供任务管理平台
  • 执行器(xxl-job-executor-sample-springboot):
    • 接收调度中心的调度并执行
    • 可直接部署或集成到现有项目中

3. 信息收集与分析

3.1 默认配置发现

  • 默认凭证:admin/123456
  • 鉴权配置xxl.job.accessToken=(默认空值,表示不启用鉴权)

3.2 API接口分析

调度中心API

  • 任务回调:/callback
  • 执行器注册:/registry
  • 执行器注册摘除:/registryRemove
  • 特点:依赖XXL-JOB-ACCESS-TOKEN进行API鉴权

执行器API(关键漏洞点)

  • 心跳检测:/beat
  • 忙碌检测:/idleBeat
  • 触发任务/run(关键漏洞接口)
  • 终止任务:/kill
  • 查看执行日志:/log

4. 漏洞发现与验证

4.1 未授权命令执行漏洞

  • 漏洞位置:执行器的/run接口

  • 利用条件

    • XXL-JOB-ACCESS-TOKEN未设置(默认空值)
    • 执行器可被外部访问
  • 利用Payload

{
  "jobId":1,
  "executorHandler":"demoJobHandler",
  "executorParams":"demoJobHandler",
  "executorBlockStrategy":"COVER_EARLY",
  "executorTimeout":0,
  "logId":1,
  "logDateTime":1586629003729,
  "glueType":"BEAN",
  "glueSource":"xxx",
  "glueUpdatetime":1586629003727,
  "broadcastIndex":0,
  "broadcastTotal":0
}
  • 关键参数说明
    • glueType:指定脚本类型(如"BEAN")
    • glueSource:实际执行的命令或脚本
    • glueUpdatetime:必须每次修改,否则会执行上次创建的任务

4.2 其他发现

  1. 固定Cookie问题

    • 默认Cookie(admin/123456)固定不变
    • 可通过中间人攻击截获后长期使用
    • 示例Cookie:
      XXL_JOB_LOGIN_IDENTITY:7b226964223a312c22757365726e616d65223a2261646d696e222c2270617373776f7264223a226531306164633339343962613539616262653536653035376632306638383365222c22726f6c65223a312c227065726d697373696f6e223a6e756c6c7d
      
  2. Token爆破可能性

    • 如果设置了XXL-JOB-ACCESS-TOKEN,可通过爆破尝试
    • 错误响应:{"code":500,"msg":"The access token is wrong."}
    • 正确响应:{"code":200}

5. 漏洞利用扩展

5.1 利用方式

  1. 直接访问执行器API执行命令
  2. 通过爆破弱Token绕过鉴权
  3. 利用固定Cookie进行持久化访问

5.2 实际利用示例

  • 构造恶意请求直接执行系统命令
  • 可上线Cobalt Strike等C2工具

6. 修复建议

6.1 临时修复方案

  • 设置强XXL-JOB-ACCESS-TOKEN字符串

6.2 彻底解决方案

  1. XXL-JOB-ACCESS-TOKEN修改为每次启动随机生成
  2. 强制修改默认凭证
  3. 实现动态Cookie机制
  4. 增加API访问的二次验证

7. 总结与思考

7.1 漏洞挖掘经验

  1. 官方文档是重要信息来源
  2. 默认配置往往是安全隐患
  3. API接口需要严格鉴权
  4. 固定凭证类问题容易被忽视

7.2 防御思路

  1. 最小权限原则
  2. 动态鉴权机制
  3. 敏感操作审计
  4. 定期安全配置检查

附录:参考资源

  • 官方文档:https://www.xuxueli.com/xxl-job/
  • GitHub仓库:https://github.com/xuxueli/xxl-job
  • Gitee仓库:http://gitee.com/xuxueli0323/xxl-job
XXL-JOB 漏洞挖掘与分析教学文档 1. 漏洞挖掘核心思想 核心原则 :挖洞的本质就是信息收集 方法论 : 从官方文档中挖掘有用信息(API利用、默认口令、硬编码等) 通过源码分析发现潜在漏洞 结合配置文件和实际功能验证漏洞 2. XXL-JOB 项目概述 2.1 项目功能 调度平台 :分布式管理平台,设置定时任务并分配给执行器 主要功能 : 执行脚本(支持Shell、Python、NodeJS、PHP、PowerShell等) 提供通用命令行任务Handler("CommandJobHandler") 2.2 项目组成 调度中心 (xxl-job-admin): 统一管理任务调度 触发调度执行 提供任务管理平台 执行器 (xxl-job-executor-sample-springboot): 接收调度中心的调度并执行 可直接部署或集成到现有项目中 3. 信息收集与分析 3.1 默认配置发现 默认凭证 :admin/123456 鉴权配置 : xxl.job.accessToken= (默认空值,表示不启用鉴权) 3.2 API接口分析 调度中心API 任务回调: /callback 执行器注册: /registry 执行器注册摘除: /registryRemove 特点 :依赖 XXL-JOB-ACCESS-TOKEN 进行API鉴权 执行器API(关键漏洞点) 心跳检测: /beat 忙碌检测: /idleBeat 触发任务 : /run (关键漏洞接口) 终止任务: /kill 查看执行日志: /log 4. 漏洞发现与验证 4.1 未授权命令执行漏洞 漏洞位置 :执行器的 /run 接口 利用条件 : XXL-JOB-ACCESS-TOKEN 未设置(默认空值) 执行器可被外部访问 利用Payload : 关键参数说明 : glueType :指定脚本类型(如"BEAN") glueSource :实际执行的命令或脚本 glueUpdatetime :必须每次修改,否则会执行上次创建的任务 4.2 其他发现 固定Cookie问题 : 默认Cookie(admin/123456)固定不变 可通过中间人攻击截获后长期使用 示例Cookie: Token爆破可能性 : 如果设置了 XXL-JOB-ACCESS-TOKEN ,可通过爆破尝试 错误响应: {"code":500,"msg":"The access token is wrong."} 正确响应: {"code":200} 5. 漏洞利用扩展 5.1 利用方式 直接访问执行器API执行命令 通过爆破弱Token绕过鉴权 利用固定Cookie进行持久化访问 5.2 实际利用示例 构造恶意请求直接执行系统命令 可上线Cobalt Strike等C2工具 6. 修复建议 6.1 临时修复方案 设置强 XXL-JOB-ACCESS-TOKEN 字符串 6.2 彻底解决方案 将 XXL-JOB-ACCESS-TOKEN 修改为每次启动随机生成 强制修改默认凭证 实现动态Cookie机制 增加API访问的二次验证 7. 总结与思考 7.1 漏洞挖掘经验 官方文档是重要信息来源 默认配置往往是安全隐患 API接口需要严格鉴权 固定凭证类问题容易被忽视 7.2 防御思路 最小权限原则 动态鉴权机制 敏感操作审计 定期安全配置检查 附录:参考资源 官方文档:https://www.xuxueli.com/xxl-job/ GitHub仓库:https://github.com/xuxueli/xxl-job Gitee仓库:http://gitee.com/xuxueli0323/xxl-job