PHP反序列化

序列化

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

    序列化
对象——————》字符串
$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();
?>

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值