RmiTaste源码浅析及实战运用
字数 1358 2025-08-09 15:23:15
RmiTaste工具深度解析与实战应用指南
一、工具概述
RmiTaste是一款用于检测、枚举、交互和攻击RMI服务的强大工具,主要功能包括:
- 连接检测:验证目标RMI服务是否可达
- 服务枚举:发现目标主机中的RMI服务
- 漏洞攻击:利用ysoserial中的序列化链进行攻击
- 方法调用:调用远程服务上的特定方法
二、工具架构分析
1. 目录结构
helpers/ # 辅助工具类
|- IO读写类
|- 命令行参数解析类
rmitaste/ # 核心代码
|- commands/ # 四种命令的实现
|- rmi/ # 远程连接处理类
|- utils/ # 日志工具类
|- Main.java # 入口文件
2. 核心类继承关系
所有命令类都继承自BasicCommand基类,包含四个主要命令类:
ConnectionCommand- 连接检测EnumerateCommand- 服务枚举AttackCommand- 漏洞攻击CallCommand- 方法调用
三、核心功能实现原理
1. 连接检测实现
Registry reg = LocateRegistry.getRegistry(host, port);
2. 服务枚举实现
核心流程:
Enumerate enumerate = new Enumerate(target, port);
enumerate.enumerate();
RmiRegistry rmiRegistry = enumerate.getRegistry();
详细执行步骤:
- 建立连接:获取Registry对象
- 加载对象:
- 调用
list()获取服务名列表 - 通过改造的
lookup()方法获取服务详情
- 调用
- 加载对象引用:获取远程对象引用
关键技术点:自定义反序列化
原生lookup()的问题:
- 直接使用
readObject()反序列化 - 需要classpath中存在目标类
RmiTaste的解决方案:
- 通过反射获取输入流字节数据
- 使用
RmiObjectParser自定义解析 - 将类信息保存为
RmiObjectClass对象 - 避免直接使用
Class.forName
3. 漏洞攻击实现
攻击流程:
Attack attack = new Attack(rmiRegistry, payloadGenerator);
attack.attackRegistry(methodsList);
RemoteRef.invoke();
支持多种攻击模式:
- 调用单个方法
- 从文件读取多个方法
- 批量执行绑定类方法
- 使用ysoserial所有payload或指定payload
4. 方法调用实现
Attack attack = new Attack(rmiRegistry);
Object result = attack.invokeMethod(elements.get(2), elements.get(3), elements.get(4), params);
四、实战问题与解决方案
Bug 1: 大长度字符串解析问题
现象:
- 解析classAnnotations时,长度值转为short后变为负数
- 导致无法创建byte数组
原因分析:
- classAnnotation中字符串长度可能超过short最大值(32767)
- 工具使用
getShort()读取两字节长度
解决方案:
添加getBigShort()方法直接转为int:
private Integer getBigShort() {
Integer r = (Integer)(((this.getByte() << 8) & 0xFF00) | (this.getByte() & 0xFF));
return r;
}
Bug 2: 无限循环问题
现象:
parseClassAnnotation()使用while(true)循环- 数据读取完毕后getByte()返回-1导致异常
解决方案:
在循环中添加-1判断:
while(true){
b = this.getByte();
if(b == -1 || b == TC_ENDBLOCKDATA){
break;
}
// ...其他处理
}
五、Jira漏洞检测实战
检测流程
- 连接目标Jira的40001端口
- 枚举RMI服务
- 分析服务暴露的方法
- 构造恶意序列化payload
- 发起攻击
注意事项
- 确保目标类在classpath中才能获取完整方法信息
- 对于大型Annotation数据需要特殊处理
- 使用SerializationDumper等工具辅助分析序列化数据
六、工具增强建议
- 增加对大长度字符串的完整支持
- 完善异常处理机制
- 添加对更多RMI特性的支持
- 优化性能,特别是处理大型Annotation时
七、参考工具
- SerializationDumper:序列化数据流分析工具
- ysoserial:Java反序列化漏洞利用工具集
通过深入理解RmiTaste的实现原理和实战中遇到的问题,可以更有效地利用该工具进行RMI服务安全检测和漏洞利用。