java反序列化漏洞原理研习,java基础面试笔试题


我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家。
扫描二维码或搜索下图红色VX号,加VX好友,拉你进【程序员面试学习交流群】免费领取。也欢迎各位一起在群里探讨技术。

 

零、Java反序列化漏洞

 

java的安全问题首屈一指的就是反序列化漏洞,可以执行命令啊,甚至直接getshell,所以趁着这个假期好好研究一下java的反序列化漏洞。另外呢,组里多位大佬对反序列化漏洞都有颇深的研究,借此机会,努力学习,作为狼群中的哈士奇希望成功的继续伪装下去,不被识破,哈哈哈哈!!!

参考文档:感谢所有参考文献的作者:

1、https://www.cnblogs.com/bencakes/p/6139477.html

2、https://www.cnblogs.com/ssooking/p/5875215.html

3、https://www.cnblogs.com/xdp-gacl/p/3777987.html

一、Java的序列化与反序列化:

在这里我们直接自己定义一个类,然后对这个类的对象(一个实例)进行序列化和发序列化测试。

 

 1 //引入必要的java包文件

 2 import java.io.*;

 3 

 4 //创建测试类,注意要继承Serializable接口

 5 class serialdemo implements Serializable{

 6     public static int number;

 7     public serialdemo(int inputnum) {

 8         this.number = inputnum;

 9     }

10 } 

11 

12 //主类

13 public class test{

14     //测试主类

15     public static void main(String[] args) throws IOException, ClassNotFoundException {

16         //主函数入口

17         serialdemo object = new serialdemo(100);

18         FileOutputStream fileoutputstream = new FileOutputStream("serail.ser");//创建文件写入对象

19         ObjectOutputStream outputstream = new ObjectOutputStream(fileoutputstream);//创建类型序列化通道对象

20         outputstream.writeObject(object);//把类对象(实例)序列化进入文件

21         outputstream.close();

22         FileInputStream fileinputstream = new FileInputStream("serail.ser");//从文件读取对象

23         ObjectInputStream inputstream = new ObjectInputStream(fileinputstream);//对象反序列化

24         // 通过反序列化恢复对象obj

25         serialdemo object2 = (serialdemo)inputstream.readObject();

26         System.out.println("反序列化后的对象的值:");

27         System.out.println(object2.number);

28         inputstream.close();

29     }

30 }

 

既然自己定义的类都可以了,那么默认的java存在的数据类型的实例当然也都可以啦~运行结果如下:

 

1 └─[$]> java test

2 反序列化后的对象的值:

3 100

 

二、对java序列化的详解:

1、api定位:

 

1 /*

2 java.io.ObjectOutputStream  ->   writeObject()

3 java.io.ObjectInputStream    ->    readObject()

4 序列化把对象序列化成字节流

5 反序列化读取字节流反序列化对象

6 */

 

2、实现Serializable和Externalizable接口的类才能序列化与反序列化。

3、java的反射机制:

 

/*

在java运行状态中

1.对于任何一个类,都能判断对象所属的类;

2.对于任何一个类,都能获取其所有的属性和方法;

3.对于任何一个对象,都能调用任意一个方法和属性;

*/

 

三、反序列化的漏洞原理概述:

1、由于很多站点或者RMI仓库等接口处存在java的反序列化功能,攻击者可以通过构造特定的恶意对象序列化后的流,让目标反序列化,从而达到自己的恶意预期行为,包括命令执行,甚至getshell等等。

2、Apache Commons Collections

这是开源小组Apache研发的一个Collections收集器框架,提供诸如list、set、queue等功能对象。这个框架中有一个接口,其中有一个实现该接口的类可以通过调用java的反射机制来调用任意函数,这个接口类是InvokerTransformer。这个架构的广泛

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值