I.1.1 Genèse et évolution

Cette section retrace la genèse et l’évolution du langage C, de sa création aux laboratoires Bell jusqu’à sa standardisation et son influence sur les langages modernes.

L'exploitation de binaires, communément appelée « Pwn », constitue un domaine particulièrement technique de la sécurité informatique. Loin d'être une pratique répandue, elle demeure une discipline exigeante, généralement réservée à des spécialistes maîtrisant les mécanismes de bas niveau tels que l'architecture des processeurs (instructions assembleur, registres, modes d'adressage), la gestion mémoire (allocations dynamiques, pile, tas, pagination et segmentation mémoire) et les spécificités internes des systèmes d'exploitation modernes (appels système, gestion des exceptions, mécanismes de protection mémoire et d'isolation des processus).

À ses origines, dans les années 1970 et 1980, les systèmes informatiques étaient conçus avec une priorité donnée à la fonctionnalité, sans envisager sérieusement les problématiques de sécurité. À cette époque, la menace d'attaques ou d'abus informatiques n'était pas perçue comme réaliste ou pertinente par les concepteurs. Ceci explique pourquoi de nombreux protocoles et systèmes développés durant cette période, tels que le protocole SMTP pour l'échange de courriers électroniques, n'intégraient aucune mesure de vérification d'identité ou d'intégrité des messages. Cela a conduit, bien plus tard, à l'adoption d'extensions telles que SPF, DKIM ou DMARC pour compenser ces lacunes initiales. De même, le protocole ARP, conçu sans authentification, devint rapidement la cible d'attaques d'empoisonnement (ARP poisoning). Dans ce contexte, l'exploitation de binaires, bien que nécessitant déjà une certaine expertise technique, restait relativement directe : il suffisait souvent d'exploiter une erreur manifeste ou une mauvaise configuration pour obtenir un accès privilégié.

Durant les années 1990, avec la démocratisation d'Internet et l'interconnexion croissante des systèmes, les conséquences des vulnérabilités comme les dépassements de tampon (« buffer overflow ») sont devenues beaucoup plus visibles et préoccupantes. Des techniques emblématiques comme le « stack smashing », popularisées notamment par Aleph One dans son article fondateur « Smashing the Stack for Fun and Profit », ont marqué cette époque, posant les fondations théoriques et pratiques du Pwn moderne.

Face à la multiplication et à la sophistication croissante des attaques exploitant ces failles, les développeurs de systèmes d'exploitation et de compilateurs ont progressivement introduit diverses protections destinées à complexifier considérablement l'exploitation des vulnérabilités binaires :

  • Stack Canaries (canaris de pile) : valeur aléatoire placée juste avant l'adresse de retour d'une fonction sur la pile afin de détecter une éventuelle corruption de mémoire. Si cette valeur est modifiée lors d'un débordement de tampon (« buffer overflow »), le programme interrompt immédiatement son exécution.

  • DEP (Data Execution Prevention) : mécanisme matériel et logiciel empêchant l'exécution de code depuis des zones mémoire normalement réservées aux données (comme la pile ou certaines régions du tas). Son objectif est de bloquer l'exécution de code arbitraire introduit par un attaquant via un débordement de mémoire.

  • ASLR (Address Space Layout Randomization) : mécanisme de sécurité consistant à placer aléatoirement en mémoire les segments d'un programme (pile, tas, librairies, exécutables), afin de rendre imprédictible leur emplacement exact et de compliquer ainsi l'exploitation de vulnérabilités nécessitant la connaissance d'adresses précises.

  • PIE (Position Independent Executable) : option de compilation rendant le code exécutable indépendant de sa position dans l'espace mémoire. Associée à l'ASLR, cette protection renforce encore la difficulté d'exploitation en éliminant toute adresse fixe prédictible à l'avance.

  • SafeSEH (Safe Structured Exception Handling) et SEHOP (Structured Exception Handling Overwrite Protection) : mécanismes de sécurité spécifiques à Windows, destinés à protéger la gestion structurée des exceptions (SEH). SafeSEH vérifie la validité des gestionnaires d'exceptions, tandis que SEHOP empêche leur réécriture malveillante, limitant ainsi les risques d'exploitation via un détournement de la gestion d'exceptions.

En réponse à l'évolution constante et au renforcement progressif des mécanismes de sécurité, l'exploitation de binaires a connu une spécialisation accrue. Aujourd'hui, cette discipline implique non seulement une maîtrise poussée des langages de programmation et des architectures matérielles, mais exige également une compréhension approfondie des mécanismes de défense modernes mis en œuvre par les systèmes d'exploitation et les compilateurs. L'exploitation contemporaine s'articule autour de techniques sophistiquées conçues spécifiquement pour contourner ces protections de sécurité avancées.

Parmi les méthodes les plus emblématiques et complexes utilisées actuellement figurent :

  • Return-Oriented Programming (ROP) : Technique permettant de contourner la protection NX (« No eXecute bit »). Le NX empêche normalement l'exécution directe de code injecté par un attaquant. Le ROP consiste à réutiliser astucieusement des fragments de code déjà présents en mémoire, appelés « gadgets », afin de construire minutieusement des chaînes d'exécution contrôlées. Ce mécanisme permet d'atteindre une exécution de code arbitraire sans injecter explicitement du code malveillant.

  • Ret2libc (Return to libc) : Variante historique de la réutilisation de code qui consiste à détourner le flux d'exécution d'un programme vulnérable vers des fonctions présentes dans les bibliothèques standard, typiquement la libc sous Unix/Linux. Cette approche permet ainsi l'exécution indirecte de commandes arbitraires en exploitant des fonctions existantes et reconnues comme fiables par le système, contournant ainsi certaines protections.

  • Heap Exploitation : Catégorie avancée d'attaques ciblant la gestion dynamique de la mémoire (le « tas »). Ces techniques exploitent des erreurs ou des incohérences dans l'allocation et la désallocation dynamique afin de corrompre ou contrôler les métadonnées internes du gestionnaire de mémoire dynamique. Ces attaques, particulièrement complexes, permettent souvent d'obtenir une exécution de code arbitraire malgré la présence de protections modernes telles que l'ASLR (Address Space Layout Randomization) et le DEP (Data Execution Prevention).

  • Memory Leak Exploitation (Fuites mémoire) : Ensemble de stratégies qui visent à obtenir, à partir d'une application vulnérable, des informations confidentielles telles que des adresses mémoire précises. Ces informations permettent de contourner efficacement l'ASLR, qui randomise normalement les adresses mémoire pour prévenir leur prédiction par un attaquant. En exploitant ces fuites, il devient possible de cibler précisément des structures internes du programme ou du système afin de mener une exploitation réussie.

Le perfectionnement continu de ces techniques illustre parfaitement la complexité et l'exigence croissante du domaine du Pwn. La réussite d'une exploitation contemporaine repose désormais sur une compréhension approfondie et une créativité technique, nécessitant une connaissance minutieuse des systèmes d'exploitation, des protections logicielles, des mécanismes internes des processeurs, et des stratégies avancées de contournement des défenses informatiques.


Le terme « Pwn », dérivé de l'argot « own » (signifiant « posséder », « prendre le contrôle »), est apparu au début des années 2000 dans les communautés de jeux vidéo en ligne pour désigner la domination totale sur un adversaire.

Cette expression, née d’une simple faute de frappe devenue virale, a rapidement été reprise et adoptée par la communauté de la sécurité informatique, notamment au sein des compétitions Capture The Flag (CTF), où elle s’est imposée pour désigner l'exploitation réussie d'une vulnérabilité.

Au fil du temps, le terme « Pwn » a ainsi évolué pour désigner une discipline technique à part entière, spécialisée dans l'exploitation des failles affectant la mémoire pour prendre le contrôle d’un système ou afin de détourner son flux d’exécution légitime, souvent pour exécuter du code arbitraire.

Contrairement à d'autres types de vulnérabilités (erreurs logiques, failles d’authentification, erreurs de configuration), le Pwn cible les vulnérabilités les plus profondes et les plus techniques d'un logiciel : celles qui touchent directement à la gestion interne de la mémoire, du compilateur et du processeur.

L'exploitation binaire repose sur une compréhension avancée et transversale de nombreux concepts fondamentaux :

  • Architecture des processeurs (x86, ARM, RISC-V, etc.) : compréhension fine de la gestion des registres, de la mémoire, du pipeline d'exécution, des interruptions, et du fonctionnement bas niveau.

  • Organisation interne de la mémoire : manipulation de la pile (stack), du tas (heap), des segments de données (.data, .bss), et du code (.text), ainsi que de leurs contraintes spécifiques.

  • Fonctionnement des compilateurs et des formats binaires (ELF, PE) : compréhension des mécanismes d'optimisation, des généralisations modernes (comme PIE, RELRO), et des différentes sections manipulées.

  • Maîtrise des protections modernes intégrées aux systèmes d’exploitation et aux compilateurs pour contrer ces attaques :

    • ASLR (Address Space Layout Randomization) : randomisation des espaces d'adresses mémoire.

    • DEP / NX (Data Execution Prevention / No eXecute) : interdiction d’exécution dans certaines zones mémoire.

    • CFG (Control Flow Guard) : sécurisation du flux d'exécution.

    • SafeSEH, SEHOP : protections spécifiques à Windows pour encadrer les exceptions.

    • Stack Canaries (cookies) : valeurs sentinelles détectant les débordements de pile.

    • Shadow Stack, CET (Control-flow Enforcement Technology) : techniques modernes de sécurisation du flux d'exécution.

L’introduction de ces mécanismes a profondément bouleversé le paysage de l’exploitation. Alors qu’il était autrefois possible de compromettre un système par un simple débordement de tampon, l'exploitation moderne nécessite des attaques bien plus sophistiquées, rendant l'exploitation moderne bien plus complexe que les attaques triviales des années 1990-2000.

Bien que particulièrement technique et exigeante, l’exploitation binaire (Pwn) reste une discipline cruciale dans le domaine de la cybersécurité offensive et défensive.

Les experts du Pwn sont rares et leurs compétences sont généralement sollicitées dans des contextes de haute sécurité :

  • Red Teaming avancé ;

  • Recherche et développement (R&D) de vulnérabilités ;

  • Audits logiciels de bas niveau ;

  • Recherche en vulnérabilités zero-day ;

Malgré la rareté des postes exclusivement dédiés au Pwn, cette expertise confère une compréhension inégalée du fonctionnement intime des systèmes modernes (Windows, Linux, BSD, etc.), ainsi que des techniques employées par les attaquants les plus avancés.

Aujourd’hui, le Pwn est enseigné dans certaines universités spécialisées, intégré aux formations de cybersécurité avancée, et pratiqué dans les plus grandes compétitions internationales de type CTF.

Il s’est imposé comme une discipline reconnue et respectée au sein des communautés de pentesting, red teaming, et recherche offensive, car comprendre le Pwn, c’est comprendre comment casser les défenses les plus sophistiquées des systèmes modernes.


En créant ce cours, mon ambition est de proposer un guide complet, rigoureux et accessible sur l’art exigeant de l’exploitation binaire. J’ai voulu concevoir ce que j’aurais rêvé de trouver à mes débuts : un document structuré et progressif, qui s’adresse à la fois aux débutants curieux et aux profils plus avancés souhaitant approfondir leurs connaissances.

Trop souvent, ce domaine reste perçu comme obscur, réservé à une élite, ou mal expliqué dans les ressources disponibles, notamment en français. La documentation francophone, lorsqu’elle existe, est souvent éparse, incomplète, ou excessivement technique sans effort de pédagogie.

Face à ce constat, j’ai souhaité combler ce vide, en offrant un véritable parcours d’apprentissage, mêlant explications claires, exemples concrets et mise en pratique. Cette ressource se veut libre, gratuite et évolutive, afin de démocratiser l’accès au Pwn et de briser cette barrière qui empêche beaucoup de s’y initier.

Mon objectif est double : permettre à chacun, quel que soit son niveau, de progresser avec rigueur et méthode, mais aussi favoriser une culture du partage des connaissances, essentielle dans notre domaine. J’espère qu’à travers ce travail, vous trouverez non seulement les clés pour comprendre les mécanismes profonds de l’exploitation de binaires, mais aussi l’envie de transmettre ces savoirs à votre tour.

Ce guide a été pensé avec une conviction : rendre accessible ce qui semble complexe, sans jamais sacrifier la précision technique. Offrir une ressource francophone sérieuse, claire et pédagogique, capable d’accompagner toute personne désireuse de percer les secrets de ce domaine fascinant.

Last updated