ysoserial JRMP相关模块分析(三)- exploit/JRMPClient
字数 1081 2025-08-27 12:33:22

ysoserial JRMP相关模块分析(三)- exploit/JRMPClient 教学文档

一、模块概述

exploit/JRMPClient是ysoserial工具中针对Java RMI中DGC(Distributed Garbage Collection)模块的利用工具。与RMIRegistryExploit不同,它主要针对RMI中的DGC模块而非Registry模块。

主要特点:

  1. 仅作为JRMP客户端存在,只发送数据不接收数据
  2. 不会反序列化任何来自服务端的数据,避免被反打
  3. 适用于任何启动了DGC的RMI服务

二、使用方式

基本命令格式:

java -cp ysoserial.jar ysoserial.exploit.JRMPClient <host> <port> <payload_type> <command>

示例:

java -cp ysoserial.jar ysoserial.exploit.JRMPClient vps_ip port CommonsCollections1 'calc.exe'

三、技术原理分析

1. 工作流程

  1. 生成payload对象
  2. 调用makeDGCCall函数
  3. 与目标服务端进行协议通信

2. 协议通信过程

通信过程由DGCImpl_Skel.dispatch函数处理,关键点:

  1. 通信开始时,客户端会发送一个特定的long值:-66919625358661813
  2. 服务端处理流程:
    • UnicastServerRef.dispatchUnicastServerRef.oldDispatchDGCImpl_Skel.dispatch

3. 反序列化触发点

DGCImpl_Skel.dispatch中:

  1. 首先读取var3(值为1)
  2. 然后读取var4(长整型数值)
  3. 最后读取payload对象进行反序列化

当var3的值为1时,会进入以下处理分支:

case 1:
    // 这里会触发反序列化
    var5 = var1.readObject();
    // ...其他处理...
    break;

四、典型利用场景

1. 与payloads/JRMPListener配合使用

  1. 先使用payloads/JRMPListener在目标服务器上开启JRMP监听
  2. 再使用exploit/JRMPClient向目标发送恶意payload

注意payloads/JRMPListener可能存在稳定性问题,监听端口有时会失败。

2. 直接攻击RMI服务

由于所有启动了监听的RMI服务都包含DGC模块,因此可以直接攻击:

java -cp ysoserial.jar ysoserial.exploit.JRMPClient target_ip rmi_port payload_type command

五、防御建议

  1. 限制RMI服务的网络访问
  2. 更新Java版本,修复已知反序列化漏洞
  3. 使用安全管理器限制反序列化操作
  4. 监控异常的网络连接和反序列化操作

六、总结

exploit/JRMPClient是一个专门针对RMI DGC模块的利用工具,相比Registry利用工具具有以下优势:

  1. 适用范围更广(所有RMI服务都包含DGC)
  2. 更安全(只发送不接收数据)
  3. 利用条件相对宽松

理解其工作原理有助于更好地防御此类攻击,同时也能在渗透测试中更有效地利用该工具。

ysoserial JRMP相关模块分析(三)- exploit/JRMPClient 教学文档 一、模块概述 exploit/JRMPClient 是ysoserial工具中针对Java RMI中DGC(Distributed Garbage Collection)模块的利用工具。与 RMIRegistryExploit 不同,它主要针对RMI中的DGC模块而非Registry模块。 主要特点: 仅作为JRMP客户端存在,只发送数据不接收数据 不会反序列化任何来自服务端的数据,避免被反打 适用于任何启动了DGC的RMI服务 二、使用方式 基本命令格式: 示例: 三、技术原理分析 1. 工作流程 生成payload对象 调用 makeDGCCall 函数 与目标服务端进行协议通信 2. 协议通信过程 通信过程由 DGCImpl_Skel.dispatch 函数处理,关键点: 通信开始时,客户端会发送一个特定的long值: -66919625358661813 服务端处理流程: UnicastServerRef.dispatch → UnicastServerRef.oldDispatch → DGCImpl_Skel.dispatch 3. 反序列化触发点 在 DGCImpl_Skel.dispatch 中: 首先读取var3(值为1) 然后读取var4(长整型数值) 最后读取payload对象进行反序列化 当var3的值为1时,会进入以下处理分支: 四、典型利用场景 1. 与payloads/JRMPListener配合使用 先使用 payloads/JRMPListener 在目标服务器上开启JRMP监听 再使用 exploit/JRMPClient 向目标发送恶意payload 注意 : payloads/JRMPListener 可能存在稳定性问题,监听端口有时会失败。 2. 直接攻击RMI服务 由于所有启动了监听的RMI服务都包含DGC模块,因此可以直接攻击: 五、防御建议 限制RMI服务的网络访问 更新Java版本,修复已知反序列化漏洞 使用安全管理器限制反序列化操作 监控异常的网络连接和反序列化操作 六、总结 exploit/JRMPClient 是一个专门针对RMI DGC模块的利用工具,相比Registry利用工具具有以下优势: 适用范围更广(所有RMI服务都包含DGC) 更安全(只发送不接收数据) 利用条件相对宽松 理解其工作原理有助于更好地防御此类攻击,同时也能在渗透测试中更有效地利用该工具。