攻防世界:web: unserialize3
阿新 • • 發佈:2021-10-29
知識點:
序列化:
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()
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、