CC利用链一览图

CC (2)

CC1-1

版本
  1. jdk<=8u71
  2. CommonsCollections 3.1 - 3.2.1、4.0
gadget
AnnotationInvocationHandler#readobject
AbstractInputCheckedMapDecorator.MapEntry#setValue
TransformedMap#checksetValue
ChainedTransformer#transform
InvokerTransformer#transform
总结

8u71后对AnnotationInvocationHandler类进行了修复,因此在高版本中无法利用。

CC1-2

版本
  1. jdk<=8u71
  2. 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

限制
  1. CommonsCollections 4.0
gadget
PriorityQueue#readObject
TransformingComparator#compare
InvokerTransformer#transform
TemplatesImpl#newTransformer
defineClass
newInstance
总结

从优先队列入手从而触发TransformerImpl#newTransformer实现类加载。当然也可以通过链式调用执行RCE。

CC3

限制
  1. CommonsCollections 3.1 - 3.2.1
  2. 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

限制
  1. 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

限制
  1. CommonsCollections 3.1 - 3.2.1
gadget
BadAttributeValueExpException#readObject
TiedMapEntry#toString
LazyMap#get
ChainedTransformer#transform
InvokerTransformer#transform
总结

CC5用到了BadAttributeValueExpException,从CC6的角度看用处不是很大。不过从CC3的角度看,CC5解决了jdk高版本的限制。

CC6

限制
  1. CommonsCollections 3.1 - 3.2.1
gadget
HashMap#readobject
HashMap#hash
TiedMapEntry#getValue
ChainedTransformer#transform
InvokerTransformer#transform
总结

CC6解决了jdk高版本的限制,并且HashMap这个东西这么重要不会被ban。

CC7

限制
  1. 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

限制
  1. 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前半段就可以绕过高版本限制了。