Java反序列化漏洞原理解析

业务类实现java.io.Serializable接口才可被反序列化,而且必须所有属性是可序列化的,除了transient修饰的属性除外。

Java反射


Java中定义的一个类本身也是一个类对象,它们是java.lang.Class类的实例。类对象的特征包括

  • 表示正在运行的 Java 应用程序中的类和接口
  • 没有公共构造方法,由 Java 虚拟机自动构造
  • 提供类本身的信息,比如有几种构造方法, 有多少属性,有哪些普通方法

所以先通过对象找到某个类对象,再由类对象确认类的方法和属性。

package reflection;

public class Exec {
    public static void main(String[] args) throws Exception {
        //java.lang.Runtime.getRuntime().exec("calc.exe");

        Class runtimeClass=Class.forName("java.lang.Runtime");
        Object runtime=runtimeClass.getMethod("getRuntime").invoke(null);// getRuntime是静态方法,invoke时不需要传入对象
        runtimeClass.getMethod("exec", String.class).invoke(runtime,"calc.exe");
    }
}

 

你可能感兴趣的:(黑客)