0Pricing
Ethical Hacking Academy · Leçon

Mémoire et pile

Fonctionnement des débordements

Mémoire et pile est une leçon Ethical Hacking Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Ethical Hacking Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Ethical Hacking Academy comprend 4 leçons au total.

Organisation de la mémoire d'un processus

Lorsqu'un programme s'exécute, le système d'exploitation lui attribue une organisation mémoire composée de régions distinctes : le texte (code), les données/BSS (variables globales), le tas (allocation dynamique) et la pile.

Les dépassements de tampon exploitent le plus souvent la pile ; il est donc essentiel de la comprendre.

Qu'est-ce que la pile ?

La pile est une région de la mémoire utilisée pour les appels de fonctions. Elle contient les variables locales, les arguments des fonctions et les adresses de retour.

Sur x86, elle croît vers le bas : empiler des données déplace le pointeur de pile vers des adresses inférieures. Cette direction est importante lorsqu'un dépassement se produit.

Cadres de pile

Chaque appel de fonction crée un cadre de pile. Un cadre contient généralement les variables locales, le pointeur de base sauvegardé (EBP) et l'adresse de retour (EIP sauvegardé).

L'adresse de retour indique au CPU où reprendre l'exécution une fois la fonction terminée. La contrôler est au cœur de l'exploitation d'un dépassement de pile.

Registres clés

Sur x86 32 bits, les registres importants sont :

  • ESP : pointeur de pile, sommet de la pile.
  • EBP : pointeur de base, point d'ancrage du cadre actuel.
  • EIP : pointeur d'instruction, adresse de l'instruction suivante.

Si vous contrôlez EIP, vous contrôlez le flux d'exécution.

Qu'est-ce qu'un tampon ?

Un tampon est un bloc de mémoire de taille fixe, tel qu'un tableau local de caractères. Le programme s'attend à ce que les données tiennent à l'intérieur.

Si le programme copie plus de données que le tampon ne peut en contenir sans vérifier la longueur, l'excédent déborde dans la mémoire adjacente.

char buffer[64];
strcpy(buffer, user_input); // no bounds check

Le dépassement

Un dépassement de tampon se produit lorsque les données saisies dépassent la taille du tampon et écrasent les données voisines sur la pile.

Comme l'EBP sauvegardé et l'adresse de retour se trouvent juste après les tampons locaux, une entrée suffisamment longue peut écraser l'adresse de retour et détourner le flux d'exécution.

Fonctions dangereuses

Les dépassements proviennent généralement de fonctions C non sûres qui ne vérifient pas la longueur :

  • strcpy, strcat, sprintf, gets.

Les alternatives plus sûres comme strncpy ou snprintf acceptent une limite de taille, mais le code ancien regorge de fonctions dangereuses.

gets(buffer); // never use: no length limit at all

Ce que l'écrasement d'EIP vous permet de faire

Lorsque la fonction vulnérable retourne, le CPU dépile l'adresse de retour (désormais contrôlée par l'attaquant) dans EIP et saute à cette adresse.

Si vous faites pointer EIP vers votre propre code machine injecté (code shell), le CPU l'exécute avec les privilèges du programme.

Adressage petit-boutiste

x86 utilise le format petit-boutiste : les valeurs de plusieurs octets sont stockées en commençant par l'octet de poids faible. Pour écraser l'adresse de retour avec 0x080414C3, vous devez écrire les octets dans l'ordre inverse.

Se tromper de boutisme est une erreur fréquente chez les débutants, qui fait échouer les exploits sans message d'erreur.

address 0x080414C3 -> bytes \xc3\x14\x04\x08

Protections modernes

Les systèmes modernes ajoutent des défenses qui compliquent l'exploitation :

  • DEP/NX : marque la pile comme non exécutable.
  • ASLR : randomise les adresses mémoire.
  • Canaris de pile : détectent les écrasements avant le retour.

Ce cours se concentre sur le cas classique (protections désactivées) afin de vous enseigner les fondamentaux.

Pourquoi cela reste important

Bien que les défenses modernes rendent les dépassements de pile classiques plus difficiles, leurs fondamentaux restent essentiels. Les systèmes embarqués, l'IoT et les logiciels anciens ne disposent souvent d'aucune de ces protections.

Maîtriser le cas de base est également un prérequis pour les techniques avancées comme le ROP, qui contournent les mesures d'atténuation modernes.

Vérification rapide

Rappelez-vous quelle valeur l'attaquant cherche finalement à contrôler.

Récapitulatif

Vous comprenez maintenant les fondements :

  • La pile stocke les variables locales, l'EBP sauvegardé et l'adresse de retour, et elle croît vers les adresses décroissantes.
  • ESP, EBP, EIP sont les registres x86 essentiels : contrôler EIP revient à contrôler l'exécution.
  • Les fonctions non sûres comme strcpy et gets provoquent des dépassements.
  • x86 utilise le format petit-boutiste ; les défenses modernes sont DEP, ASLR et les canaris.

Ensuite, vous testerez un programme pour trouver le décalage du plantage.

Questions Fréquemment Posées

La leçon « Mémoire et pile » est-elle gratuite ?

Oui — le texte complet de « Mémoire et pile » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Ethical Hacking Academy, passe à CoddyKit PRO. Le cours Ethical Hacking Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Mémoire et pile » ?

Fonctionnement des débordements Tu pratiques Ethical Hacking Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Ethical Hacking Academy ?

Aucune expérience préalable n'est requise. Ethical Hacking Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « Mémoire et pile » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Ethical Hacking Academy ?

Oui. Chaque leçon Ethical Hacking Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Mémoire et pile
  2. Fuzzing pour provoquer des plantages
  3. Contrôler EIP
  4. Shellcode et exploitation
← Retour à Ethical Hacking Academy