banner
NEWS LETTER

从java反序列化到CC链

Scroll down

从java反序列化到CC链

java反序列化简介

如果你学过php反序列化,那么你理解java反序列化应该不会太难。
网上有很多详解java反序列化的文章,例如https://baijiahao.baidu.com/s?id=1770684110754691934&wfr=spider&for=pc
简单来讲,java序列化和反序列化就是将对象转换成字节流,再将字节流还原回对象的过程。和php不同的是,java没有那么方便,直接一个函数就能序列化对象,并且也不是所有的对象都能序列化,想要序列化的对象必须满足实现了Serializable接口。序列化的方法为objectoutputstream.writeObject,反序列化的方法为objectinputstream.readObject。具体解释为序列化就是将对象流输出到指定位置,反序列化就是将对象流输入进来。
无法反序列化
具体底层的反序列化逻辑和实现就不探讨了,这里我们就学习反序列化的应用

反序列化的最终目的

反序列化攻击最终都是为了执行shell或者恶意代码,更具体点来讲就是为了执行我们想执行的方法,比如exec等等。Java想执行任意方法可以依靠同名方法调用、反射、类加载等形式,比如我在某个触发点可以执行a.b()这个方法,而a这个变量我们是可以控制的,某个对象的b方法是个恶意方法,那么我们就可以让a变成我们的恶意对象,这样在这个触发点就可以执行我们的恶意方法了。反射和类加载要更难理解一点,我们后面再讲。

反射

反射是java的一种很有意思的机制,如果说正常的调用方法就是先实例化类再调用其方法,那么反射就是

URLDNS

可以说URLDNS这条链是最基础的java反序列化入门启蒙
gadget:HashMap.readObject()->HashMap.putvul

I'm so cute. Please give me money.

Other Articles
cover
Hello!
  • 24/03/03
  • 01:38
目录导航 置顶
  1. 1. 从java反序列化到CC链
    1. 1.1. java反序列化简介
    2. 1.2. 反序列化的最终目的
      1. 1.2.1. 反射
    3. 1.3. URLDNS