原理 首先先回顾一下之前CC1-CC7这七条链,我也忘得差不多了,总体分为两种方式实现代码执行吧: 第一种是CC1和CC6,核心是通过ChainTransformer.tranform方法链式调用构造好的ConstantTransformer.tranform和InvokerTransformer.transform方法,实现代码执行第二类是以CC…
这篇文章受密码保护,输入密码才能阅读
CommonsCollections7利用链分析 原理 CC7这条链和上一条CC5差不多,也是用了别的反序列化入口方法,然后走到LazyMap.get()方法后就沿着CC1链的后半部分继续走了。这次用到的入口方法是Hashtable.readObject(),yso中的调用链如下: java.util.Hashtable.readObject ja…
CommonsCollections5利用链分析 原理 回顾一下CC6利用链,在CC6的利用链中,是使用了HashMap类在计算hash值时调用 key.hashCode()的方式,然后我们让这里的key为TiedMapEntry类对象,调用TiedMapEntry的hashCode()走到getValue()方法,最终回到CC1链中的LazyMa…
CommonsCollections2利用链分析 原理 CC2这条链实际上是在CC4链的基础上进行改的吗,目的是避免使用Transformer数组,先上图: 其中的紫色部分就是CC2链,基本上就是在CC4链的基础上,抛弃了用 InstantiateTransformer类将TrAXFilter初始化,实现调用TemplatesImpl.newTra…
CommonsCollections4利用链分析 原理 CC4这条链用到了新的Commons-Collections4这个依赖,由于这个依赖与之前的版本具有较大的出入,连groupId和artifactId都变了,前者是Commons Collections⽼的版本包,当时版本号是3.2.1;后者是官⽅在2013年推出的4版本,当时版本号是4.0。…
CommonsCollections3利用链分析 原理 CC3这条链比较特殊,和CC1与CC6这两条链是直接在链的代码中执行任意代码相比,CC3是通过动态类加载机制来实现自动执行恶意类的代码的。因此,我们需要先回顾一下在基础篇讲的Java动态类加载机制。 这里的加载类是指从编译好的字节码.class文件中加载类,不管是加载远程class文件,还是本…
CommonsCollections6利用链分析 原理 先来看 ysoserial 中的利用链: /* Gadget chain: java.io.ObjectInputStream.readObject() java.util.HashSet.readObject() java.util.HashMap.put() java.util.HashM…
CommonsCollections1利用链分析 原理 先来看 ysoserial 中的利用链: Gadget chain: ObjectInputStream.readObject() AnnotationInvocationHandler.readObject() Map(Proxy).entrySet() AnnotationInvocati…