0x01 RMI基本概述

Java RMI全称叫Remote Method Invocation(远程方法调用)
RMI常用于构建分布式应用程序
实现了Java程序之间跨JVM进行远程通信的Java API,能直接传输序列化后的Java对象和分布式垃圾收集
它的实现依赖于Java虚拟机(JVM),因此它仅支持从一个JVM到另一个JVM的调用

RMI依赖的通信协议为JRMP(Java Remote Message Protocol,Java远程方法协议)
JRMP是一个Java特有的,基于流的协议,该协议为Java定制,要求服务端与客户端都为Java编写。

注: 该API存储于java.rmi包中,使用其方法调用对象时,必须实现java.rmi.Remote接口

0x02 RMI架构功能与名词解释

从RMI设计角度来讲,基本分为三层架构模式来实现RMI
分别为Registry(注册中心/注册表)、Server(服务端)、Client(客户端)

0x02.1 各架构功能

  1. Registry(注册中心/注册表):
  2. 一个注册表,存放着远程对象的位置(ip、端口、标识符)
  3. 本质是个Map,类似于字典一样,用于客户端查询要调用的方法的引用
  4. Server(服务端):
  5. 远程方法调用对象的提供者,也是最终代码执行的地方
  6. Client(客户端):
  7. 调用服务端提供出来的对象

0x02.2 名词解释

  1. Server(服务端)
  2. 骨架(Skeleton): 读取客户端传递的方法参数,调用服务器方的实际对象方法,并接收方法执行后的返回值
  3. 远程引用层(Remote Reference Layer): 处理远程引用后向骨架发送远程方法调用
  4. 传输层(Transport): 监听客户端的入站连接,接收并转发调用到远程引用层
  1. Client(客户端)
  2. 存根/桩(Stub): 远程对象在客户端上的代理
  3. 远程引用层(Remote Reference Layer): 解析并执行远程引用协议
  4. 传输层(Transport): 发送调用、传递远程方法参数、接收远程方法执行结果

0x03 流程原理图

image.png
image.png

0x04 结尾

简单的介绍就到这里吧,原理什么的后面慢慢说
需要注意的是Registry(注册中心/注册表)、Server(服务端)、Client(客户端)都有不同的方法可以进行漏洞利用
核心都是反序列化的锅,后面在慢慢一个个实验把

未完待续….