URLDNS链分析
单独拿出来过一遍,详细分析见 JavaSec 基础。
利用点位于 HashMap 的 put 方法:
1 | public V put(K key, V value) { |
这里对 key 进行了 hash 方法的调用,跟进:
1 | static final int hash(Object key) { |
如果 key 不为 null,则执行 key.hashCode()
这就是重点
如果 key 是一个 url 对象呢?
那就会调用 URL.hashCode() :
1 | public synchronized int hashCode() { |
if 判断,如果 hashCode 不为 -1 则直接返回。
反之,等于 -1 就执行代码。
先跟进:
1 | // (片段) |
对传入的 url 地址进行了 getHostAddress(u) 方法调用。
主要是解析域名,那就一定会收到 DNS 请求。
这就引发了一个问题:
不管什么时候只要执行了 map.put(url, "test"); 都会触发 DNS 解析,那我在序列化的时候不需要解析怎么办?
那就只需要进入这个代码逻辑即可:
1 | if (hashCode != -1) |
因为 private int hashCode = -1; 是私有属性,我们需要通过反射的方式进行修改:
完整 poc:
1 | public static void main(String[] args) throws MalformedURLException, NoSuchFieldException, IllegalAccessException { |
- Title: URLDNS链分析
- Author: xekOnerR
- Created at : 2026-02-10 12:25:57
- Updated at : 2026-02-10 12:26:42
- Link: https://xekoner.xyz/2026/02/10/URLDNS链分析/
- License: This work is licensed under CC BY-NC-SA 4.0.