CC3使用

利用链:

与CC1相比,CC3使用了InstantiateTransformer代替了InvokerTransformer

所以整体的利用链是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Gadget chain:
ObjectInputStream.readObject()
AnnotationInvocationHandler.readObject()
Map(Proxy).entrySet()
AnnotationInvocationHandler.invoke()
LazyMap.get()
ChainedTransformer.transform()
ConstantTransformer.transform()
InstantiateTransformer.transform()
TrAXFilter.newInstenCe()
TrAXFilter.TrAXFilter(Templates templates)
TemplatesImpl.newTransformer()
......
Runtime.exec()

前半部分跟CC1基本一样,就不看了,直接看后面,从ConstantTransformer.transform()开始

image-20220107124724749

这里ConstantTransformerTrAXFilter传递给InstantiateTransformer

然后InstantiateTransformertransform()里面调用了newInstance(),这里的con就是TrAXFilter的构造函数

image-20220107124855248

所以就调用了TrAXFilter的含参构造函数:

image-20220107125147852

这里的templates参数就是上面传过来了iArgs,也就是InstantiateTransformer里面的templatesImpl,即恶意类

image-20220107125240289

于是templatesImplnewTransformer()被调用,恶意代码成功执行