知识点:
Java攻防-Gadget链-CC2&CC4&CC5&CC7
前面利用链都是使用commons.collections都是3.x版本的,那么来看一下4.x版本有哪些利用方式,把cc2,cc4,cc5,cc7都进行分析。
演示案例-Java攻防-Gadget-CC2&CC4&CC5&CC7
复现配置:pom.xml添加依赖:commons-collections版本
bash
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.0</version>
</dependency>

1、CC2
bash
cc2中不通过实例化TrAXFilter进行类加载,而用InvokerTransformer
PriorityQueue#readObject
->PriorityQueue#heapify
->PriorityQueue#siftDown
->PriorityQueue#siftDownUsingComparator
->comparator#compare
->TransformingComparator#compare
->InvokerTransformer#transform
->TemplatesImpl#newTransformer
-> TemplatesImpl::getTransletInstance
-> TemplatesImpl::defineTransletClasses
-> TransletClassLoader::defineClass














这里CC2链跟CC1链不一样的是CC1链传递过来的值经过以上两个ChainedTransformer#transform()、ConstantTransformer#transform()才传到这个InvokerTransformer#transform()上,如果没有经过上面两个地方,是不会触发RCE的。CC2链没有ChainedTransformer#transform()、ConstantTransformer#transform()这两个,所以需要换个对象。







2、CC4
bash
CC4可以看成是对CC2的改造,用InstantiateTransformer来替代InvokerTransformer
PriorityQueue::readObject
->PriorityQueue#heapify
->PriorityQueue#siftDown
->PriorityQueue#siftDownUsingComparator
TransformingComparator::compare
ChainedTransformer::transform
ConstantTransformer::transform
InstantiateTransformer::transform
TrAXFilter::带参构造
TemplatesImpl::newTransformer
-> TemplatesImpl::getTransletInstance
-> TemplatesImpl::defineTransletClasses
-> TransletClassLoader::defineClass





















3、CC5

bash
基本和CC1一致,入口点换成BadAttributeValueExpException
Gadget chain:
ObjectInputStream.readObject()
BadAttributeValueExpException.readObject()
TiedMapEntry.toString()
LazyMap.get()
ChainedTransformer.transform()
ConstantTransformer.transform()
InvokerTransformer.transform()











4、CC7
bash
基本和CC1一致,入口点换成Hashtable
Gadget chain:
Hashtable.readObject
Hashtable.reconstitutionPut
AbstractMapDecorator.equals
AbstractMap.equals
LazyMap.get
ChainedTransformer.transform
ConstantTransformer::transform
InvokerTransformer.transform








