[Java反序列化]10、反序列化漏洞基础

发布于 2022-05-18  48 次阅读


[Java反序列化]10、反序列化漏洞基础

反序列化漏洞的基本逻辑

image-20220516231922297

反序列化漏洞的要求

  • 入口类:
    • 可序列化
    • 可重写readObject
    • 接受任意对象作为参数
  • 过程中的O类
    • 可序列化
    • 属于集合类型/接受任意对象/接受Map
  • 末端方法
    • 可以执行需要执行的操作

序列化和反序列化代码

 //序列化操作
    public static void  Serialize(Object obj) throws Exception {

        //  对象输出流
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("obj"));
        // 使用 writeObject 序列化对象
        oos.writeObject(obj);
        // 刷新
        oos.flush();
        //  关闭流
        oos.close();
    }
//序列化后的二进制文件会被保存到文件输出流指定的路径。

    // 反序列化操作
    public static void Deserialize() throws Exception {
        //  对象输入流
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("obj"));
        //  使用 readObject() 反序列化
        Object obj = ois.readObject();
        //  使用对象
        System.out.println(obj);
        //  关闭流
        ois.close();
//反序列化需要借助文件输入流读取指定路径的二进制文件。
    }
}


“缘分让我们相遇乱世以外,命运却让我们危难中相爱”