Dépassements de tampon de pile
Comprenez la disposition de la pile, les dépassements EIP/RIP et écrivez un exploit fonctionnel pour un binaire C vulnérable.
Dépassements de tampon de pile est une leçon Cyber Security 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 Cyber Security Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Cyber Security Academy comprend 4 leçons au total.
Qu’est-ce qu’un dépassement de tampon ?
Un dépassement de tampon se produit lorsque davantage de données sont écrites dans un tampon qu’il ne peut en contenir. Les données excédentaires écrasent la mémoire adjacente, ce qui peut altérer les structures de contrôle et rediriger l’exécution du programme.
Organisation de la mémoire de la pile
La pile d’appels contient : les variables locales (tampons), le pointeur de trame enregistré (SFP) et l’adresse de retour (RIP/EIP) — l’endroit où l’exécution se poursuit après le retour de la fonction. Le dépassement d’un tampon local peut écraser l’adresse de retour.
Écrasement classique de la pile
Si un programme appelle gets() ou strcpy() sans vérifier la longueur, un attaquant peut saisir suffisamment d’octets pour remplir le tampon et remplacer l’adresse de retour par l’adresse d’un code injecté ou d’un gadget utile.
// Vulnerable C code:
void vuln() {
char buf[64];
gets(buf); // No bounds checking!
}Trouver le décalage
Déterminez combien d’octets sont nécessaires pour atteindre l’adresse de retour à l’aide de la génération de motifs :
# Generate a cyclic pattern:
python3 -c "from pwn import *; print(cyclic(200))" | ./vuln
# After crash, find offset:
python3 -c "from pwn import *; print(cyclic_find(0x61616166))"Protections : canaris de pile
Un canari de pile est une valeur aléatoire placée entre les variables locales et l’adresse de retour enregistrée. Avant le retour, le canari est vérifié ; s’il a été écrasé, le programme se termine. Il faut le contourner pour exploiter un dépassement classique.
Protections : ASLR
Randomisation de l’espace d’adressage (ASLR) randomise l’adresse de base de la pile, du tas et des bibliothèques à chaque exécution. Sans fuite d’une adresse actuelle, deviner où effectuer le saut est irréalisable sur les systèmes 64 bits.
Protections : NX/DEP
NX (Non exécutable) / DEP (Prévention de l’exécution des données) marque la pile comme non exécutable. Le code shell injecté dans le tampon ne peut pas être exécuté directement. Cela contraint les attaquants à utiliser la programmation orientée retour (ROP).
Fuite d’adresses
Pour contourner ASLR, les attaquants ont besoin d’une fuite d’informations : vulnérabilités de chaîne de formatage, lectures excessives du tas (comme Heartbleed) ou pointeur lisible dans la fonction exploitée. Une seule adresse divulguée révèle le décalage et permet de calculer les autres adresses.
Écrire une exploitation simple
Un débordement de pile élémentaire en 32 bits, sans protections :
# Python exploit skeleton (pwntools):
from pwn import *
p = process("./vuln")
offset = 76
shellcode = asm(shellcraft.sh())
payload = shellcode + b"A" * (offset - len(shellcode)) + p32(stack_addr)
p.sendline(payload)
p.interactive()Technique de retour vers libc
ret2libc contourne NX en revenant vers des fonctions de libc (comme system()) plutôt qu’en utilisant du code shell. L’attaquant remplace l’adresse de retour par l’adresse de system et transmet "/bin/sh" comme argument.
Outils de développement d’exploits
Outils essentiels :
- pwntools — bibliothèque Python d’exploitation
- GDB + pwndbg/peda — débogueur avec assistants d’exploitation
- checksec — affiche les protections du binaire
- ROPgadget / ropper — trouvent des chaînes ROP
checksec --file=./vulnVérification rapide : débordement de pile
Quelle mesure d’atténuation place une valeur aléatoire entre les variables locales et l’adresse de retour sauvegardée, puis termine le programme si cette valeur est écrasée ?
Récapitulatif de la leçon
Les débordements de tampon de la pile écrasent l’adresse de retour en remplissant un tampon au-delà de ses limites. Les protections comprennent les canaris de pile (qui détectent les écrasements), ASLR (qui randomise les adresses) et NX/DEP (qui rend la pile non exécutable). ret2libc contourne NX. Les fuites d’informations neutralisent ASLR. pwntools simplifie le développement d’exploits.
Questions Fréquemment Posées
La leçon « Dépassements de tampon de pile » est-elle gratuite ?
Oui — le texte complet de « Dépassements de tampon de 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 Cyber Security Academy, passe à CoddyKit PRO. Le cours Cyber Security Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Dépassements de tampon de pile » ?
Comprenez la disposition de la pile, les dépassements EIP/RIP et écrivez un exploit fonctionnel pour un binaire C vulnérable. Tu pratiques Cyber Security 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 Cyber Security Academy ?
Aucune expérience préalable n'est requise. Cyber Security 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 « Dépassements de tampon de 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 Cyber Security Academy ?
Oui. Chaque leçon Cyber Security 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
- Dépassements de tampon de pile
- Programmation orientée retour (ROP)
- Vulnérabilités de chaînes de format
- Exploitation du tas : Use-After-Free et Heap Spraying