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反序列化漏洞详解

 Java反序列化漏洞从爆出到现在快2个月了,已有白帽子实现了jenkins,weblogic,jboss等的代码执行利用工具。本文对于Java反序列化的漏洞简述后,并对于Java反序列化的Po...
  • fengling59
  • fengling59
  • 2015年12月26日 21:25
  • 2620

Java对象反序列化防护

最近一直曝光的开源软件第三方反序列化漏洞: CVE-2015-7501Commons Collections Java反序列化漏洞 Springframework 反序列化RCE漏洞 都是由于Java...
  • raintungli
  • raintungli
  • 2016年07月07日 23:14
  • 1872

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

 1 背景 2015年11月6日,FoxGlove Security安全团队的@breenmachine 发布的一篇博客[3]中介绍了如何利用Java反序列化漏洞,来攻击最新版的WebLogi...
  • gl74gs48
  • gl74gs48
  • 2016年05月20日 10:53
  • 7277

Java对象序列化与反序列化

Java对象转换为字节序列的过程称为序列化,用途是对象永久保存、传输。序列化运行时使用一个称为 serialVersionUID 的版本号与每个可序列化类相关联,该序列号在反序列化过程中用于验证序列化...
  • BonJean
  • BonJean
  • 2016年07月25日 22:59
  • 2514

java反序列化安全实例解析

什么是序列化 序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列...
  • qq_35904259
  • qq_35904259
  • 2017年03月11日 15:01
  • 670

xstream ---java序列化到xml,xml反序列化到java对象(一)

一、简单介绍 XStream是thoughtworks开发的开源框架,用于实现XML数据于Java对象、Json数据的转换。它不需要schema或其他的mapping文件就可以进行java对象和xml...
  • u014520047
  • u014520047
  • 2016年09月01日 13:32
  • 892

Java反序列化漏洞修复方案

据Oracle、Cert及我们自测,受影响版本包括但不限于: - 9.2.3.0 - 9.2.4.0 - 10.0.0.0 - 10.0.1.0 - 10.0.2.0 - 10.2.6.0...
  • igangnamstyle
  • igangnamstyle
  • 2016年04月18日 09:56
  • 4319

【Java】——Json反序列化为Java对象

【项目需求】    最近做项目的时候,功能是将一个表单和一个datagrid中的集合中的数据一起传到后台去,也就是将接送。 【思路】   1、在之前做过的功能中,我们用过@request...
  • u013035538
  • u013035538
  • 2016年07月24日 21:15
  • 4295

java中的序列化(Serializable)和反序列化

JAVA序列化与反序列化就是JAVA对象与一串字节流之间的相互转换, 我们在程序中创建的JAVA对象只存在于JVM中, 当程序退出时, 这些对象也就消失了, 而序列化正是为了将这些对象保存起来以仅将来...
  • jason_279
  • jason_279
  • 2016年10月27日 16:37
  • 4327

悬镜安全丨Java 反序列化任意代码执行漏洞分析与利用

利用国内的漏洞利用工具
  • Anprou
  • Anprou
  • 2016年11月14日 10:15
  • 3510
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java反序列化简介
举报原因:
原因补充:

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