[基础知识]
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
本文解析了CC链在Java审计中的复杂性,涉及高版本JDK对AnnotationInvocationHandler的改动,transformedMap的运用,以及如何通过cc3和cc4绕过serialkiller限制。讨论了不同Map类型的作用和cc1使用proxy的原理,还提到了jdk版本限制。
3531

被折叠的 条评论
为什么被折叠?



