CC利用链一览图
CC1-1
版本
- jdk<=8u71
- CommonsCollections 3.1 - 3.2.1、4.0
gadget
AnnotationInvocationHandler#readobject
AbstractInputCheckedMapDecorator.MapEntry#setValue
TransformedMap#checksetValue
ChainedTransformer#transform
InvokerTransformer#transform
总结
8u71后对AnnotationInvocationHandler类进行了修复,因此在高版本中无法利用。
CC1-2
版本
- jdk<=8u71
- CommonsCollections 3.1 - 3.2.1、4.0
gadget
AnnotationInvocationHandler#readobject
Proxy(AnnotationInvocationHandler).xxx
AnnotationInvocationHandler#invoke
LazyMap#get
ChainedTransformer#transform
InvokerTransformer#transform
总结
8u71后对AnnotationInvocationHandler类进行了修复,因此在高版本中无法利用。
CC2
限制
- CommonsCollections 4.0
gadget
PriorityQueue#readObject
TransformingComparator#compare
InvokerTransformer#transform
TemplatesImpl#newTransformer
defineClass
newInstance
总结
从优先队列入手从而触发TransformerImpl#newTransformer实现类加载。当然也可以通过链式调用执行RCE。
CC3
限制
- CommonsCollections 3.1 - 3.2.1
- jdk<=8u71
原生gadget
AnnotationInvocationHandler#readobject
Proxy(AnnotationInvocationHandler).xxx
AnnotationInvocationHandler#invoke
LazyMap#get
ChainedTransformer#transform
InstantiateTransformer#transfrom
TrAXFilter#TrAXFilter
TransformerImpl#newTransformer
defineClass
newInstance
总结
CC3提供了一条能通过TransformerImpl实现类加载的链子,这样的目的是绕过黑名单InvokerTransformer。
CC4
限制
- CommonsCollections 4.0
gadget
PriorityQueue#readObject
TransformingComparator#compare
ChainedTransformer#transform
InstantiateTransformer#transfrom
TrAXFilter#TrAXFilter
TransformerImpl#newTransformer
defineClass
newInstance
总结
CC4的前半段用的是CC2,后半段用的是CC3,两者结合实现了CommonsCollections 4.0版本下的绕过黑名单InvokerTransformer的类加载。
CC5
限制
- CommonsCollections 3.1 - 3.2.1
gadget
BadAttributeValueExpException#readObject
TiedMapEntry#toString
LazyMap#get
ChainedTransformer#transform
InvokerTransformer#transform
总结
CC5用到了BadAttributeValueExpException,从CC6的角度看用处不是很大。不过从CC3的角度看,CC5解决了jdk高版本的限制。
CC6
限制
- CommonsCollections 3.1 - 3.2.1
gadget
HashMap#readobject
HashMap#hash
TiedMapEntry#getValue
ChainedTransformer#transform
InvokerTransformer#transform
总结
CC6解决了jdk高版本的限制,并且HashMap这个东西这么重要不会被ban。
CC7
限制
- CommonsCollections 3.1 - 3.2.1
gadget
Hashtable#readObject
Hashtable#reconstitutionPut
AbstractMap#equals
LazyMap#get
ChainedTransformer#transform
InvokerTransformer#transform
总结
CC7用到了hash碰撞,Hashtable这个东西一般也不会被ban。
CC6+CC3
限制
- CommonsCollections 3.1 - 3.2.1
改进gadget
HashMap#readobject
HashMap#hash
TiedMapEntry#getValue
LazyMap#get
ChainedTransformer#transform
InstantiateTransformer#transfrom
TrAXFilter#TrAXFilter
TransformerImpl#newTransformer
defineClass
newInstance
总结
CC3后半段其实就是提供了一条能通过TransformerImpl实现类加载的链子,这样的目的就是绕过黑名单InvokerTransformer。gadget前半段用的是CC1,但这样会收到jdk版本限制,因此用CC6前半段就可以绕过高版本限制了。