反序列化漏洞

序列化 (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  阅读(42)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!
点击右上角即可分享
微信分享提示