Programmation orientée retour (ROP)
Enchaînez des gadgets ROP pour contourner NX/DEP et créer des exploits sans code shell.
Programmation orientée retour (ROP) est une leçon Cyber Security Academy gratuite sur CoddyKit. Ceci est la leçon 2 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.
Pourquoi ROP existe
Avec NX/DEP, le code shell injecté ne peut pas s’exécuter. La programmation orientée retour (ROP) contourne ce problème en enchaînant de petites séquences de code existantes qui se terminent par des instructions ret. Aucun nouveau code n’est injecté : seules la pile et le code existant sont utilisés.
Qu’est-ce qu’une séquence ROP ?
Une séquence est une courte suite d’instructions qui se termine par ret et que l’on trouve dans le binaire ou dans les bibliothèques chargées. Exemples : pop rdi; ret, pop rsi; ret, mov eax, 0; ret. Ces séquences sont les éléments constitutifs des chaînes ROP.
Trouver des séquences
Outils permettant de trouver des séquences ROP dans les binaires :
# ROPgadget:
ROPgadget --binary ./vuln --rop
# ropper:
ropper -f ./vuln --search "pop rdi"
# pwntools:
from pwn import *
elf = ELF("./vuln")
rop = ROP(elf)
rop.find_gadget(["pop rdi", "ret"])Construire une chaîne ROP
Une chaîne ROP est une suite d’adresses de retour placées sur la pile. Lorsque l’adresse de retour écrasée est atteinte, l’exécution saute vers la séquence 1 (qui effectue une action utile, puis revient), laquelle dépile l’adresse suivante et saute vers la séquence 2, et ainsi de suite.
Retour vers la PLT et écrasement de la GOT
Le retour vers la PLT appelle des fonctions par l’intermédiaire de la PLT (table de liaison des procédures), ce qui est utile pour appeler puts() afin de divulguer des adresses de libc, puis utiliser celles-ci pour appeler system(). Les structures PLT/GOT sont prévisibles même avec ASLR pour le binaire principal (sans PIE).
Contourner ASLR avec ROP
ROP peut divulguer l’adresse d’une fonction de libc depuis la GOT à l’aide d’une séquence qui appelle puts(GOT_entry). L’adresse divulguée révèle la base de libc. Calculez le décalage de system() : system_addr = leak - libc.symbols["puts"] + libc.symbols["system"].
SROP : programmation orientée sigreturn
SROP utilise l’appel système sigreturn pour charger un cadre de contexte de signal factice et définir tous les registres avec des valeurs contrôlées par l’attaquant en une seule séquence. Cette technique est utile lorsque peu de séquences sont disponibles.
Variantes JOP et COP
Au-delà de ROP :
- JOP (programmation orientée saut) — enchaîne des séquences qui se terminent par
jmpau lieu deret - COP (programmation orientée appel) — enchaîne des séquences qui se terminent par
call
Les défenses telles que CFI (intégrité du flux de contrôle) visent à empêcher toutes ces techniques.
Intégrité du flux de contrôle (CFI)
CFI impose que les branchements indirects (appels, retours) ne sautent que vers des cibles valides. Elle brise ROP en validant la cible de retour par rapport à une pile fantôme ou à une liste d’autorisation. Intel CET (technologie d’application du flux de contrôle) met en œuvre une CFI au niveau matériel.
Exemple pratique de ROP
Un retour vers libc en 64 bits via ROP :
# pwntools ROP chain example:
from pwn import *
p = process("./vuln")
libc = ELF("/lib/x86_64-linux-gnu/libc.so.6")
elf = ELF("./vuln")
rop = ROP(elf)
# Leak puts GOT to get libc base
rop.puts(elf.got["puts"])
rop.main()Récapitulatif des mesures d’atténuation
Protections contre ROP :
- CFI — valide les cibles des branchements
- Pile fantôme (CET) — copie de l’adresse de retour protégée par le matériel
- RELRO (complet) — rend la GOT accessible en lecture seule et empêche les écrasements
- PIE — randomise la base du binaire et nécessite une fuite pour trouver les séquences
Vérification rapide : ROP
Qu’est-ce qu’une séquence ROP ?
Récapitulatif de la leçon
ROP contourne NX/DEP en enchaînant des séquences de code existantes (séquences se terminant par une instruction de retour), sans injection de code shell. Outils de recherche de séquences : ROPgadget, ropper. ret2plt divulgue des adresses de libc pour contourner ASLR. Défenses : CFI, piles fantômes (Intel CET), PIE, RELRO complet. ROP est le fondement de l’exploitation moderne des binaires.
Questions Fréquemment Posées
La leçon « Programmation orientée retour (ROP) » est-elle gratuite ?
Oui — le texte complet de « Programmation orientée retour (ROP) » 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 « Programmation orientée retour (ROP) » ?
Enchaînez des gadgets ROP pour contourner NX/DEP et créer des exploits sans code shell. 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 2 sur 4.
Combien de temps prend la leçon « Programmation orientée retour (ROP) » ?
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