跳转至

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查询

这里也能看到效果

评论