反序列化攻击原理及防御措施(已解决)

java反序列漏洞原理分析及防御修复方法 Java反序列化漏洞原理 谈起java反序列化漏洞,相信很多人都不会陌生,这个在2015年首次被爆出的漏洞,几乎横扫了包括Weblogic、WebSphere、JBoss、Jenkins等在内的各大java web server,历经几年的发展变种,各种语言工具依次爆出存在可利用的反序列化漏洞。 具全网分析以及shodan扫描显示,时至今日,在全球范围内的公网上大约有136,818台服务器依... 阅读详情

反序列化攻击原理及防御措施(已解决)

**java序列化算法透析**

Serialization(序列化)是一种将对象以一连串的字节描述的过程;反序列化deserialization是一种将这些字节重建成一个对象的过程。Java序列化API提供一种处理对象序列化的标准机制。在这里你能学到如何序列化一个对象,什么时候需要序列化以及Java序列化的算法,我们用一个实例来示范序列化以后的字节是如何描述一个对象的信息的。

序列化的必要性
Java中,一切都是对象,在分布式环境中经常需要将Object从这一端网络或设备传递到另一端。
这就需要有一种可以在两端传输数据的协议。Java序列化机制就是为了解决这个问题而产生

如何进行序列化

public class Java_Test {
    public static void main(String args[]) throws Exception {
       Peoper peoper = new Peoper();
       // peoper1.setAge(6);
        peoper.setName("zy");
        //peoper1.setJob("6666666666");

        // 将序列化对象写入文件object.txt中
        FileOutputStream fos = new FileOutputStream("object.ser");
        ObjectOutputStream os = new ObjectOutputStream(fos);
        os.writeObject(peoper);
        os.close();

        // 从文件object.txt中读取数据
        FileInputStream fis = new FileInputStream("object.ser");
        ObjectInputStream ois = new ObjectInputStream(fis);
        //MyObjectInputStream ois = new MyObjectInputStream(fis);
        //ObjectInputStream ois = new ObjectInputStream(fis);
        // 通过反序列化恢复对象obj
        Peoper peoper1 = (Peoper) ois.readObject();
        System.out.println(peoper1);
        ois.close();
    }
}

序列化漏洞发生的位置
在反序列化的过程中,我们通过ObjectInputStream来进行字节码的读取,但是在该类中没有对将要序列化的对象进行校验。攻击者则可以通过构造POC的方式,把自己构造的对象提交到服务器,服务器在反序列化的工程中会执行readObject方法,而此方法可以在构造的对象中重写。
通过改变transferedMap的key或则value值来触发transferChain的系统函数的执行,从而控制服务器,造成严重的损失。
解决方案原理核心
通过重写ObjectInputStream的resolveClass方法对即将序列化的对象进行校验(在反序列化之前进行),从而达到避免反序列化漏洞的风险。
解决方法具体代码如下

public class MyObjectInputStream extends ObjectInputStream {
    public MyObjectInputStream(InputStream in) throws IOException {
        super(in);
    }

    protected MyObjectInputStream() throws IOException, SecurityException {
    }

    @Override
    protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException {
        if (desc == null) {
            return super.resolveClass(desc);
        }
        if (!desc.getName().equals(Peoper.class.getName())) {
            throw new InvalidClassException("不能序列化,可能有攻击",desc.getName());
        }
        return super.resolveClass(desc);
    }
}

在实际开发过程中代码示例

public class MyObjectInputStream extends ObjectInputStream {
    public MyObjectInputStream(InputStream in) throws IOException {
        super(in);
    }

    protected MyObjectInputStream() throws IOException, SecurityException {
    }

    @Override
    protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException {
        if (desc == null) {
            return super.resolveClass(desc);
        }
        if (!desc.getName().contains("被序列化对象包名")) {
            throw new InvalidClassException("不能序列化,可能有攻击",desc.getName());
        }
        return super.resolveClass(desc);
    }
}

以上是个人处理方式以及见解,如有不妥之处,希望之处!!!!

深入理解反序列化攻击:原理、示例与利用工具实战 序列化是将内存中的数据结构(对象)转化为字符串或二进制,以便存储或传输。反序列化则是将序列化后的数据重新恢复为原来的对象结构。许多编程语言(如 PHP、Java、Python)都内置了序列化/反序列化机制。s:4:"role";s:4:"root";// 恢复为数组");反序列化攻击是一类“只要存在入口就可能打穿”的严重漏洞。尤其在现代框架广泛引入“魔术方法”和自动对象映射的背景下,开发者应特别警惕反序列化行为,避免暴露攻击面。 阅读详情

相关推荐

反序列化漏洞攻击原理(Dubbo反序列化漏洞剖析)

目录 一、前言 二、序列化与反序列化简介 三、反序列化怎样才会被利用? 1、说明 2、关键类说明-Transformer 3、关键类说明-TransformedMap 4、关键类说明-AnnotationInvocationHandler 5、攻击原理 6、攻击代码简介 四、Dubbo反序列化漏洞剖析 1、Dubbo的漏洞简介 2、漏洞复现步骤 3、如何解决漏洞 五、更...

跳小闹成长记 1万+

反序列化攻击详细解释

简介 详细的记录学习过程中的笔记,可以加我qq一起交流:3316735898 什么是序列化与反序列化 举一个例子,当你在玩游戏时,你正在操作的角色看起来如下 但反序列化后看起来就像这样 Vincent = { "type": "player" "health": 100, "position":{ "x": 31337, "y":13.37, "z":4444 } } 这些只是一个充满值的对象,但当你关闭游戏时,这些值存储在电脑的RAM上,然后就永远消失了 如果想要把这些东西保存下来,ob

Ba1_Ma0的博客 6780

Java反序列化漏洞防御体系构建指南

Runtime.exec执行命令。恶意对象readObject。

资深全栈架构师,乐于在 优快云 分享技术见解,与大家携手共进,共攀技术巅峰! 1199

反序列化漏洞原理、成因、危害、攻击、防护、修复方法

首先,我们定义一个简单的Java类,该类具有可序列化的属性。// 标准的getter和setter方法 public String getUsername() {} }// 标准的getter和setter方法 public String getUsername() {} }// 标准的getter和setter方法。

白帽子凯哥聊黑客 1万+

如何在处理敏感数据序列化时确保安全性,防范反序列化攻击?

序列化是数据在网络传输、存储、持久化时的关键环节,它将复杂的数据结构转换为字节流或字符串,使其能够在不同环境下重新构建。然而,如果序列化和反序列化过程没有得到妥善处理,就可能带来安全风险,甚至成为攻击者的突破口。在软件开发中,安全性不是一个选项,而是一项必要的责任。反序列化攻击是指攻击者通过传递恶意构造的序列化数据,在目标环境中执行非预期的代码。本文将深入探讨如何安全地进行数据序列化,识别潜在风险,并提供实战策略来防范反序列化攻击。这样,即使攻击者修改数据,由于签名校验失败,服务器不会接受篡改的内容。

铭渊老黄 197

AstrBot插件开发全攻略:从零编写一个天气查询插件(Python实战)

本文提供了一份详细的AstrBot插件开发实战指南,手把手教你使用Python从零编写一个智能天气查询插件。内容涵盖插件系统核心设计、开发环境搭建、API调用与数据处理、自然语言交互实现以及插件打包发布全流程,帮助你快速掌握基于AstrBot框架的聊天机器人功能扩展技能。

weixin_29212867的博客 1082

Java反序列化攻击通俗讲解

想象一下,你把一只猫放进冰箱(序列化),需要时再拿出来(反序列化)。但黑客偷偷把冰箱里的猫换成了老虎(恶意代码),当你打开冰箱时——砰!老虎跳出来咬你一口!这就是Java反序列化攻击的可怕之处。

weixin_43172311的博客 2394

layui 监听单元格点击事件,获取当前点击单元格的内容以及 所在的表头内容

特别是后台的一些管理系统中 业务中还是会碰见这样的需求呢 如果你的后台使用layui写的话 在表格中 layui 也给我们提供了监听单元格的事件 但是好像不能直接获取到单元格内容个 和 对应的表头 其实 还是可以解决 换个角度使劲就会发现新的世界 不是吗 event: 'username' 在每个表头中加一个 event 属性 这样就可以监听表头事件 记住个 event 和 当前列的字段最好保持一样 table.render({ e...

业余前端的职业经历 1万+

反序列化漏洞原理剖析:从攻击到防御

序列化(Serialization):指将对象(如程序中的数据结构、类实例等)转换为可存储或传输的格式(如JSON、XML、二进制流等)。例如,保存用户会话状态或传输数据时常用此技术。反序列化(Deserialization):将序列化后的数据还原为原始对象的过程。例如,服务器接收客户端发送的序列化数据后,需反序列化以恢复对象状态。反序列化漏洞的本质是程序对“数据还原为对象”这一过程缺乏安全控制。

分享web安全、AI安全、云安全、业务安全、渗透测试、安全开发、安全工具、行业动态等优质内容…… 1305

Dia 使用说明

简述 在linux上面能找到dia这个工具还是挺幸运的,因为之前画流程图总是使用ubuntu默认的word工具 在里面画图,感觉流程图使用起来麻烦,并且视觉效果真的不好看。 自从使用Dia后,感觉至少画起来流程图会变得越来越标准了。但是Dia也存在问题,就是使用的文档很少,使用中遇到为后,查起来比较费劲,但是至少问题不是很多,所以使用中遇到的几点问题我就记下来,和大家分享,加快大家的开发和文档整理能力。 我会按照遇到的问题来说,不存在使用的先后顺序。 1. Dia 去掉背景中的线条 首先去点那个大一点的蓝色

linan101的博客 4926

【学习笔记】一文搞懂IEPE传感器

本文介绍了IEPE(集成电路压电式)传感器的工作原理及其在振动监测中的应用。通过压电效应原理,IEPE传感器将机械振动转换为电信号,内置电荷放大器将高阻抗电荷信号转换为低阻抗电压信号输出。还介绍了传感器的三轴测量结构、4mA恒流源供电机制以及灵敏度与量程的关系,并通过风扇实验演示了故障诊断过程。实验使用USB-3123采集卡和SRD-1104信号调理器,展示了正常与异常状态下的振动数据差异,验证了IEPE传感器在设备状态监测中的有效性。

m0_62969865的博客 2813

网络安全-反序列化漏洞简介、攻击与防御

目录 简介 PHP序列化 Python序列化 攻击 PHP举例 Python举例 防御 参考 简介 各种语言都有反序列化漏洞,Java、PHP、Python等。序列化即将对象转化为字节流,便于保存在文件,内存,数据库中;反序列化即将字节流转化为对象,也就是序列化的逆过程。 PHP序列化 php中序列化和反序列化函数为serialize、unserialize。 我们尝试对一些类型进行序列化 <?php // 字符串类型 $s = "a string"; $serializ

关注网络安全、云原生安全 1万+

全网首发:香橙派5MAX安装ubuntu20.04(换了官方桌面)及ros,运行LIVOX-mid360混合固态激光雷达,实际测试fastlio(只能说可以跑,还是有点吃力)

独家发布!!!香橙派5MAX安装ubuntu20.04(换了官方桌面)及ros,运行mid360混合固态激光雷达,测试fastlio(只能说可以跑,还是有点吃力),国货也算崛起了。

2402_82745259的博客 5996

使用WAF防御网络上的隐蔽威胁之反序列化攻击

什么是反序列化 反序列化是将数据结构或对象状态从某种格式转换回对象的过程。这种格式通常是二进制流或者字符串(如JSON、XML),它是对象序列化(即对象转换为可存储或可传输格式)的逆过程。

TIKTOKER2的博客 2873

OpenHarmony深度定制:从系统到模块的全景剖析与自定义模块实战

目标:在中新增一个算法库,让产品可直接调用。关闭不用的 20+ 系统部件,ROM 缩小 50 %;为自家芯片新增专用驱动模块,快速点亮开发板;内将核心算法库以部件形式集成,实现商业闭源。万物互联时代,差异化才是护城河。

m0_67505153的博客 1031

基于STM32+Qt上位机设计的智慧停车场管理系统(207)

本项目设计了一套基于STM32+Qt上位机的智慧停车场管理系统。该系统融合了先进的嵌入式技术、图像识别技术、数据库技术和移动互联网技术,通过STM32硬件端实时采集车库现场信息,包括车牌识别、车位占用状态监测等,并将数据上传至Qt上位机进行处理与展示。利用MySQL数据库存储车辆出入库记录及车位使用情况,确保数据的安全性和可追溯性;通过Android手机APP为用户提供查询、支付等功能,实现远程交互与便捷服务。

3940

PHP反序列化攻击通俗解释

想象一下,你把一只折叠好的纸鹤(序列化后的数据)展开(反序列化),结果它突然变成了一只带刀片的机械鸟,狠狠啄了你一下——这就是PHP反序列化攻击的可怕之处。

weixin_43172311的博客 1226

ESP32S3 TLS 握手WIFI可用但是在蜂窝热点下卡死:排查方法与根因

设备卡在等。

摸鱼专家 85
上一篇: SpringCloud注册中心Eureka源码分析(四)
下一篇: Thrift框架入门使用及原理(学习之路)
烫手的砖
博客等级 码龄8年 7粉丝 40原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值