java反序列化漏洞

JAVA反序列化漏洞是由于开发者重写了readObject方法,该readObject方法方法调用了别的方法,最终执行到了例如Transfrom方法的危险方法

java序列化过程:

调用一个函数进行序列化,存放到一个文件内,再将文件反序列化回来,涉及到文件的读写

序列化与反序列化

序列化:

ObjectOutputStream --> writeObject ()

反序列化:

ObjectInputStream--> readObject()

java内进行序列化反序列化,需要先和序列化反序列化存在继承关系才可以使用方法

涉及到方法的重写,子类继承父类的方法,子类需要方法更加精细,需要扩展一些功能,重写这个方法使其更加适合自己,当重写父类某个方法后,调用子类的方法

假设开发者在java反序列化的代码内加入了一行调用计算器的代码,代指那些被重写以后的反序列化方法里存在的危险代码

Person

  1. import java.io.IOException;
  2. import java.io.ObjectInputStream;
  3. import java.io.Serializable;
  4. public class Person implements Serializable {
  5. public int age;
  6. public String name;
  7. private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
  8. Runtime.getRuntime().exec("calc");
  9. // 默认的反序列化操作
  10. in.defaultReadObject();
  11. }
  12. }

test

  1. import java.io.*;
  2. public class Test {
  3. public static void main(String[] args) throws IOException, ClassNotFoundException {
  4. Person p=new Person();//获取一个Person对象,赋两个值给person对象
  5. p.age=18;
  6. p.name="xiu";
  7. //调用serialize函数,对象p为刚创建的Person对象,路径没有绝对路径,没有相应的文件,会在当前路径创建一个文件,把对象序列化存入
  8. serialize(p,"xiu.bin");
  9. //输出
  10. System.out.println("反序列化结果:" + deserialize("xiu.bin"));
  11. }
  12. //serialize接收两个参数,一个对象,一个文件路径,把序列化后的obj对象,存储到filePath指定的文件路径里
  13. public static void serialize(Object obj, String filePath) throws IOException {
  14. try (FileOutputStream fileOut = new FileOutputStream(filePath);
  15. ObjectOutputStream objectOut = new ObjectOutputStream(fileOut)) {
  16. objectOut.writeObject(obj);
  17. }
  18. }
  19. //给deserialize一个文件路径,该函数会把这个文件内的内容反序列化回对象
  20. public static Object deserialize(String filePath) throws IOException, ClassNotFoundException {
  21. try (FileInputStream fileIn = new FileInputStream(filePath);
  22. ObjectInputStream objectIn = new ObjectInputStream(fileIn)) {
  23. return objectIn.readObject();
  24. }
  25. }
  26. }

先把Person内的重写反序列化注释掉,使用系统的原生反序列化操作

执行后的结果如下,创建了一个xiu.bin文件,输出了反序列化的结果

查看xiu.bin里序列化的内容

取消掉注释后执行Test文件计算器调用,意味着危险代码被执行

重写了某个readObject方法,实现链式调用,导致java的反序列化

java反序列化与反序列化的更多相关文章

  1. Java序列化与反序列化

    Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?本文围绕这些问题进行了探讨. 1.Java序列化与反序列化 Java序列化是指把Java对象转换为字节序列 ...

  2. [转] Java序列化与反序列化

    原文地址:http://blog.csdn.net/wangloveall/article/details/7992448 Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java ...

  3. Java序列化与反序列化(Serializable)

    Java序列化与反序列化(Serializable) 特别注意: 1.要序列化的类必须实现Serializable借口 2.在反序列化(读取对象)的时候必须额外捕获EOFException 3.序列化 ...

  4. Java基础(五)-Java序列化与反序列化

    .output_wrapper pre code { font-family: Consolas, Inconsolata, Courier, monospace; display: block !i ...

  5. JAVA序列化和反序列化XML

    package com.lss.utils; import java.beans.XMLDecoder; import java.beans.XMLEncoder; import java.io.Bu ...

  6. Java序列化与反序列化(实践)

    Java序列化与反序列化(实践) 基本概念:序列化是将对象状态转换为可保持或传输的格式的过程.与序列化相对的是反序列化,它将流转换为对象.这两个过程结合起来,可以轻松地存储和传输数据. 昨天在一本书上 ...

  7. java序列化与反序列化(转)

    Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?本文围绕这些问题进行了探讨. 1.Java序列化与反序列化 Java序列化是指把Java对象转换为字节序列 ...

  8. ref:Java安全之反序列化漏洞分析(简单-朴实)

    ref:https://mp.weixin.qq.com/s?__biz=MzIzMzgxOTQ5NA==&mid=2247484200&idx=1&sn=8f3201f44e ...

  9. Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?

    Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?本文围绕这些问题进行了探讨.  1.Java序列化与反序列化  Java序列化是指把Java对象转换为字节 ...

  10. (记录)Jedis存放对象和读取对象--Java序列化与反序列化

    一.理论分析 在学习Redis中的Jedis这一部分的时候,要使用到Protostuff(Protobuf的Java客户端)这一序列化工具.一开始看到序列化这些字眼的时候,感觉到一头雾水.于是,参考了 ...

随机推荐

  1. React onBlur回调中使用document.activeElement返回body解决方案

    最开始想实现一个功能,点击img图标后给出购物下拉框CartDropdown,当img及CartDropdown失去焦点时隐藏CartDropdown. 最开始的核心代码如下: export defa ...

  2. 从 API 网关聊到 API 管理

    在 API 管理中,通常会有这些痛点: 1.企业不清楚到底有多少个API,无法形成API资产管理等问题. 2.API在不同集群的生命周期问题. 3.API运行状态监控和告警问题. 4.API请求限流. ...

  3. 2023 Hubei Provincial Collegiate Programming Contest题解 C F H I J K M

    补题链接:https://codeforces.com/gym/104337 原文链接:https://www.eriktse.com/algorithm/1136.html M. Different ...

  4. shiro拦截axios请求导致@RequireRole注解失效

    文章目录 ShiroRequiresRole注解对于axios请求无效 场景再现 解决方案 网上的解决方案 最近在整理一个自己以前做过的系统,想要添加一些功能,发现shiro框架出现了点问题,觉得这个 ...

  5. LeetCode 周赛 343(2023/04/30)结合「下一个排列」的贪心构造问题

    本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问. 大家好,我是小彭. 今天是五一假期的第二天,打周赛的人数比前一天的双周赛多了,难道大家都只玩一天吗?这场周赛 ...

  6. 【GiraKoo】线程本地存储(Thread Local Storage, TLS)

    [技术分享]线程本地存储(Thread Local Storage, TLS) 在项目开发中,遇到了关于TLS相关的问题.为了了解该机制的用途,在微软的官网查找了一些资料. 本文参考官方文档, 简单介 ...

  7. pupstudy的使用

    打开环境 点击管理--打开根目录 把靶场放在www文件夹里 网页打开127.0.0.1/靶场文件名即可

  8. 有关ODOO的ORM操作

    1.查询操作 sale_id = self.env['sale.order'].search([]) env将对象实例化,search进行搜索,可以根据需求添加搜索条件 search_count([] ...

  9. Blazor HyBrid 授权讲解

    Blazor HyBrid 授权讲解 本文介绍 ASP.NET Core 对 Blazor Hybrid 应用中的安全配置和管理及 ASP.NET Core Identity 的支持. Blazor ...

  10. 顶级生物信息学 RSS 订阅源

    早在 2018 年的时候我在"生信草堂"的公众号上写过一篇关于 RSS 的文章<使用 RSS 打造你的科研资讯头条>,介绍了关于 RSS 的一些内容和如何使用 inor ...