【JAVA反序列化漏洞】简介、原理、工具、环境、靶场、思路
【JAVA反序列化漏洞】简介、原理、工具、环境、靶场、思路
目录
6.2.1、Java Deserialization Scanner
(大家都在学习)
一、简介:
序列化也就是将数据拆成一小块小块保存到文件中(每块设置编号),反序列化就是重现组合起来
(1)序列化就是将数据转化成一种可逆的字符串(利于存储或者传输),字符串还原原来结构的过程叫做反序列化
(2)序列化后,方便保存和传输(保留成员变量,不保留函数方法)
(3)数据(对象)--------序列化---------->字符串-----------反序列化-------->数据(对象)
二、原理:
2.1、Java对象:
①多种方式来创建对象,没被回收都可复用此对象(存在于JVM中的堆heap内存中),当JVM处于运行状态,对象就存在;反之,对象就不存在。
②在真实的环境中,通过序列化,实现在JVM中的对象和字节数组流之间转换,实现将这些对象持久化保存下来,在需要的时候再使用。
2.2、Java 序列化:
完整性+可传递性
①将对象转换为字符串等字节数组流过程(保存属性状态,不保存对象中的方法),从而实现对象持久化,以便传输(可移植性)或保存在本地文件中,将序列化对象写入文件之后,可从文件中读取,并且进行反序列化。
2.3、Java 反序列化:
将一个对象的字节序列(字符串)中保存的对象状态及描述信息,通过反序列化,恢复成 Java 对象的过程(重建)
三、函数:
序列化:ObjectOutputStream类–> writeObject()(写入)
反序列化:ObjectInputStream类 -->readObject() (读取)
Serializable(接口) :(序列化与反序列化的类必须使用)一个标志性接口,标识在 JVM 中进行序列化,为该类自动生成一个序列化版本号。
serialVersionUID(类属性):序列化版本号(默认提供),给 JVM 区别同名类。
transient(关键字):不希望特定属性参与序列化,使用这个关键字标注该属性。
四、工具:
4.1、ysoserial 0.0.4版
(现在最新的是0.0.6)
链接:https://pan.baidu.com/s/18q2ruwCFGI1vMvl9j7lT3w?pwd=hj12
提取码:hj12
4.2、 payload生成器
4.2.1、介绍:
ysoserial payload是创建了一个URLStreamHandler的子类:SilentURLStreamHandler
SilentURLStreamHandler重写了getHostAddress(URL u),屏蔽了返回值,因此在生成payload的时候、也就是序列化的时候,不会触发dns查询。
4.3、提示:
上上述文件需要经过Maven编译,或者Gradle编译(Gradle更简单,以后应该会超过Maven)成.jar文件,后才能使用
IntelliJ IDEA中也包含Maven、Gradle
(里面也可以配置自己的maven、Gradle)
官网:
激活:
网上有很多激活脚本(容易找到)
五、准备:
5.1、WebGoat
链接:
5.2、 环境变量的配置:
5.2.1、方法一:手工配置
5.2.2、方法二:工具配置
5.2.3、JDK的配置:
5.2.4、JRE的生成:
5.3、错误+安装
全面的错误解决
六、WebGoat
6.1、分析:
下面的输入框存在反序列化的漏洞,我们要生成含有可执行代码的序列化字符串,在输入框提交,进行反序列化,从而执行我们构造的代码,让页面延迟5s就完成题目了
以 rO0AB 开头, JAVA 序列化 base64 加密的。
以 aced 开头, java 序列化的 16 进制。
解码看看
无任何有用信息
6.2、插件
6.2.1、Java Deserialization Scanner
是一个Burp套件插件,用于检测和利用Java Deserialization(java反序列化)漏洞
这个工具的扫描,也得依靠我们对他进行配置文件ysoserial.jar
6.3、漏洞利用:
(由于僵持了好多天,我要去补充亿多点知识点去了,先把思路放这里)
6.3.1、大体思路:
构造恶意语句----->序列化------>进行编码------>最终的payload------>提交进去执行
6.3.2、具体思路
(前提:知道源码)
第一步:
提交,抓包,找到数据包中包含的目录(可能是发往反序列化函数的地方)
第二步:
在源码里搜索,找到反序列化的位置
第三步:
分析解码函数(即它的编码方法)及其接口
第四步:
查看ysoserial支持的插件,对应查找WebGoat是否安装了对应的.jar包(名含有core,与ysoserial支持的版本一致),并复制到ysoserial目录下
第五步:
根据这个.jar包,利用ysoserial生成反序列化漏洞的payload,执行calc.exe,将payload保存在token.bin文件中
第六步:
采用python脚本对payload进行base64编码(根据所使用的序列化编码方法)
第七步:
在反序列化框提交构造的序列化字符串(触发反序列化)
(前提:不知道源码)
可以就要通过其他方法去分析到编码方式、含有的.jar包
接口测试、回显数据分析……
- 点赞
- 收藏
- 关注作者
评论(0)