php中的魔术方法以及一些反序列化绕过
在php反序列化中,一般都会用到一些魔术方法。
1.__construct():在new一个对象的时候首先调用的函数,一般用于初始化。

2.__destruct():一个对象被销毁的是时候自动调用。

3.__get($p):访问的属性不存在或者权限不允许(protected和private)时调用,其中$p为值。
4.__set($p1,$p2):访问的属性不存在或者权限不允许(protected和private)时调用,其中$p1为参数,$p2为值。例如:$obj->p1 = 'p2';
5.__call($p1,$p2):与__set()和__get()类似,当访问的函数不存在或者权限不允许(protected和private)时调用,其中$p1为函数名,$p2为参数名。例如:$obj->p1("p2") ;
6.__invoke():当对象被当作函数时会调用。例如$obj();
7.__toString():当对象被echo等当成string时会调用。例如echo $obj;
8.__sleep():当使用序列化函数serialize()之前调用。
9.__wakeup():当使用反序列化函数unserialize()之前调用。绕过:PHP5 < 5.6.25、PHP7 < 7.0.10当序列化结果中属性个数大于真实的个数,可绕过__wakeup方法。

浙公网安备 33010602011771号