Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
php2shell-deep-dive — Analyse technique approfondie de PHP2Shell : enchaînement de deux CVE du cœur de PHP, depuis un plantage par épuisement de mémoire et un use-after-free jusqu'au heap grooming, aux fuites ASLR et à l'exécution de code à distance. | Kitploit
Outils/GitHubGitHub/djad04/php2shell-deep-dive
Criminalistique MémoireAnalyse des VulnérabilitésExploitationRétro-ingénierieExploitation d'Applications WebCTFArticles et RechercheApprentissage et ÉducationExploitation de Binaires
GitHubdjad04/php2shell-deep-dive

php2shell-deep-dive

Analyse technique approfondie de PHP2Shell : enchaînement de deux CVE du cœur de PHP, depuis un plantage par épuisement de mémoire et un use-after-free jusqu'au heap grooming, aux fuites ASLR et à l'exécution de code à distance.

63il y a 4 joursPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
Voir le dépôtSite web

J'ai commencé à écrire cette recherche le 26 octobre 2026, et je ne sais pas encore exactement quand je la terminerai.

Au moment de la rédaction, il existe encore très peu d'informations disponibles sur PHP2Shell, en particulier lorsqu'il s'agit d'une analyse technique détaillée des vulnérabilités et du processus d'exploitation.

Honnêtement, j'en avais assez de trouver des explications qui ne faisaient qu'effleurer le sujet sans réellement montrer ce qui se passait en interne. Je voulais faire quelque chose de différent : une véritable analyse technique approfondie qui explore l'ensemble du processus, examine chaque détail important et explique non seulement CE qui se passe, mais POURQUOI et COMMENT cela se produit.

Cette recherche est fondée sur ma propre compréhension du code source de PHP, mes expérimentations et les investigations que j'ai menées en cherchant à comprendre ces vulnérabilités. Je voulais rassembler toutes ces pièces, partager mes découvertes et, je l'espère, rendre certains des concepts sous-jacents plus faciles à comprendre pour les autres.

L'un de mes principaux objectifs était de rendre cela accessible sans sacrifier la profondeur technique. Je souhaite qu'une personne ayant des connaissances de base en C et une expérience générale de la programmation puisse suivre, même sans expérience préalable de l'exploitation mémoire de bas niveau.

J'espère également que cette recherche pourra aider à clarifier certaines choses actuellement mal expliquées ou mal comprises. Cependant, je tiens à être transparent : il s'agit de ma propre compréhension technique des vulnérabilités, et non d'une analyse officielle ou d'une référence infaillible. J'apprends encore, j'investigue et je relie les points moi-même. Il peut y avoir des erreurs, des inexactitudes ou des choses que j'ai mal comprises en cours de route.

Si vous remarquez quelque chose d'incorrect, si vous avez une interprétation différente ou si vous pensez que quelque chose mérite d'être approfondi, n'hésitez pas à me contacter. J'apprécierais sincèrement les corrections, les discussions et les contributions qui pourraient aider à rendre cette recherche plus précise et plus utile à tous.

Après tout, tout l'intérêt de partager cela est d'apprendre ensemble et d'aider davantage de personnes à comprendre ce qui se passe réellement sous le capot.


Navigation rapide

Vous connaissez déjà les bases ? Allez directement à la partie qui vous intéresse :

  • Avant de commencer : pile vs tas, bases de l'allocation mémoire
  • En quoi est-ce dangereux ? : l'histoire du pointeur obsolète, lectures et écritures UAF
  • Le pointeur obsolète : d'où vient-il : l'histoire des origines de l'UAF au sein de l'interaction session + OOM de PHP
  • Construire la requête d'attaque : la requête HTTP réelle qui déclenche l'OOM
  • L'objectif : ce que nous devons fuiter et pourquoi (pointeur de tas + pointeur de code)
  • La structure cible : zend_string : la structure que PHP lit lors de la construction du cookie de session
  • Récupérer la mémoire : la requête n°2 et la structure zend_string cible
  • Plongée approfondie dans le heap grooming : comment nous positionnons les données forgées dans l'emplacement mémoire exact
  • Le mystère de multipart_buffer_read_body : l'allocation cachée qui a failli me rendre fou
  • Deux fuites, pas une : pourquoi la fuite de tas et la fuite de code nécessitent des calibrations différentes
  • Fuite de code (étape 3) : faire fuiter un pointeur de fonction pour contourner l'ASLR
  • Fingerprinting : comment nous savons que nous avons le bon pointeur
  • Analyser la fuite de tas : trouver la base du chunk dans 256 octets de chaos
  • Le pipeline 1+8 : comment les deux fuites sont réellement livrées
  • Réutiliser l'allocateur pour forger une structure : l'idée du détournement de pDestructor
  • Le déclencheur : PHP fait le sale boulot, le vrai code de zend_hash_destroy
  • Trois structures en une : ForgedArray + FakeExecuteData + FakeString en 384 octets
  • Payload final (étape 4) : forger une HashTable pour détourner pDestructor et obtenir une RCE
  • Le mécanisme d'amorçage : comment le fantôme du primer libéré dans bucket[2] déclenche la chaîne de destruction
  • Astuce pour la sortie de commande : trouver son propre socket TCP dans /proc
  • Le pipeline complet : les quatre étapes de bout en bout
  • Calibrer pour une autre build : comment chaque nombre provient de l'analyse du tas d'une build PHP spécifique
  • Friction du monde réel : pourquoi cette attaque est bien plus difficile sur un vrai serveur de production
  • Steal My Bitcoin CTF : le challenge qui est à l'origine de tout cela
  • Remerciements : crédits et références

Si vous débutez dans l'exploitation du tas ou si vous voulez l'expérience complète, continuez simplement à faire défiler. Je l'ai écrit pour être lu du début à la fin.


Avant de commencer

Il y a quelques points que chacun devrait garder en tête avant de se lancer. Ils deviendront particulièrement utiles au fil de la recherche. Comme je l'ai mentionné plus tôt, je veux que ce walkthrough soit accessible à tous, je prendrai donc le temps d'expliquer même les concepts les plus fondamentaux. Si vous les connaissez déjà, n'hésitez pas à sauter cette partie !

Pile vs. tas

Dans un programme typique, la mémoire est organisée en différentes régions, notamment la pile et le tas.

Par exemple, en C++ :

int main() {
    int a = 30;       // Typically stored on the stack
    int* b = new int(30);  // b is typically on the stack,
                           // but the integer it points to is on the heap
}

Ici, a est une variable locale contenant la valeur 30. Le pointeur b est également une variable locale, mais il contient l'adresse d'un entier alloué sur le tas.

Comment fonctionne l'allocation mémoire

PHP est principalement écrit en C, nous devons donc comprendre comment fonctionne l'allocation mémoire.

Le système d'exploitation fournit à un processus son propre espace d'adressage virtuel. L'allocateur mémoire du processus gère ensuite les allocations dans la mémoire qui lui est disponible.

Par exemple, en C++, nous disposons de new, malloc() et d'autres moyens d'allouer de la mémoire.

Les allocateurs tentent souvent de réutiliser la mémoire libérée plutôt que de demander de la nouvelle mémoire au système d'exploitation à chaque fois.

Télécharger l’outil