WEB渗透—反序列化(五)

Web渗透—反序列化        课程学习分享(课程非本人制作,仅提供学习分享)


靶场下载地址:GitHub - mcc0624/php_ser_Class: php反序列化靶场课程,基于课程制作的靶场

课程地址:PHP反序列化漏洞学习_哔哩哔_bilibili


九、错误调用相关魔术方法

1.__call()

调用不存在的方法的名称和参数时触发魔术方法

WEB渗透—反序列化(五)_第1张图片

 callxxx('a');     //调用的方法callxxx()不存在,触发魔术方法call()
?>

触发时机:调用一个不存在的方法

功能:(无)

参数:2个参数传参$arg1,$arg2

返回值:调用的不存在的方法的名称和参数

触发call(),传参$arg1,$arg2(callxxx,a)

$arg1,调用不存在的方法的名称;$arg2,调用不存在的方法的参数;

2.__callStatic()

静态调用或调用成员变量时使用的方法不存在时触发魔术方法

WEB渗透—反序列化(五)_第2张图片

触发时机:静态调用或调用成员常量时使用的方法不存在。

功能:(无)

参数:调用的不存在的方法$arg1.$arg2

返回值:调用的不存在的方法的名称和参数

触发callStatic(),传参$arg1,$arg2(callxxx,a)

$arg1,调用不存在的方法的名称;$arg2,调用不存在的方法的参数;

3.__get()

调用成员属性不存在时触发魔术方法

WEB渗透—反序列化(五)_第3张图片

var2;     //调用的成员属性var2不存在
?>

触发时机:调用的成员属性不存在

功能:(无)

参数:传参$arg1

返回值:不存在的成员属性的名称

触发get(),把不存在的属性名称var2赋值给$arg1

4.__set()

给不存在的成员属性赋值时触发魔术方法

WEB渗透—反序列化(五)_第4张图片

var2 = 1;     //给不存在的成员属性var2赋值为1
?>

触发时机:给不存在的成员属性赋值

功能:(无)

参数:传参$arg1,$arg2

返回值:不存在的成员属性的名称和赋的值

先触发get(),再触发set()

$arg1,不存在成员属性的名称;$arg2,不存在的成员属性var2赋的值

5.__isset()

对不可访问属性或不存在的属性使用isset()或empty()会触发魔术方法

WEB渗透—反序列化(五)_第5张图片

var);     //isset调用的成员属性var不可访问或不存在
?>

触发时机:对不可访问属性或不存在属性使用isset()或empty()时__isset()会被调用。

功能:(无)

参数:传参$arg1

返回值:不存在的成员属性的名称

触发inset(),返回$arg1,不存在或不可访问的成员属性的名称

isset()函数用于检测变量是否已经设置并且非空,如果非空返回true,否则返回false。

empty()函数用于检测一个变量是否为空,如果为空返回true,否则返回false。

6.__unset()

对不可访问属性或不存在的属性使用unset()会触发魔术方法

WEB渗透—反序列化(五)_第6张图片

var);     //unset调用的成员属性var不可访问或不存在
?>

触发时机:对不可访问属性或不存在属性使用unset()时__unset()会被调用。

功能:(无)

参数:传参$arg1

返回值:不存在的成员属性的名称

触发unset(),返回$arg1,不存在或不可访问的成员属性的名称

unset()函数用于销毁指定变量,释放内存。如果成功销毁变量,则返回true,否则返回false。

7.__clone()

当使用clone关键字考本完成一个对象后,新对象会自动调用魔术方法

WEB渗透—反序列化(五)_第7张图片

触发时机:当使用clone关键字拷贝完成一个对象后,新对象会自动调用定义的魔术方法__clone()

功能:(无)

参数:(无)

返回值:(无)

clone关键字用于创建一个对象的副本(即克隆一个对象)。

它是对象复制的一种方式,可以用来创建一个新的对象,而不是引用原始对象。通过使用clone,我们可以创建一个完全独立的对象,并且这个对象的属性值与原始对象相同。

汇总表格

__construct() __destruct() __sleep() __wakeup()
触发时机 实例化对象 对象引用完成或对象被销毁反序列化之后 序列化serialize()之前 反序列化unserialize()之前
功能 提前清理不必要内容 对象被序列化之前触发,返回需要被序列化存储的
参数
返回值 需要被序列化存储的成员属性
__toString __invoke() __call() __callStatic()
触发时机 对象被当成字符串调用(使用echo或者print) 把对象当成函数调用 调用一个不存在的方法 静态调用不存在的方法
功能
参数 $arg1,$arg2 $arg1,$arg2
返回值 调用的不存在的方法的名称和参数 调用的不存在的方法的名称和参数
__get() __set() __isset() __unset()
触发时机 调用成员属性不存在 给不存在的成员属性赋值 对不可访问属性使用isset()或empty() 对不可访问属性使用unset()
功能
参数 $arg1 $arg1,$arg2 $arg1 $arg1
返回值 不存在的成员属性的名称 不存在的成员属性的名称和赋的值 不存在的成员属性的名称 不存在的成员属性的名称
__clone()
触发机制 当使用colne关键字拷贝完成一个对象

你可能感兴趣的:(PHP反序列化,web安全,php)