反序列化漏洞

序列化 (serialize)是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。【将状态信息保存为字符串】

简单的理解:将PHP中 对象、类、数组、变量、匿名函数等,转化为字符串,方便保存到数据库或者文件中

什么是反序列化?

序列化就是将对象的状态信息转为字符串储存起来,那么反序列化就是再将这个状态信息拿出来使用。(重新再转化为对象或者其他的)【将字符串转化为状态信息】

本质上serialize()和unserialize()在PHP内部实现上是没有漏洞的,漏洞的主要产生是由于应用程序在处理对象、魔术函数以及序列化相关问题的时候导致的。

当传给 unserialize() 的参数可控时,那么用户就可以注入精心构造的payload。当进行反序列化的时候就有可能会触发对象中的一些魔术方法,造成意想不到的危害。

php中有一类特殊的方法叫“Magic function”(魔术方法), 这里我们着重关注一下几个:

construct():当对象创建(new)时会自动调用。但在unserialize()时是不会自动调用的。(构造函数) —destruct():当对象被销毁时会自动调用。(析构函数) __wakeup() :如前所提,unserialize()时会自动调用。

反序列化漏洞: 单机游戏--- 存档---当前人物得状态、装备、血量等等进行存储-本机-文件 文件--字符 存档:当前人物得状态---->字符串 读档:字符串---->人物当时的状态

序列化:对象的状态信息转换为可以传输或存储的过程,【对象状态信息转化为字符串】 反序列:将字符串转换为对象当时的状态信息【字符串转换为对象状态信息】

php序列化的结果:string(39) "O:7:"chybeta":1:{s:4:"test";s:3:"123";}"

string(number)--字符串 O:7:"chybeta"===>o-object对象;7--类名长度;chybeta---类名 1:{s:4:"test";s:3:"123";}---> 1-一个属性 {}--属性内容 s--字符串 4--字符串长度 test--表示属性名 ;--分割 s --字符串 3 -- 字符串长度 123--属性test的值 ;分割。


__EOF__

本文作者Crushz
本文链接https://www.cnblogs.com/Crushz-2024/p/18392073.html
关于博主:Crushz
版权声明:转载请注明来源哟~ QAQ
声援博主:UP UP UP !!!
posted @   Crushz  阅读(41)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
点击右上角即可分享
微信分享提示