開啟之後是個**審計
還是先看一眼unserialize是個啥吧
__wakeup()函式用法:
wakeup()是用在反序列化操作中。unserialize()會檢查存在乙個wakeup()方法。如果存在,則先會呼叫__wakeup()方法。
像下面的這個,他的輸出就是hello,而不是反序列化後的值
<?php
class a
}$c = new a();
$d=unserialize('o:1:"a":0:{}');
?>
明白這些就可以開始看題了
題目的意思就是要我們想辦法繞過wakeup(),
而wakeup()的漏洞就是與整個屬性個數值有關。當序列化字串表示物件屬性個數的值大於真實個數的屬性時就會跳過wakeup的執行。
<?php
class xctf
}$content = new xctf(); //使用new運算子來例項化該類的物件content
echo serialize($content); //輸出被序列化的物件content
//輸出這個類的序列化,也就是把乙個類轉化成乙個字串
//wakeup()漏洞就是與整個屬性個數值有關。當序列化字串表示物件屬性個數的值大於真實個數的屬性時就會跳過wakeup的執行
//o:4:"xctf":1:
//xctf後的1就代表了屬性個數,只需修改1就可以繞過——wakeup()
?>
上面**理解後再來看題,接下來就是構造?code,最後得到flag
?code=o:4:"xctf":2:
攻防世界 web高階 unserialize3
class xctf code 注意到了 wakeup 如果需要反序列化的時候,php才會呼叫 wakeup 所以我們需要利用反序列化。那我們如果直接這樣?code o 4 xctf 1 那他會直接輸出bad requests,那這並不是我們想要的結果。所以我們還要利用漏洞繞過。而 wakeup 要...
攻防世界之unserialize3
題目 新知識 serialize 序列化函式,將物件轉化為可儲存可傳輸的字串 unserialize 反序列化,將字串轉為原來的物件 array a b banana c coconut 序列化陣列 s serialize a echo s echo 反序列化 o unserialize s pri...
攻防世界 十二 unserialize3
一道php反序列化的題 關鍵點 將類巴拉下來進行例項化,將例項化的物件進行序列化,然後再替換繞過 wakeup方法,如下 class xctf 例項化類 a newxctf 進行序列化 a serialize a 輸出檢視以下 echo a echo 替換繞過 wakeup方法 a str repl...