反序列化漏洞原理从零学起-小白都能懂反序列化漏洞

前言

是不是语言基础不够好?是不是很想了解安全圈子里一天说到晚的java各类中间件反序列化漏洞的底层原理,但是看网上的文章又各种看不懂?首先,心态要摆正,java反序列化漏洞对于安全人员或者开发人员而言,都不是简单的东西,特别是网上上来就说cc链那些包含了各种设计模式的东西,自然很晦涩。本系列文章将从一个小白的视角(不要问为什么不用大佬的视角,因为我没有)去与圈内的大小伙伴进行探讨反序列化漏洞的成因,现状,以及挖掘。作为第一篇文章,先科普。

我来举个生动的例子,假如现在已经到2500年了,人类发明了空间穿梭机,原理是:如果你要去另外一个地方,先在本地将你的身体分解为一个个原子,然后目的地那里利用相同的原子将你重组,重组之后你就等于空间穿梭了。

类比:你作为一个对象,本地将你身体分解的动作就是序列化(将对象状态转化为字节序列或其他可以存储或传输的形式),目的地利用原子将身体还原的过程就是反序列化(将字节序列还原成对象)

为什么会出现序列化和反序列化这种东西?

按照上面的理解,人类世界出现空间穿梭机的原因就是因为它利于人类的出行,那计算机世界中一个道理,序列化和反序列化的存在也是因为便于数据存储和传输。
百度给的答案:
二进制序列化保持类型保真度,这对于在应用程序的不同调用之间保留对象的状态很有用。例如,通过将对象序列化到剪贴板,可在不同的应用程序之间共享对象。您可以将对象序列化到流、磁盘、内存和网络等等。远程处理使用序列化“通过值”在计算机或应用程序域之间传递对象。

反序列化漏洞

不妨大胆的想想,如果在进行空间穿梭的过程中,有可以控制或改变你穿梭过程中的状态的人存在。是不是很可怕呢?
对于计算机而言,无非就是输入-shell-输出,参考下冯诺依曼模型如下:
在这里插入图片描述
在这个过程中,存在了我们可以控制的数据。这个也是无法避免的,比如说,我们的QQ,给对方发送信息的内容必须交由客户控制,这也是实现某些功能的必须条件。
序列化和反序列化示意图如下:
序列化反序列化示意图
在反序列化过程中,也就是对对象进行还原的过程中,如果程序对不可信的数据进行了反序列化处理,那么攻击者就可以控制此序列化数据,进行恶意代码的输入,控制此应用程序,并获得此应用程序所在的载体(操作系统)的权限。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值