[基础知识]
CC链基础 - java审计1
[工具]
ysoserial
[分析]
freebuf文章
对自己探索的一些问题的回答
1.高版本jdk为什么无法执行成功
jdk8u71之前,我们的transformedmap或者lazymap会在AnnotationInvocationHandler的readObject时执行setValue,setValue中parent执行transform方法
而之后jdk修改了sun.reflect.annotation.AnnotationInvocationHandler,把我们构造的map拷贝到了一个LinkedMap中,自然就没有执行setValue和进而的transform
高版本的AnnotationInvocationHandler修改readObject, 和invoke也没关系啊,怎么影响到cc1的get方法了
2.map的作用
为了构造transformedmap
3.cc1使用proxy的原因
proxy.newProxyInstance生成的实例在执行任意方法的时候会去执行handler中的invoke方法
而AnnotationInvocationHandler中的invoke中包含了this.memberValues.get(var4);可以使lazymap执行get进而执行transform
4.各种Map的用处
lazyMap,transformedMap,TiedMapEntry,LinkedMap原本的用处是什么
5.jdk8u251中的becl的classloader被移除了
6.cc3
cc3的用处是绕过serialkiller对InvokerTransformer的限制使用InstantiateTransformer
7.cc4,2
是利用commons-collections4开发的链
8.cb链
脱离commonscollections且高版本可用
利用PriorityQueue中readObject的compare执行BeanComparator中的compare,其中PropertyUtils.getProperty方法执行javabean的getter方法,执行我们的TemplatesImpl中的getOutputProperties方法进而执行TemplatesImpl链
9.版本
jdk8u71之后不能使用cc0cc1
jdk7u21之后不能使用jdk7u21