1. 程式人生 > 其它 >攻防世界:web: unserialize3

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