前言
我的疑问主要是在虎符竞赛期间读到了Ruilin大佬的”后反序列化破绽”关于Gadget1.java中的注释产生的,局部代码如下图。
本文主要分享关于Hessian2经过Rome链两次反序列化完成歹意EvilTemplatesImpl注入中一些可能需求留意的点。
阅读需求理解Hessian2中的Rome链触发机制,本文不再赘述,文中若有错误敬请指正。
1. 关于TemplatesImpl
首先描绘TemplatesImpl的触发机制中的重要办法getOutputProperties
:
-
getOutputProperties能够调用
newTransformer
-
newTransformer会调用getTransletInstance()来创立歹意类
-
getTransletInstance会进入到defineTransletClasses中(name不能为空,_class必需为空才干进入defineTransletClasses)
-
最后要留意defineTransletClasses的几个点,其中_tfactory是要着重留意的,此处是为何需求调用二次反序列化的关键之处
2. 关于反序列化的留意事项
其次,关于反序列化局部需求分明如下几点:
-
关于Hessian2,Hessian2Input与Hessian2Output 均不能对transient修饰的成员停止序列化或者反序列化
-
关于ObjectInput与ObjectOutput,除非相关类对readObject或者writeObject停止了重写,否则也无法对transient修饰的成员的变量做操作
-
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 + '\'' + '}'; } }
感谢您的来访,获取更多精彩文章请收藏本站。
![](https://www.gyzsq.com/wp-content/uploads/2022/07/9259adea4619.gif)
1 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
2 本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
3 本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
![头像](/wp-content/themes/zibll/img/avatar-default.png)
- 最新
- 最热
只看作者