unserialize3

把这一段序列化,可以得到O:4:"xctf":1:{s:4:"flag";s:3:"111";}
为了跳过执行__wakeup里面的exit,我们需要把这个东西修改一下
把:1:里面的1改成其他的比他大的数字,这样因为我们上传的代码里的变量数量和真正的不一样,这样代码在执行的时候就会出错,从而忘记执行__wakeup,成功绕过
所以payload就是?code=O:4:"xctf":2:{s:4:"flag";s:3:"111";}
Web_php_unserialize

先看代码的下半部分base64_decode会把我们上传的参数base64解码preg_match('/[oc]:\d+:/i'是一个正则匹配,不能出现O(object),也不能出现数字@unserialize($var)就是反序列化我们上传的参数
然后再看上半部分private是私有变量__destruct里面的代码会在销毁时执行,利用它把flag显示出来__wakeup()会把文件名改为index.php,要绕过
我们要构造一个Demo,里面包含着“fl4g.php”这个变量(而且是一个私有变量)
私有变量在序列化的时候,类名和属性名中间会有不可见空字符
绕过正则的方法:这个正则只会匹配0-9,并不会匹配+,但是php可以正常识别
为了绕过__wakeup,则需要把属性个数改大就好了
最后再把payload base64编码
最终得到TzorNDoiRGVtbyI6Mjp7czoxMDoiAERlbW8AZmlsZSI7czo4OiJmbDRnLnBocCI7fQ==



































































































































