php反序列化结构是什么


这篇文章主要介绍了php反序列化结构是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇php反序列化结构是什么文章都会有所收获,下面我们一起来看看吧。序列化的目的是方便数据的传输和存储,在PHP中,序列化和反序列化一般用做缓存,比如session缓存,cookie等。__wakeup() //执行unserialize()时,先会调用这个函数__sleep() //执行serialize()时,先会调用这个函数__destruct() //对象被销毁时触发__call() //在对象上下文中调用不可访问的方法时触发__callStatic() //在静态上下文中调用不可访问的方法时触发__get() //用于从不可访问的属性读取数据或者不存在这个键都会调用此方法__set() //用于将数据写入不可访问的属性__isset() //在不可访问的属性上调用isset()或empty()触发__unset() //在不可访问的属性上使用unset()时触发__toString() //把类当作字符串使用时触发__invoke() //当尝试将对象调用为函数时触发php7.1+反序列化对类属性不敏感我们前面说了如果变量前是protected,序列化结果会在变量名前加上x00*x00但在特定版本7.1以上则对于类属性不敏感,比如下面的例子即使没有x00*x00也依然会输出abc版本:PHP5
PH免费云主机域名P7
利用方式:序列化字符串中表示对象属性个数的值大于真实的属性个数时会跳过__wakeup的执行对于下面这样一个自定义类如果执行unserialize('O:4:"test":1:{s:1:"a";s:3:"abc";}');输出结果为666而把对象属性个数的值增大执行unserialize('O:4:"test":2:{s:1:"a";s:3:"abc";}');输出结果为abcpreg_match('/^O:d+/')匹配序列化字符串是否是对象字符串开头,这在曾经的CTF中也出过类似的考点利用加号绕过(注意在url里传参时+要编码为%2B)serialize(array(a ) ) ; / / a));//a));//a为要反序列化的对象(序列化结果开头是a,不影响作为数组元素的$a的析构)上面这个例子将$b设置为$a的引用,可以使$a永远与$b相等O:4:“test”:2:{s:4:“%00*%00a”;s:3:“abc”;s:7:“%00test%00b”;s:3:“def”;}可以写成O:4:“test”:2:{S:4:“0*061”;s:3:“abc”;s:7:“%00test%00b”;s:3:“def”;}表示字符类型的s大写时,会被当成16进制解析。关于“php反序列化结构是什么”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“php反序列化结构是什么”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注百云主机行业资讯频道。

相关推荐: C#如何实现递归调用的Lambda表达式

这篇文章主要讲解了“C#如何实现递归调用的Lambda表达式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#如何实现递归调用的Lambda表达式”吧!首先给一个简单的示例:可能有人说函数RecursiveRu…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 03/22 20:40
下一篇 03/22 20:40

相关推荐