当前位置: 首页> 教育> 大学 > PHP反序列化

PHP反序列化

时间:2025/7/10 1:35:19来源:https://blog.csdn.net/weixin_51591328/article/details/141174106 浏览次数:0次

序列化

序列化是将对象的状态信息转换为可以存储或传输的形式的过程;
不同的类型序列化结果不同;

    序列化
对象——————》字符串
$a = null;
echo serilaize($a);
空字符:N
整型:i:123
浮点型:d:2.2
bool型:b:1/0
字符串:s:长度:“xxx”

不能序列化‘类’,可以序列化‘对象’;
private私有属性序列化时,在变量名前加“%00类名%00”;
protected受保护属性序列化时,在变量名前加“%00*%00”;
在这里插入图片描述
在这里插入图片描述

反序列化漏洞生成poc时需要:urlencode(serialize($a));

反序列化特性

  • 反序列化之后的内容为一个对象;
  • 反序列化生成的对象里的值,由反序列化里的值提供;与原有类预定义的值无关;
$a = array('aby', 'hell');
$j = abya:2:{i:0;s:3:"abc";i:1;s:4:"hell";}
var_dump($j)===>abc,hell
  • 反序列化不触发类的成员方法;需要调用方法后才能触发;
class test{private $a;function f() {echo 'hello';}
}
class test1{protected $b;function g() {echo $b;}function __construct(){$this->b = new test;}}
$c = new test1;
echo serialize($c);
$j =O:5:"test1":1:{s:4:.....";
$j->g();
?>

可以直接通过反序列化对象来调用原本类中的成员方法,不需要实例化;
但是原本的类不能被删除,否则不能调用,且输出的值是当前反序列化对象的值,而不是类原有的值;

关键字:PHP反序列化

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: