关于Hessian2二次反序列化中我学到了几点

前言

我的疑问主要是在虎符竞赛期间读到了Ruilin大佬的”后反序列化破绽”关于Gadget1.java中的注释产生的,局部代码如下图。

本文主要分享关于Hessian2经过Rome链两次反序列化完成歹意EvilTemplatesImpl注入中一些可能需求留意的点。

阅读需求理解Hessian2中的Rome链触发机制,本文不再赘述,文中若有错误敬请指正。

1. 关于TemplatesImpl

首先描绘TemplatesImpl的触发机制中的重要办法getOutputProperties

  • getOutputProperties能够调用newTransformer

  • newTransformer会调用getTransletInstance()来创立歹意类

  • getTransletInstance会进入到defineTransletClasses中(name不能为空,_class必需为空才干进入defineTransletClasses)

  • 最后要留意defineTransletClasses的几个点,其中_tfactory是要着重留意的,此处是为何需求调用二次反序列化的关键之处

2. 关于反序列化的留意事项

其次,关于反序列化局部需求分明如下几点:

  1. 关于Hessian2,Hessian2Input与Hessian2Output 均不能对transient修饰的成员停止序列化或者反序列化

  2. 关于ObjectInput与ObjectOutput,除非相关类对readObject或者writeObject停止了重写,否则也无法对transient修饰的成员的变量做操作

  3. TemplateImpl的_tfactory属性固然是transient修饰,但其重写了readObject办法,办法中会生成_tfactory的实例,这或许在本文需求着重留意。

    ​ 图一

    ​ 图二

综上三点,我们能够分明,TemplatesImpl在调用重写的readObject()时_tfactory会被实例化,那么ToStringBean遍历并调用getOutputProperties办法时,内部的_tfactory.getExternalExtensionsMap()调用也就不会出”NullPointerException”和”InvocationTargetException”了。

同时,由于Hessian2的反序列化特性无法对_tfactory停止维护,所以也就无法直接运用TemplatesImpl。

3. SignedObject的作用

此类是在sofastack/sofa-hessian的黑名单中看到的。
SignedObject运用ObjectInput.readObject和ObjectOutput.writeObject对Serializable类停止操作,字节码存储在this.content,反序列化能够经过getObject函数来调用,并且由于是getter的缘故,所以也能够在ToStringBean的toString办法中被调用。因而能够用于处理上文TemplatesImpl中提到的_tfactory为空的问题。

用法如下:

Student

public class Student implements Serializable {
    private int age = 11;
    private String name ="hezhi";
    private transient String nickName = "alps";

    private void readObject(java.io.ObjectInputStream s)
        throws java.io.IOException, ClassNotFoundException {
        s.defaultReadObject();
        //强迫反序列化name
        this.nickName = "whoami";
    }

    @Override
    public String toString() {
        return "Student{" +
            "age=" + age +
            ", name='" + name + '\'' +
            ", nick='" + nickName + '\'' +
            '}';
    }
}
------本页内容已结束,喜欢请分享------

感谢您的来访,获取更多精彩文章请收藏本站。

© 版权声明
THE END
喜欢就支持一下吧
点赞7赞赏 分享
评论 共1条
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片
    • 头像虚擦0