目录
一、序列化和反序列化
序列化
用途
二、Java反序列化漏洞
数据出现
函数接口
漏洞发现
漏洞利用
三、Java序列化反序列化演示
四、靶场演示
一、序列化和反序列化
序列化
把 Java 对象转换为字节序列(字节流)的过程。
反序列化
把字节序列(字节流)恢复为 Java 对象的过程。
用途
- 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中(持久化对象)。
- 在网络上传送对象的字节序列(网络传输对象)
二、Java反序列化漏洞
数据出现
函数接口
漏洞发现
1、黑盒分析:
数据库出现地---观察数据特性。
2、白盒分析:
组件安全&函数搜索&功能模块。
漏洞利用
Ysoserial集成的jar包配合生成,特性的专业漏洞利用工具等。
三、Java序列化反序列化演示
<第一部分>
2.执行序列化部分的代码,可以看到在指定路径下生成了指定的文件,文件内包含序列化的内容。
3.使用工具对序列化内容进行查看,可以看到其头部内容为ACED。
4.执行反序列化部分的代码,可以看到其反序列化成功,并且将原始的内容进行了返回。
5.至此,我们可以想到,如果将反序列化的目标文件的内容进行修改,修改成具有攻击性的代码,那么就可以实现一定的攻击性行为。
<第二部分>
1.这里用到一款工具,其支持一些pyload的生成。
2.打开工具。
3.后面为空的就是不需要其它的包,只需要java的原生类。
4. 先来到下面的网站获取一个地址。
5.在工具内执行下面的命令。
6.来到目标路径下可以看到生成的文件,以及文件内的序列化内容。
7. 使用工具产看,其头部内容为ACED。
8.将a.txt放到刚刚反序列化的目录下。
9.将正常要进行反序列化的文件改成我们刚刚使用工具生成的文件。
10.执行序列化程序。
11.可以看到网站内成功获取到了数据。
12.这里发生了啥?
在这里我们将其原有的代码数据更改成了一个访问http的代码数据,当对方在进行反序列化的时候,就会将我们更改后的代码数据进行执行,就会对http进行访问。
四、靶场演示
1.启动靶场。
2.进入靶场,选择对应关卡。
3. 可以看到给出的序列化代码是以rO0AB开头的,是 JAVA 序列化 base64 加密的数据。
4.使用工具生成pyload。
5.再来目录下可以看到生成的文件。
6.生成的内容如下。
7.因为源代码会将序列化内容进行base64解密,因此我们还需要对其进行一次加密,使用下面的代码记性加密。
8.加密后的内容如下。
9.将代码粘贴到靶场。
10.点击提交后可以看到成功指定了调取计算器的命令。