Java反序列化测试

前言:有没有想过,如何将对象进行“加密”后写入磁盘?序列化帮你实现!

1.概念

序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象.

2.反序列化Java实验

--测试的实体类--

 1 package exercise;
 2
 3 import java.io.Serializable;
 4
 5 public class Person implements Serializable{
 6     private String name;
 7     private int age;
 8
 9     public Person() {
10     }
11
12     public String getName() {
13         return name;
14     }
15
16     public void setName(String name) {
17         this.name = name;
18     }
19
20     public int getAge() {
21         return age;
22     }
23
24     public void setAge(int age) {
25         this.age = age;
26     }
27
28     public Person(String name, int age) {
29         super();
30         this.name = name;
31         this.age = age;
32     }
33
34 }

1)单对象序列化

 1 package exercise;
 2
 3 import java.io.FileInputStream;
 4 import java.io.FileOutputStream;
 5 import java.io.IOException;
 6 import java.io.ObjectInputStream;
 7 import java.io.ObjectOutputStream;
 8 import java.util.ArrayList;
 9 import java.util.List;
10
11
12 public class ObjectStreamDemo1 {
13     /**
14      * @param args
15      * @throws IOException
16      * @throws ClassNotFoundException
17      */
18
19     public final static String PATH = "obj.object1";
20
21
22     public static void main(String[] args) throws IOException,
23             ClassNotFoundException {
24         //writeObj();
25         readObj();
26         System.out.println("--End--");
27     }
28
29     public static void readObj() throws IOException, ClassNotFoundException {
30         ObjectInputStream ois = new ObjectInputStream(new FileInputStream(
31                 PATH));
32
33
34         Person p  = (Person)ois.readObject();
35         System.out.println(p.getName() + "|" + p.getAge());
36
37     }
38
39     public static void writeObj() throws IOException {
40         ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(
41                 PATH));
42
43         oos.writeObject(new Person("张三", 30));
44         oos.close();
45     }
46 }

结果显示

2)多对象序列化

 1 package exercise;
 2
 3 import java.io.FileInputStream;
 4 import java.io.FileOutputStream;
 5 import java.io.IOException;
 6 import java.io.ObjectInputStream;
 7 import java.io.ObjectOutputStream;
 8 import java.util.ArrayList;
 9 import java.util.List;
10
11
12 public class ObjectStreamDemo2 {
13     /**
14      * @param args
15      * @throws IOException
16      * @throws ClassNotFoundException
17      */
18     public final static String PATH = "obj.object";
19     public static void main(String[] args) throws IOException,
20             ClassNotFoundException {
21
22         //writeObj();
23         readObj();
24         System.out.println("---end!---");
25     }
26
27     public static void readObj() throws IOException, ClassNotFoundException {
28         ObjectInputStream ois = new ObjectInputStream(new FileInputStream(
29                 PATH));
30
31         List<Person> persons  = (List<Person>)ois.readObject();
32         for(Person p:persons){
33             System.out.println(p.getName() + "|" + p.getAge());
34         }
35     }
36
37     public static void writeObj() throws IOException {
38         ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(
39                 PATH));
40
41         List<Person> persons = new ArrayList<Person>();
42         Person p1 = new Person("张三",18);
43         Person p2 = new Person("李四",19);
44         persons.add(p1);
45         persons.add(p2);
46         oos.writeObject(persons);
47         oos.close();
48     }
49 }

结果显示

注意:

·实体类必须实现序列化接口“java.io.Serializable”

·生成的obj.object 因为是二进制文件,故无法正常打开,若notepad打开也是乱码!

总结:序列化技术在web端技术的应用相当重要,希望学习Java的朋友都能理解该技术并进行应用。

时间: 2024-10-17 06:57:59

Java反序列化测试的相关文章

浅谈java反序列化工具ysoserial

前言 关于java反序列化漏洞的原理分析,基本都是在分析使用Apache Commons Collections这个库,造成的反序列化问题.然而,在下载老外的ysoserial工具并仔细看看后,我发现了许多值得学习的知识. 至少能学到如下内容: 不同反序列化payload玩法灵活运用了反射机制和动态代理机制构造POC java反序列化不仅是有Apache Commons Collections这样一种玩法.还有如下payload玩法: CommonsBeanutilsCollectionsLog

Java反序列化漏洞通用利用分析

2015年11月6日,FoxGlove Security安全团队的@breenmachine 发布的一篇博客[3]中介绍了如何利用Java反序列化漏洞,来攻击最新版的WebLogic.WebSphere.JBoss.Jenkins.OpenNMS这些大名鼎鼎的Java应用,实现远程代码执行. 然而事实上,博客作者并不是漏洞发现者.博客中提到,早在2015年的1月28号,Gabriel Lawrence (@gebl)和Chris Frohoff (@frohoff)在AppSecCali上给出了

Java反序列化漏洞分析

相关学习资料 http://www.freebuf.com/vuls/90840.html https://security.tencent.com/index.php/blog/msg/97 http://www.tuicool.com/articles/ZvMbIne http://www.freebuf.com/vuls/86566.html http://sec.chinabyte.com/435/13618435.shtml http://www.myhack58.com/Articl

weblogic打补丁修复JAVA反序列化漏洞 &nbsp; &nbsp; &nbsp;

之前一篇文章记录部署web代理修复漏洞通过部署web代理来修复JAVA反序列化漏洞,这篇通过打补丁来修复这个漏洞.详见(Doc ID 2075927.1) 系统环境如下所示: OS:Oracle Linux Server release 6.1 64bit Weblogic:10.3.6 具体操作如下步骤所示: 1.备份备份备份 2.一切操作安装补丁README来 2.1 更新PSU 2.2 打补丁 1.备份 做好备份工作,无论是否可以回退,保证有备份 2.上传PSU weblogic补丁上传,

java反序列化漏洞原理研习

零.Java反序列化漏洞 java的安全问题首屈一指的就是反序列化漏洞,可以执行命令啊,甚至直接getshell,所以趁着这个假期好好研究一下java的反序列化漏洞.另外呢,组里多位大佬对反序列化漏洞都有颇深的研究,借此机会,努力学习,作为狼群中的哈士奇希望成功的继续伪装下去,不被识破,哈哈哈哈!!! 参考文档:感谢所有参考文献的作者: 1.https://www.cnblogs.com/bencakes/p/6139477.html 2.https://www.cnblogs.com/ssoo

java反序列化原理-Demo(一)

java反序列化原理-Demo(一) 0x00 什么是java序列化和反序列? Java 序列化是指把 Java 对象转换为字节序列的过程便于保存在内存.文件.数据库中,ObjectOutputStream类的 writeObject() 方法可以实现序列化.Java 反序列化是指把字节序列恢复为 Java 对象的过程,ObjectInputStream 类的 readObject() 方法用于反序列化. 0x01 java反序列漏洞原理分析 首先先定义一个user类需继承Serializabl

对ysoserial工具及java反序列化的一个阶段性理解

经过一段时间的琢磨与反思,以及重读了大量之前看不懂的反序列化文章,目前为止算是对java反序列化这块有了一个阶段性的小理解. 目前为止,发送的所有java反序列化的漏洞中.主要需要两个触发条件: 1.反序列化的攻击入口 2.反序列化的pop攻击链 这两个条件缺一不可.网上大量分析gadgets的文章方法,让人误以为有攻击链就可以反序列化.其实这块是有一定的误导性的.在我最初研究反序列化的时候,我觉得攻击链是最重要的.其实不然,反序列化的攻击入口才是至关重要的.因为现阶段的java环境加上java

Android网络传输中必用的两个加密算法:MD5 和 RSA (附java完成测试代码)

MD5和RSA是网络传输中最常用的两个算法,了解这两个算法原理后就能大致知道加密是怎么一回事了.但这两种算法使用环境有差异,刚好互补. 一.MD5算法 首先MD5是不可逆的,只能加密而不能解密.比如明文是yanzi1225627,得到MD5加密后的字符串是:14F2AE15259E2C276A095E7394DA0CA9  但不能由后面一大串倒推出yanzi1225627.因此可以用来存储用户输入的密码在服务器上.现在下载文件校验文件是否中途被篡改也是用的它,原理参见:http://blog.c

零成本实现接口自动化测试 – Java+TestNG 测试Restful service

本文是转载Wade Xu的文章http://www.cnblogs.com/wade-xu/p/4229805.html 接口自动化测试 – Java+TestNG 测试 Restful Web Service 关键词:基于Rest的Web服务,接口自动化测试,数据驱动测试,测试Restful Web Service, 数据分离,Java+Maven+TestNG 本文主要介绍如何用Java针对Restful web service 做接口自动化测试(数据驱动),相比UI自动化,接口自动化稳定性