命令执行。

命令执行

在该项目的readme中,描述了怎么去调用的flink

通过java原生的runtime来调用flink,下一步就是去看看具体的调用过程了,是否存在可控的参数
找到具体提交命令的类方法CommandRpcClinetAdapterImpl#submitJob()

这里要确定command,是否可控,继续往上找在哪里调用了在JobBaseServiceAOImpl的submitJobForStandalone和submitJobForYarn俩个方法中都调用了submitJob,继续往上寻找哪里调用了这两个方法

在JobBaseServiceAOImpl#aSyncExecJob()方法中创建线程池的时候,正好创建了Runnable类来执行这些方法
继续往上找哪里调用了aSyncExecJob

这里的两个业务类JobStandaloneServerAOImpl和JobYarnServerAOImpl分别对应提交任务到本地,或者是远程Yarn服务,这里主要看本地的,远程Yarn需要配置,不好满足利用条件

在JobStandaloneServerAOImpl#start()中调用了aSyncExecJob,对应的controller层就是在JobConfigApiController#start()方法中
所以这里如果要测试的话就需要通过上面的绕过权限校验来创建一个额外的用户登录

创建一个新的jar包任务

 这里的jar包是可以通过后台的第三方jar包管理上传的(仅作为文件使用,并不能解析),开启任务之后直接启动,进入start方法

getJobServerAO(id)根据id返回对应处理任务的类,进入JobStandaloneServerAOImpl#start

根据id返回对应的配置信息包含在JobConfigDTO类中
后续就是根据配置信息做一些处理,任务执行情况,参数是否合法,插入日志信息等

这里需要注意下writeSqlToFile()方法,在这个方法里面,把一些系统配置(flink的路径,项目的配置路径等信息,yran的地址,flink的地址)设置到了返回值中,后续需要使用,所以这里有利用前提,需要配置了系统的信息之后才会有这个rce的漏洞,不过在搭建环境的时候就需要配置这些系统信息,否则大部分的功能无法使用

系统信息

 

进入aSyncExecJob方法

这里没有使用到nacos,跳过第一个if,直接进入Runnable#run()方法

配置了一些输出的日志信息之后,设置jar包下载地址

在downJar(jobRunParamDTO, jobConfigDTO)中下载了对应的远程jar包
所以这里也算有一个ssrf,不过没什么太大的危害
然后进入到switch语句中,因为设置的是单机模式,所以进入STANDALONE中

 在getFlinkAddress对flink_rest_http_address这个系统配置进行存活校验

进入buildRunCommandForCluster,创建执行flink的命令

先配置flink的可执行目录加上run -d
再根据address,savepointPath,是否为STANDALONE模式,存在第三方jar包等加入对应的命令

进入switch的JAR case中,这里就是在配置任务的时候设置的需要执行的类,这里就是外部可以控制的参数了
所以整体执行的命令是:
/javaTocms/flink-1.9.0/bin/flink run -d -c org.example.Main /javaTocms/tmp/udf_jar/evaljAR.jar
修改org.example.Main为需要执行的命令就可以了
回到submitJobForStandalone方法中

进入submitJob,提交命令

 

执行命令完成 

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

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

相关文章

C++-6

使用模板类&#xff0c;实现顺序栈。 #include <iostream>using namespace std; template <typename T> class Seqlite {T data[30];int len0; public:void head_inst(T date);void head_dele();void show(); }; template <typename T> …

Phi-3-mini-4k-instruct 的功能测试

Model card 介绍 Phi-3-Mini-4K-Instruct 是一个 3.8B 参数、轻量级、最先进的开放模型&#xff0c;使用 Phi-3 数据集进行训练&#xff0c;其中包括合成数据和经过过滤的公开可用网站数据&#xff0c;重点是 高品质和推理密集的属性。 该型号属于 Phi-3 系列&#xff0c;Mini…

Django框架之ORM操作

一、选择数据库 1、默认数据库 Django默认的数据库是sqlite3数据库 DATABASES {default: {ENGINE: django.db.backends.sqlite3,NAME: BASE_DIR / db.sqlite3,} }2、指定数据库 修改连接到MySQL数据库 DATABASES {default: {ENGINE: django.db.backends.mysql,# 数据库名…

一、安装Redis并运行

Windows安装Redis 1.打开网址下载 下载地址&#xff1a;https://github.com/tporadowski/redis/releases。 Redis 支持 32 位和 64 位。这个需要根据你系统平台的实际情况选择 我选择的是 然后一步步安装 可以参考&#xff1a;https://blog.csdn.net/zbx931197485/article/d…

李廉洋:4.29黄金原油最新走势分析,做单必看策略,

传统定价框架下&#xff0c;黄金兼具货币、商品和金融三重属性&#xff0c;对应货币、抗通胀和避险价值&#xff0c;因此通常与美元、美债利率反向变动。但近期这一定价规律“失灵”了&#xff0c;黄金、利率和美元同涨。三者同涨后&#xff0c;一个月后续转为下跌的频率超过一…

【JS】节流与防抖技术

JavaScript: 节流与防抖技术 当用户进行滚动、调整窗口大小或进行频繁的键盘输入时&#xff0c;页面上的某些事件处理器可能会被频繁触发。如果每次事件触发都执行函数&#xff0c;可能会对性能产生显著影响。在这种情况下&#xff0c;我们可以利用节流&#xff08;Throttle&a…

JS - 以工厂模式和原型模式方式建造对象、JS的垃级回收机制、数组的使用

创建对象的方式 使用工厂方法来建造对象 在JS中我们可以通过以下方式进行创建对象&#xff1a; var obj {name:"孙悟空",age:18,gender:"男",sayName:function(){alert(this.name);}};var obj2 {name:"猪八戒",age:28,gender:"男",…

Glide添加token和userId

方法一&#xff1a; GlideUrl glideUrl new GlideUrl(url, new LazyHeaders.Builder().addHeader("userId", userId).addHeader("token", token).build());FutureTarget<File> target Glide.with(context).asFile().load(glideUrl).submit(); 方法…

【Java EE】总结12种锁策略以及synchronized的实现原理

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…

基于yolov5实时实例分割

是一个结合了最新技术进展&#xff08;State-of-the-Art, SOTA&#xff09;的实时实例分割项目&#xff0c;基于著名的YOLOv5目标检测架构&#xff0c;并对其进行扩展以实现对图像中每个对象实例的精确像素级分割。以下是该项目的中文介绍&#xff1a; YOLOv5&#xff1a; YOL…

精选20个大模型高频面试题

我精选20个大模型高频面试题&#xff0c;分享给大家 简述GPT和BERT的区别讲一下GPT系列模型是如何演进的&#xff1f;为什么现在的大模型大多是decoder-only的架构&#xff1f;讲一下生成式语言模型的工作机理哪些因素会导致LLM的偏见&#xff1f;LLM中的因果语言建模与掩码语…

代码随想录算法训练营第五十五天|392.判断子序列、115.不同的子序列

动态规划 文章目录 一、判断子序列二、不同的子序列总结 一、判断子序列 和之前的公共子序列相同&#xff0c;增加一个判断序列长度是否等于字串长度的操作即可 class Solution { public:bool isSubsequence(string s, string t) {//保持相对位置vector<vector<int>…

Java后端利用百度地图全球逆地理编码,获取地址

声明&#xff1a;本人是在实习项目的时候遇到的问题 一.使用Api分为四步骤全球逆地理编码 rgc 反geo检索 | 百度地图API SDK 步骤1,2自行完成 接下来去获取AK 二.申请AK 登录百度账号 点击创建应用&#xff0c;选择自己想用的服务&#xff0c;我只单选了逆地理编码&#xff…

【ARMv9 DSU-120 系列 9.2 -- Cluster 和 Cores CTI 详细介绍】

请阅读【Arm DynamIQ™ Shared Unit-120 专栏 】 文章目录 DebugBlock subcomponentsARM DSU_120 CTI外部 interfaceCTI input triggers from each PECTI output triggers from each PEAllocation of cluster CTI trigger inputsAllocation of cluster CTI trigger outputsDebu…

2024年创业意识培训考试题库及答案

一、选择题 11.不属于你企业优势的是&#xff08;&#xff09;。 A.产品同质化 B.产品差异化 C.产品品牌化 D.产品个性化 答案&#xff1a;A 12.一个人的工作经验、&#xff08;&#xff09;、企业实践经验、爱好、社会交往和家庭背景等对于企业成功都是很重要的因素。 …

go语言实现简单认证样例

目录 1、代码实现样例 2、postman调用 1、代码实现样例 package mainimport ("net/http""strings""github.com/dgrijalva/jwt-go""github.com/gin-gonic/gin" )var (// 密钥&#xff0c;用于验证 JWT 令牌signingKey []byte("…

golang变量常见问题总结

文章目录 1. 值类型和引用类型都有哪些2. 值类型和引用类型的区别3. 变量是否等于nil4. 能否进行等值比较5. 能否不分配内存直接添加元素 1. 值类型和引用类型都有哪些 值类型&#xff1a;int&#xff0c;string&#xff0c;bool&#xff0c;float&#xff0c;数组&#xff0c…

K8s: Prometheus 监控主机 和 K8s 集群

Prometheus 监控主机 和 K8s 集群 1 &#xff09;搭建 Prometheus 创建对应 ServiceAccount 达成角色访问的目的&#xff0c;避免所有人都能看到 创建配置相关的 configmap 定义了一堆的任务&#xff0c;收集各个层面的监控数据 创建告警规则相关的configmap 比如内存大于 75%…

【1762】java校园单车投放系统Myeclipse开发mysql数据库web结构jsp编程servlet计算机网页项目

一、源码特点 java校园单车投放管理系统是一套完善的java web信息管理系统 采用serlvetdaobean&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S 模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#…

C语言基础知识笔记——万字学习记录

Hi&#xff0c;大家好&#xff0c;我是半亩花海。本文主要参考浙大翁恺老师的C语言讲解以及其他博主的C语言学习笔记&#xff0c;进而梳理C语言的基础知识&#xff0c;为后续系统性学习数据结构和其他语言等知识夯实一定的基础。&#xff08;其他博主学习笔记的链接包括&#x…