Java RMI反序列化深度解析
RPCRemote Procedure Call,远程过程调用。像本地调用方法一样调用一个远程方法。 RMI概念RMI,全程Remote Method Invocation,远程方法调用,一种用于实现远程过程调用的应用编程接口。 它使客户端上运行的程序可以调用远程服务器上对象的方法,即通过某个java虚拟机上的对象来调用另一个java虚拟机中对象的方法。 客户端获取的是远程主机上对象的引用,无论何处使用引用,方法调用都发生在原始对象上 RMI实现了RPC,通常使用Java原生反序列化,并且可以结合动态类加载和安全管理器来安全传输一个Java类。 远程对象和非远程对象远程对象:RMI中的远程对象首先需要可以序列化;并且需要实现特殊远程接口的对象,该接口指定可以远程调用对象的哪些方法;其次该对象是通过一种可以通过网络传递的特殊对象引用来使用的。和普通的 Java...
Java JNDI注入总结
概念JNDI(Java Naming Directory Interface),Java命名和目录接口,是SUN公司提供的一种标准的Java命名系统接口。通过调用JNDI的API应用程序可以定位资源和其他程序对象。 JNDI可访问的现有目录及服务包括:JDBC(Java数据库连接)、LDAP(轻型目录访问协议)、RMI(远程方法调用)、DNS(域名服务)、NIS(网络信息服务)、CORBA(公共对象请求代理系统结构) 命名服务/目录服务JNDI包括命名服务(Naming Service)和目录服务(Directory Service)。 命名服务是一种通过名称来查找实际对象的服务。例如在RMI中,Naming.lookup方法通过查找名称来获取远程对象的代理类 相关概念: Name:名称。要么在命名系统中查找对象,需要提供对象的名称,如java:comp/env/jdbc/DataSource Naming...
Java反序列化:CB利用链深度解析
Commons BeanutilsApache Commons Beanutils,是Apache Common下的一个工具集的另一个项目,它提供对普通Java类对象(JavaBean)的一些操作方法 JavaBean是一种特殊的Java类,主要用于封装数据并在应用程序中传递,其具有的特点: 无参构造函数:JavaBean必须提供一个默认的无参构造函数 私有属性:所有属性必须声明为私有(private) 公共访问方法:通过getter和setter方法访问和修改属性值 可序列化:实现Serializable demo: 123456789101112131415161718192021222324public class Person implements java.io.Serializable { private String name; private int age; // 无参构造函数 public Person() {} // Getter 和 Setter 方法 public String getName()...
Java反序列化:CC6利用链深度解析
环境搭建 jdk 8u71 Commons Collection 3.2.1 jdk下载地址:https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html#license-lightbox 具体搭建流程与CC1链是一样的,可以看我之前的文章。注意CC6对jdk是不受版本限制的,所以任意版本都行,但Commons...
Java反序列化:CC7利用链深度解析
前言CC7思路一样是通过找到另外一条链来调用LazyMap.get()方法 环境搭建 jdk 8u71 Commons Collection...
Java反序列化:CC5利用链深度解析
前言在前面我们CC6链的学习中,由于jdk 8u71以后的版本修改了AnnotationInvocationHandler类中的readObject方法,我们无法通过CC1链调用LazyMap.get(),所以我们找到了org.apache.commons.collections.keyvalue.TiedMapEntry类,它的getValue方法可以调用map.get方法: 同时在该类中存在hashCode()方法能调用getValue()方法,这让我们自然而然想到HashMap类作为入口 而在CC5中,我们将学习通过TiedMapEntry类的另一个方法toString来调用LazyMap.get()方法。 环境搭建 jdk 8u71 Commons Collection...









