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方法。 

posted @ 2022-09-04 18:45  p0n9  阅读(508)  评论(0)    收藏  举报