java反序列化简介

原创 2016年04月16日 12:30:39

序列化就是把对象转换成字节流便于保存在内存、文件、数据库中;反序列化即逆过程,由字节流还原成对象。Java中的ObjectOutputStrram类的WriteObjrct()可以实现序列化,类ObjectInputStream类的readObject()方法用于反序列化。下面是将字符串对象先进行序列化,存储到本地文件,然后再通过反序列化进行恢复的样例代码:

public static void main(String args[]) throws Exception { 
    String obj = "hello world!";
    // 将序列化对象写入文件object.db中
    FileOutputStream fos = new FileOutputStream("object.db");
    ObjectOutputStream os = new ObjectOutputStream(fos);
    os.writeObject(obj);
    os.close();
    // 从文件object.db中读取数据
    FileInputStream fis = new FileInputStream("object.db");
    ObjectInputStream ois = new ObjectInputStream(fis);
    // 通过反序列化恢复对象obj
    String obj2 = (String)ois.readObject();
    ois.close();
}

问题在于,如果Java应用对用户输入,即不可信数据做了反序列化处理,那么攻击者可以通过构造恶意输入,让反序列化产生非预期的对象,非预期的对象在产生过程中就有可能带来任意代码执行。

所以这个问题的根源在于类ObjectInputStream在反序列化时,没有对生成的对象的类型做限制;假若反序列化可以设置Java类型的白名单,那么问题的影响就小了很多。

反序列化问题由来已久,且并非Java语言特有,在其他语言例如PHP和Python中也有相似的问题。@gebl和@frohoff的报告中所指出的并不是反序列化这个问题,而是一些公用库,例如Apache Commons Collections中实现的一些类可以被反序列化用来实现任意代码执行。WebLogic、WebSphere、JBoss、Jenkins、OpenNMS这些应用的反序列化漏洞能够得以利用,就是依靠了Apache Commons Collections。这种库的存在极大地提升了反序列化问题的严重程度,可以比作在开启了ASLR地址随机化防御的系统中,出现了一个加载地址固定的共享库

相关文章推荐

java反序列化利用

  • 2017年08月31日 23:54
  • 33.79MB
  • 下载

由Java反序列化对象异常想到的

由Java反序列化对象异常想到的serialVersionUID问题。
  • baosxie
  • baosxie
  • 2017年03月14日 23:06
  • 1259

java反序列化利用工具

  • 2016年07月06日 20:05
  • 34.27MB
  • 下载

weblogic Java反序列化漏洞测试和解决

一、打补丁从weblogic10.3.6打补丁到10.3.6.0.12  系统是windows 2008 server 64位  查看服务器的weblogic版本信息:cmd下执行 java we...

JAVA反序列化exp及使用方法

这两天很火的java反序列化漏洞,看到乌云大牛已经开始刷分,于是找来实践一波 exp来源ysoserialhttps://github.com/frohoff/ysoserial这个项目针对不同的ja...

使用Gson反序列化Json数据失败,报错JsonSyntaxException: java.lang.IllegalStateException

问题描述:使用Gson解析Json时,解析出错,无法映射为对象 解决途径: 1.查看报错信息,由于初学者,因此只看出来Gson解析有问题,打印http传回的json数据的确没问题。 2.搜索Gs...

反序列化过程怎么引发了 java.io.EOFException异常?

本帖最后由 谢冬 于 2013-3-11 04:19 编辑 package com.itheima_01; import java.io.FileInputStream...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java反序列化简介
举报原因:
原因补充:

(最多只允许输入30个字)