跳转至

2.URLDNS

故事的开始从 URLDNS 开启,因为是最简单最容易理解的反序列化虽然这个 “利用链” 实际上是不能利用”的,但因为其不存在第三方依赖,⾮常适合我们在检测反序列化漏洞时使用

看看利用流程

@AuthorY4tacker
*   Gadget Chain:
*     HashMap.readObject()
*       HashMap.putVal()
*         HashMap.hash()
*           URL.hashCode()

下面是 ysoserial 当中的代码

URLStreamHandler handler = new SilentURLStreamHandler();
HashMap ht = new HashMap(); 
URL u = new URL(null, url, handler);
ht.put(u, url);
Reflections.setFieldValue(u, "hashCode", -1);

那么我们首先直奔 HashMap 的 readObject 方法, 首先获取传入的 key 与 val,后面可以看到将 HashMap 的键名计算了 hash

继续跟入,调用了 URL 类的 hashcode 方法,因为这个 key 是⼀个 java.net.URL 对象

handler 是 URLStreamHandler 对象的某个子类对象,这里是使用 SilentURLStreamHandler

之后调用了 getHostAddress

这里 InetAddress.getByName(host) 就进行了一次 DNS 查询

这里也能看到效果

评论