Aller au contenu principal
Expert Cybersécurité & IAv9.0
Centres de ressources conformité
Besoin d'un accompagnement expert ?
Devis personnalisé sous 24h — audit, conformité, incident
Checklists Sécurité — Audit & Durcissement
Formats disponibles
📄 PDF 📊 Excel 🌐 Web

11 checklists professionnelles couvrant 2 200+ points de contrôle. Téléchargement gratuit, aucune inscription.

ret2libc

hacking

Définition

Ret2libc (Return to libc) est une technique d'exploitation binaire qui contourne NX/DEP (No-Execute Data Execution Prevention) en redirigeant l'exécution vers des fonctions de la bibliothèque C standard (libc) déjà présentes en mémoire, plutôt que vers du shellcode injecté dans une zone de données. Puisque le code de libc est légitimement exécutable, NX/DEP ne peut pas l'empêcher. La technique classique sur x86 (32-bit) : lors d'un buffer overflow qui contrôle l'adresse de retour, placer l'adresse de la fonction system() (de libc.so) comme adresse de retour, suivie de l'adresse d'une instruction factice (return address de system), suivie de l'adresse de la chaîne '/bin/sh' dans libc comme argument. Quand la fonction vulnérable retourne, system('/bin/sh') est appelé, ouvrant un shell. Sur x86-64, la convention d'appel diffère (arguments passés via registres rdi, rsi, rdx... plutôt que la pile), nécessitant l'utilisation de gadgets ROP pour configurer les registres avec les arguments appropriés avant d'appeler system(). Cela fait de ret2libc sur 64-bit un cas particulier de ROP avec system() comme cible finale. La localisation des adresses nécessaires (system(), /bin/sh) dépend de l'emplacement de libc en mémoire, qui est randomisé par ASLR. Les techniques de bypass incluent : le ret2plt (appel à system@plt qui résout dynamiquement l'adresse, valable seulement si libc est déjà chargée), les fuites d'adresses libc via des fonctions puts/printf avec des arguments GOT (GOT leaking), et le brute-force d'ASLR sur des systèmes 32-bit. La variante ret2plt utilise la PLT (Procedure Linkage Table) comme cible intermédiaire : en appelant system@plt ou puts@plt, on exploite le mécanisme de résolution lazy binding pour appeler la fonction souhaitée sans connaître son adresse réelle dans libc. Cette technique est plus robuste face à l'ASLR car les entrées PLT sont dans le binaire principal (non randomisées si pas de PIE).

Fonctionnement

Sur 32-bit sans ASLR : python3 -c 'import struct; print(b"A"*offset + struct.pack(". Le payload overwrite l'adresse de retour avec addr_system, la fausse return address de system avec un 'placeholder', et le premier argument avec addr_binsh (chaîne /bin/sh trouvée dans libc). Sur 64-bit, un gadget pop rdi; ret est nécessaire avant addr_system pour placer addr_binsh dans rdi.

Exploitation offensive

Ret2libc est une des techniques fondamentales enseignées dans les formations d'exploitation binaire (OSED, HTB Academy, pwn.college). Son applicabilité sur des systèmes sans ASLR ou après un leak ASLR en fait une technique toujours pertinente. Les exercices de CTF pwn utilisent abondamment ret2libc et ses variantes.

Détection et mitigation

ASLR rend ret2libc non-déterministe sans un leak préalable. Full RELRO + PIE + ASLR combinés rendent l'exploit complexe. CFI (Control Flow Integrity) vérifie que les appels indirects ciblent des destinations valides, bloquant les détournements ret2libc. Les défenses robustes nécessitent la combinaison de toutes ces mitigations.

Articles liés

Un projet cybersécurité ?

Expert dispo · Réponse 24h

Devis