1234567891011121314151617181920212223
<?phpclass index { private $test; public function __construct(){ $this->test = new normal(); } public function __destruct(){ $this->test->action(); }}class normal { public function action(){ echo "please attack me"; }}class evil { var $test2; public function action(){ eval($this->test2); }}unserialize($_GET['test']);?>
?1 : 如何控制你的对象里的成员属性的对象是那一个 ??2: 学习使用反推法
反序列化分隔符反序列化以;}结束,后面的字符串不影响正常的反序列化属性逃逸一般在数据先经过一次serialize再经过unserialize,在这个中间反序列化的字符串变多或者变少的时候有可能存在反序列化属性逃逸。
这样是反序列不了 , 成员属性 不对 $b成员属性是两个 所以要改成
漏洞产生原因:如果存在_wakeup方法,调用unserilize()方法前则先调用_wakeup方法,但是序列化字符串中表示对象属性个数的值大于真实的属性个数时,会跳过__wakeup()的执行
版本:PHP5<5.6.25PHP7<7.0.10
一个预定义好的,在特定情况下自动触发的行为方法。