Analyse détaillée de la désérialisation PHP et de la méthode magique et comparaison des instances et des attributs publics et privés

Table des matières

1. Analyse du point d'utilisation de la méthode magique

<__construire&__détruire>

<__toString>

<__appel>

<__get>

 <__set>

<__dormir>

<__réveil>

<__isset>

<__unset>

<__invoke>

<Résumé>

2. Attributs des variables d'objet et affichage des données sérialisées

propriétés des variables d'objet

Affichage des données sérialisées

démo

3. Classification de l'utilisation de la désérialisation


1. Analyse du point d'utilisation de la méthode magique

<__construire&__détruire>

__construct()     //构造函数,当对象 new 的时候会自动调用
__destruct()      //析构函数当对象被销毁时会被自动调用

1. La partie de code expérimentale est la suivante.

2. Après avoir exécuté le code, vous pouvez voir les résultats d'exécution suivants.

<__toString>

__toString()        //在对象当做字符串的时候会被调用

1. La partie de code expérimentale est la suivante.

 2. Après avoir exécuté le code, vous pouvez voir les résultats d'exécution suivants.

<__appel>

__call()     //在对象上下文中调用不可访问的方法时触发

1. La partie de code expérimentale est la suivante.

 2. Après avoir exécuté le code, vous pouvez voir les résultats d'exécution suivants.

 

<__get>

__get()     //用于从不可访问的属性读取数据

1. La partie de code expérimentale est la suivante.

 2. Après avoir exécuté le code, vous pouvez voir les résultats d'exécution suivants.

 

 <__set>

__set()     //用于将数据写入不可访问的属性

1. La partie de code expérimentale est la suivante.

 2. Après avoir exécuté le code, vous pouvez voir les résultats d'exécution suivants.

<__dormir>

__sleep()     //serialize之前被调用,可以指定要序列化的对象属性

1. La partie de code expérimentale est la suivante.

 2. Après avoir exécuté le code, vous pouvez voir les résultats d'exécution suivants.

 

<__réveil>

__wakeup()       //unserialize()时会被自动调用

1. La partie de code expérimentale est la suivante.

 2. Après avoir exécuté le code, vous pouvez voir les résultats d'exécution suivants.

 

<__isset>

__isset()     //检测对象的某个属性是否存在时执行此函数

1. La partie de code expérimentale est la suivante.

 2. Après avoir exécuté le code, vous pouvez voir les résultats d'exécution suivants.

 

<__unset>

__unset()     //在不可访问的属性上使用unset()时触发,销毁对象的某个属性时执行此函数

1. La partie de code expérimentale est la suivante.

 2. Après avoir exécuté le code, vous pouvez voir les résultats d'exécution suivants.

 

<__invoke>

__invoke()     //将对象当做函数来使用时执行此方法,通常不推荐这样做

1. La partie de code expérimentale est la suivante.

 2. Après avoir exécuté le code, vous pouvez voir les résultats d'exécution suivants. 

<Résumé>

触发:unserialize 函数的变量可控,文件中存在可利用的类,类中有魔术方法:
__construct():     //构造函数,当对象 new 的时候会自动调用
__destruct():    //析构函数当对象被销毁时会被自动调用
__wakeup():     //unserialize()时会被自动调用
__invoke():     //当尝试以调用函数的方法调用一个对象时,会被自动调用
__call():     //在对象上下文中调用不可访问的方法时触发
__callStatci():     //在静态上下文中调用不可访问的方法时触发
__get():     //用于从不可访问的属性读取数据
__set():     //用于将数据写入不可访问的属性
__isset():     //在不可访问的属性上调用 isset()或 empty()触发
__unset():     //在不可访问的属性上使用 unset()时触发
__toString():     //把类当作字符串使用时触发
__sleep():     //serialize()函数会检查类中是否存在一个魔术方法__sleep(),如果存在,该方法会被优先调用

2. Attributs des variables d'objet et affichage des données sérialisées

propriétés des variables d'objet

  • publt (public) : il est accessible dans cette classe, les classes externes et les sous-classes.
  • Protect (protégé) : seule cette classe ou sous-classe ou classe parente peut y accéder.
  • private (privé) : uniquement disponible à l'intérieur de cette classe.

Affichage des données sérialisées

  • Lorsque l'attribut privé est sérialisé, le format est %00 nom de classe%00 nom de membre.
  • Lorsque l'attribut protect est sérialisé, le format est %00*%00 nom de membre.

démo

  • le code 

  • résultat de l'opération 

3. Classification de l'utilisation de la désérialisation

  • La logique d'appel de la méthode magique --- telle que le langage de condition de déclenchement.
  • Logique d'appel des classes natives --- comme le langage SoapClient.
  • Propres failles de sécurité --- telles que CVE-2016-7124.

Je suppose que tu aimes

Origine blog.csdn.net/weixin_62808713/article/details/130038437
conseillé
Classement