No.1
声明
由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测以及文章作者不为此承担任何责任。
雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。
No.2
起因
本文仅记录一下自己调试2890的一些过程,网上已经有两篇公开的文章了,所以自己上手调了一下这个漏洞,发现真的是个弟中弟的漏洞。
No.3
漏洞原理
T3反序列化关键字还是 readObject ,所以补丁下来的第一时间,我全部反编译了,但是由于之前没有研究过weblogic,历史补丁没怎么留存,如果通过diff对比更新的方式会很快定位,所以只能反编译后搜。
之前T3反序列化的入口有 StreamMessageImpl、MarshalledObject 等,而且修复方式也是采用 resolveClass 或者 resolveProxyClass 处增加黑名单的校验的方式来修复,因此基于这两点实际上很好定位漏洞位置:
1、入口有 readObject 反序列化,
2、resolveClass 或者 resolveProxyClass 处有名单校验,且类不是之前修复过的类。
基于上述这两种情况很快定位到了 PersistenContext 这个类。
再回头翻一下 weblogic 原来的代码,嗯确实入口在这,在 readSubject 方法中,首先会读取var1中的反序列化数据,然后调用EncryptionUtil.decrypt方法进行解密,最后再触发反序列化。