JAVA反序列化漏洞利用分析系列

AI-摘要
GPT-4.0-turbo GPT
AI初始化中...
介绍自己 🙈
生成本文简介 👋
推荐相关文章 📖
前往主页 🏠
前往爱发电购买
JAVA反序列化漏洞利用分析系列
Takake1.简介
- 该系列主要分析各JAVA反序列化漏洞利用链的实际过程,主要用于代码审计。
- 例如常见的CC链,或者用于入门分析的URLdns链。
2.关于JAVA反序列化的本质
- 想要分析JAVA的反序列漏洞,那么首先,也是必须搞明白的是反序列化的本质到底是什么,是针对对象还是类,还是属性或者函数,这些概率需要搞清楚。
- 在JAVA反序列化过程中,JVM会根据字节流中的信息查找相应的类定义,并使用该类定义来创建对象实例,然后根据字节流中的信息设置对象的属性值等状态信息。因此,反序列化是针对对象的,而非类本身。
- 所以我们需要明白我们序列化的类一定是目标系统有定义的类,而不是自己凭空捏造一个类来序列化,这样目标系统是无法反序列化成功的。也就是说我们没办法编写自己的函数直接在目标系统中执行的。
- 因此反序列化漏洞的实质是通过嵌套编写对象定义属性值来达到执行目标系统中已有的我们想要执行的那个函数。
3.反序列化漏洞利用链分析流程
- 在以下所有流程中,我们所选取的类必须满足以下两个条件:
- 实现了Serializable接口,否则不可进行序列化,就更不存在什么反序列化。
- 必须为目标机器程序中存在的类。
3.1.选取执行类
- 执行类主要是为了在服务器执行某个操作的目的,例如读文件,写文件(内存码),SSRF,或者直接RCE等。
- 最好为一些可以执行任意方法的类,例如一些反射调用的类,动态代理的类,或者加载远程字节码文件的类等。
3.2.分析调用链
- 调用链的目的就是为了连接执行类和入口类,因此我需要通过分析将执行类调用方法通过一步一步的类嵌套,在入口类调用readObject方法时,根据其调用可控对象的方法,最后调用到执行类方法的目的。
3.3.选取入口类
- 必须要重写了readObject方法,且在readObject方法中调用了可控参数的方法。
- 参数类型尽量宽泛,最好可直接传入Object对象。
4.各利用链分析
- 以下是SerializationDumper 工具解析序列化对象的示例
1 | STREAM_MAGIC - 0xac ed |
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果