URLDNS利用链分析-urldns利用链分析
slug
series-status
status
summary
date
series
type
password
icon
tags
category
URLDNS
利用效果
序列化部分
代码
效果

反序列化部分
代码
效果

原理
核心点
该漏洞的关键点在于URL类重写了继承自Object类的hashcode方法,并在计算哈希的过程中会将域名解析为ip,就在这一步导致了dns记录的产生

利用方式
虽然目前我们知道了调用URL类的hashcode方法可以产生dns请求,但是还缺少一个利用点,因为URL的readObject方法中并没有调用其hashcode方法。
而使用hashcode方法最多的自然是hashmap结构,而我们进入hashmap类的源码可以看到,其readObject方法在最后调用了hash方法:

而在hash方法内部则会调用对象的hashcode方法:

此时则会调用URL对象的hashcode方法,顺利的话则会产生dns记录。
一个要注意的点
因为URL的hashcode方法在进行hashcode之前会先对自身的hashcode属性的值进行判断,只有值为-1时才会执行这个方法:

因此,要保证在反序列化的时候URL对象的hashcode属性为-1。
此时就会碰到另一个问题,因为hashmap在put的时候会自动计算对象的哈希值,并赋值,此操作会导致URL对象在反序列化时hashcode属性不为-1,因此这也就是我们的序列化部分为什么在序列化之前利用反射操作将url对象的hashcode属性设定为了-1:

也许有同学会注意到我们在进行put操作之前也先为url的hashcode赋值了一个非-1的值,这一操作则是为了保证在执行这段代码的时候服务器不会去解析我们传入的dns域名,避免产生冗余的dns日志信息。
Loading...