ret2libc
hackingDé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
Expert en cybersécurité offensive et intelligence artificielle. Pentest, audit et développement IA sur-mesure.
Services
- Audit Infrastructure
- Audit Kubernetes
- Audit Microsoft 365
- Audit Sécurité Réseau
- Analyse de Risques
- Audit Active Directory
- Audit Application Web
- Audit Cloud (AWS/Azure/GCP)
- Audit Messagerie
- Audit API (OWASP Top 10)
- Audit DevSecOps & CI/CD
- Audit Code Source (SAST)
- Audit Postes de Travail
- Audit Sauvegarde & Résilience
- Audit OT/SCADA (IEC 62443)
- Développement IA
- Formations
Ressources
Projets & Outils
© 2026 Ayi NEDJIMI Consultants. Tous droits réservés.
Un projet cybersécurité ?
Expert dispo · Réponse 24h