php序列化与非序列化

0x00 基础知识

讲的超详细:http://www.javashuo.com/article/p-sdrgfdcm-mx.htmlphp

重点摘抄:html

一、序列化对象时,不会保存常量的值。对于父类中的变量,则会保留。函数

二、当调用serialize()函数序列化对象时,该函数会检查类中是否存在一个魔术方法__sleep()。若是存在,该方法会先被调用,而后才执行序列化操做。能够经过重载这个方法,从而自定义序列化行为。ui

三、若被反序列化的变量是一个对象,在成功从新构造对象以后,PHP会自动地试图去调用__wakeup()成员函数(若是存在的话)spa

0x01实践

xctf_unsealize3code

打开网址能够看到htm

 

关于非序列化字符串的构造可直接写代码执行一下它的序列化,也可手动构造,我是手动构造的:O:4:"xctf":1:{s:4:"flag";s:6:"111";},O表示对象,s表示字符串对象

由上可知,反序列化的若为对象,且存在_wakeup()成员函数,会自动调用,想办法绕过,百度可知当序列化字符串表示对象属性个数的值大于真实个数的属性时就会跳过__wakeup的执行blog

因此可构造:O:4:"xctf":2:{s:4:"flag";s:6:"111";}:字符串

0x03 总结

php语言果真是一门神奇的语言

相关文章
相关标签/搜索