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 各架构功能
Registry(注册中心/注册表):
一个注册表,存放着远程对象的位置(ip、端口、标识符)
本质是个Map,类似于字典一样,用于客户端查询要调用的方法的引用
Server(服务端):
远程方法调用对象的提供者,也是最终代码执行的地方
Client(客户端):
调用服务端提供出来的对象
0x02.2 名词解释
Server(服务端)
骨架(Skeleton): 读取客户端传递的方法参数,调用服务器方的实际对象方法,并接收方法执行后的返回值
远程引用层(Remote Reference Layer): 处理远程引用后向骨架发送远程方法调用
传输层(Transport): 监听客户端的入站连接,接收并转发调用到远程引用层
Client(客户端)
存根/桩(Stub): 远程对象在客户端上的代理
远程引用层(Remote Reference Layer): 解析并执行远程引用协议
传输层(Transport): 发送调用、传递远程方法参数、接收远程方法执行结果
0x03 流程原理图
0x04 结尾
简单的介绍就到这里吧,原理什么的后面慢慢说
需要注意的是Registry(注册中心/注册表)、Server(服务端)、Client(客户端)都有不同的方法可以进行漏洞利用
核心都是反序列化的锅,后面在慢慢一个个实验把
未完待续….