前言Java安全中经常会提到反序列化,一个将Java对象转换为字节序列传输(或保存)并在接收字节序列后反序列化为Java对象的机制,在传输(或保存)的过程中,恶意攻击者能够将传输的字节序列替换为恶意代码进而触发反序列化漏洞。其中最经典的反序列化漏洞利用工具——ysoserial,下面就分析学习一下ysoserial中的URLDNS链,以便更好地理解反序列化漏洞。ysoserial简单分析下载ysoserialhttps://github.com/frohoff/ysoserial项目源码,导入IDEA,并在pom.xml中搜索mainclass,寻找程序的入口点在程序运行之前,先设置两个参数(
目录一、前置知识反射二、分析1.URL2.HashMap3.解决一些问题反射修改字段值三、POC四、利用链一、前置知识菜鸟教程Java序列化Java安全-反射URLDNS链的作用就是在目标主机中可能存在反序列化输入的数据的地方,传入序列化后的URLDNS利用链,如果目标主机解析了这个URL地址,那么证明该处存在反序列化数据的行为。然后就可以进一步尝试其他反序列化漏洞了。反射下面是两个本文中要用到的反射方法:反射获取类对象:Students=newStudent();//方法1Classclazz=s.getClass();//方法2Classclazz2=Student.class;反射修改私
JAVAURLDNS链分析利用认java反序列化知识Java原生链序列化:利用Java.io.ObjectInputStream对象输出流的writerObject方法实现Serializable接口从而将对象转化为字节序列用于对对象数据进行存储转移举例:packageorg.example;//对象importjava.io.IOException;importjava.io.ObjectInputStream;importjava.io.Serializable;publicclassPersonimplementsSerializable{privatetransientStringna
文章目录[java安全]URLDNS前言HashMapURLURLStreamHandler调用过程调用链流程图POC[java安全]URLDNS前言URLDNS利用链是一条很简单的链子,可以用来查看java反序列化是否存在反序列化漏洞,如果存在,就会触发dns查询请求它有如下优点:使用java内置类构造,对第三方库没有依赖在目标没有回显的时候,可以使用DNS请求得知是否存在反序列化漏洞在ysoserial下生成URLDNS的命令为:java-jarysoserial.jarURLDNS"http://xxx.dnslog.cn"在学习URLDNS之前,我们需要了解一些java内置的类Hash
URLDNS链子是Java反序列化分析的第0课,网上也有很多优质的分析文章。笔者作为Java安全初学者,也从0到1调试了一遍,现在给出调试笔记。一.Java反序列化前置知识Java原生链序列化:利用Java.io.ObjectInputStream对象输出流的writerObject方法实现Serializable接口,将对象转化成字节序列。Java原生链反序列化:利用Java.io.ObjectOutputStream对象输入流的readObject方法实现将字节序列转化成对象。测试源码如下,此部分源码参考了ol4three师傅的博客:packageserialize;importjava
听说这个链子是最简单的链子之一了,但是却是来来回回看了好多遍才勉强看明白。在ysoserial中我们可以看见链子是这样的:*GadgetChain:*HashMap.readObject()*HashMap.putVal()*HashMap.hash()*URL.hashCode()简单流程:1.HashMap接收一个类O(URL类)2.类O(URL类)的hashCode()后续的一串链子可以发起DNS请求3.HashMap的readObject刚好可以调用O.hashCode();现在我们来编写类来观察如何触发DNS请求packagepacket1;importjava.io.FileOut
ysoserialysoserial是一个可以生成反序列化payload的工具,它可以让用户根据自己选择的利用链,生成反序列化利用数据,通过将这些数据发送给目标,从而执行用户预先定义的命令,用法:点击查看代码$java-jarysoserial.jarYSOSERIAL?Usage:java-jarysoserial.jar[payload]'[command]'Availablepayloadtypes:PayloadAuthorsDependencies--------------------------AspectJWeaver@Jangaspectjweaver:1.9.2,commo
ysoserialysoserial是一个可以生成反序列化payload的工具,它可以让用户根据自己选择的利用链,生成反序列化利用数据,通过将这些数据发送给目标,从而执行用户预先定义的命令,用法:点击查看代码$java-jarysoserial.jarYSOSERIAL?Usage:java-jarysoserial.jar[payload]'[command]'Availablepayloadtypes:PayloadAuthorsDependencies--------------------------AspectJWeaver@Jangaspectjweaver:1.9.2,commo
原理JavaURLDNS链是通过readObject反序列化+DNS查询来确认反序列化利用点的存在。该利用链具有如下特点:[1]只能发起DNS请求,不能进行其它利用。[2]不限制jdk版本,使用Java内置类,对第三方依赖没有要求。[3]目标无回显,可以通过DNS请求来验证是否存在反序列化漏洞。过程分析需要发起Http请求,Java中URL类与Http请求相关并且URL类实现了Serializable接口,URL类中是通过调用openConnection方法实现。跟进返回中的openConnection可以看到返回的是URLConnection对象。继续跟进URLConnection,发现是一
原理JavaURLDNS链是通过readObject反序列化+DNS查询来确认反序列化利用点的存在。该利用链具有如下特点:[1]只能发起DNS请求,不能进行其它利用。[2]不限制jdk版本,使用Java内置类,对第三方依赖没有要求。[3]目标无回显,可以通过DNS请求来验证是否存在反序列化漏洞。过程分析需要发起Http请求,Java中URL类与Http请求相关并且URL类实现了Serializable接口,URL类中是通过调用openConnection方法实现。跟进返回中的openConnection可以看到返回的是URLConnection对象。继续跟进URLConnection,发现是一