Java反序列化入门之URLDNS链
0x00 前言
开始java的序列化了,前段时间在学习php的框架序列化,接下来一段时间是学习java的序列化,可能
非常难,所以就需要更加努力理解了。。。
0x01 Java反序列化介绍
Java反序列化漏洞的产生原因:
简单的说就是,在于开发者在重写 readObject 方法的时候,写入了漏洞代码。( readObject 相当于
php中的 unserialize )
序列化和反序列化本身并不存在问题
但当输入的反序列化的数据可被用户控制,那么攻击者即可通过构造恶意输入,让反序列化产生非预期
的 对象 ,在此过程中执行构造的任意代码。
0x02 反序列化方法的对比
在接触Java反序列化之前,就是PHP了,和PHP的反序列化还是有区别的
他们最基本的原理是类似的,反复横跳,找到一个利用链。
都是用于数据存储的一个格式化的操作。
将一个对象中的属性按照某种特定的格式生成一段数据流,在反序列化的时候再按照这个格式将属
性拿回来,还原成对象。
而Java其提供了更加高级的 writeObject ,允许在序列化流中插入一些自定义数据,进而在反序
列化的时候能够使用 readObject 进行读
0x022 JAVA反序列化
Java在序列化时一个对象,就不一样了,Java是在序列化的中间,去触发一下利用链,而不是php
在序列化完成后
Java在序列化时,将会调用这个对象中的 writeObject 方法
反序列化时,会调用 readObject
writeObject 和 readObject 方法开发者多种情况都是自己会重写,造成一些问题,构造触发
链。
0x03 ysoserial 介绍
15年的 Apache Commons Collections 反序列化远程命令执行漏洞 (ysoserial 的最早的 commit
)
同时无数 Java 应用系统各种rce疯狂爆出
反序列化漏洞利⽤⼀个⾥程碑式的⼯具,ysoserial。
ysoserial集合了各种java反序列化payload,它可以⾃⼰选择的利⽤链,⽣成反序列化利⽤数据,
通过将这些数据发送给⽬标,从⽽执⾏命令。
0x04 URLDNS 原理