java审计CC链1-7学习

本文解析了CC链在Java审计中的复杂性,涉及高版本JDK对AnnotationInvocationHandler的改动,transformedMap的运用,以及如何通过cc3和cc4绕过serialkiller限制。讨论了不同Map类型的作用和cc1使用proxy的原理,还提到了jdk版本限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[基础知识]
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值