Loading

攻防世界: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、

 

 

posted @ 2021-10-29 19:05  sovo  阅读(67)  评论(0)    收藏  举报