首页 / PHP / 学习php的序列化和反序列化
学习php的序列化和反序列化
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了学习php的序列化和反序列化,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3130字,纯文字阅读大概需要5分钟。
内容图文
![学习php的序列化和反序列化](/upload/InfoBanner/zyjiaocheng/606/58d6bdb97bff4fc1bbb534d35ab93b5c.jpg)
学习php的序列化和反序列化
通过学长给的两个包含相关知识点的链接学习了相关的知识点
https://www.cnblogs.com/youyoui/p/8610068.html
自己在B站搜索相关内容也找到了相关的视频学习
先来讲讲学到了哪几个知识点和一些要注意的点
序列化
<?php class test{ private $a; protected $b; public $c; var $d; static $f; function __construct() { $this->a=$this->b=$this->c=$this->d=$this->f=$this->e=1; } $t=new test(); $p=serialize($t); print($p);
输出的结果是:
O:4:"test":6:{s:7:" test a";i:1;s:4:" * b";i:1;s:1:"c";i:1;s:1:"d";i:1;s:1:"e";i:1;s:1:"f";i:1;}
详细解释即为
O:strlen(object name):object name:object size:{s:strlen(property name):property name:property definition;(repeated per property)}
这里有两个值得注意的点,为什么testa的长度为7,以及为什么*b的长度为4?
在原来输出界面上看testa和*b里面是没有空格的,但是将输出的字符串复制出来会发现test前面有一个空格,test和a之间有一个空格,以及*前与*和b中间有空格,而原来的格式中空格那个位置是一个%00的ascii码,会占据一个位置,所以它们的长度分别是7和4。
从上面的输出也得知private变量的序列化输出是“%00类名%00变量名”,protected变量的输出是“%00*%00变量名。”
在“深度剖析PHP序列化和反序列化”那篇博客里还有一个值得注意的知识点“序列化对象时,不会保存常量的值。对于父类中的变量,则会保留。”
魔术方法__sleep
function __sleep() { return ["a","b"]; }
可以制定想要返回的函数值,输出结果为
O:4:"test":2:{s:7:" test a";i:1;s:4:" * b";i:1;}
反序列化
$n=unserialize('O:4:"test":6:{s:7:" test a";i:1;s:4:" * b";i:1;s:1:"c";i:1;s:1:"d";i:1;s:1:"e";i:1;s:1:"f";i:1;}'); var_dump($n);
输出结果
object(test)#2 (8) { ["a":"test":private]=> NULL ["b":protected]=> NULL ["c"]=> int(1) ["d"]=> int(1) [" test a"]=> int(1) [" * b"]=> int(1) ["e"]=> int(1) ["f"]=> int(1) }
魔术方法__wakeup
在执行反序列化过程中会先执行__wakeup这个函数
function __wakeup() { $this->c=22; }
用上述同样方法输出得到只有如下数据改变,其余数据不变
以上就是基础部分,在我的理解中序列化与反序列化就是将对象变为字符串和将字符串变为对象。
绕过__wakeup()函数
这个部分挺基础的
当对象的属性(变量)数大于实际的个数时,__wakeup()魔法函数被绕过,以下payload为例子
?file=O:1:"A":1:{s:4:"file";s:8:"flag.php";} //不能绕过 ?file=O:1:"A":2:{s:4:"file";s:8:"flag.php";} //能绕过
如果对象是private或者是protected,payload则变为
?file=O:1:"A":2:{s:7:"%00A%00file";s:8:"flag.php";} //private ?file=O:1:"A":2:{s:7:"%00*%00file";s:8:"flag.php";} //protected
session 反序列化注入漏洞
首先先了解Session序列化机制
当序列化的引擎和反序列化的引擎不一致时,就可以利用引擎之间的差异产生序列化注入漏洞
phar://
相关知识点已看完,正在与POP链一同总结中,日后填坑
字符串逃逸
已阅读完相关知识点,仍在总结中,日后填坑
学习中参考的文章
https://blog.csdn.net/qq_41107295/article/details/102943476
https://blog.csdn.net/qq_41107295/article/details/102943476
https://www.cnblogs.com/hello-py/articles/13501786.html
https://xz.aliyun.com/t/7570#toc-4
https://w.cnblogs.com/youyoui/p/8610068.html
内容总结
以上是互联网集市为您收集整理的学习php的序列化和反序列化全部内容,希望文章能够帮你解决学习php的序列化和反序列化所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。