En 1996, Aleph One publiait dans l’e-zine Phrack un article intitulé « Smashing the Stack for Fun and Profit ». C’était il y a plus de 25 ans et les principes énoncés dans cet article sont toujours valides, même si leur exploitation est devenue plus technique.De manière plus conventionnelle, l’écriture dans une zone mémoire non-autorisée est un vecteur d’attaque classique connu sous le doux nom de CWE-787.Dans cet article, on se concentrera sur les attaques ciblant la pile, en détaillant quelques bugs classiques, leur exploitation historique et quelques contre-mesures qui ont été mises en place au fil du temps.
1. Stack Smash
Une des manières les plus classiques d’écraser des valeurs présentes dans la pile est de fournir à l’utilisateur un accès direct à la pile, sans contrôle de borne, avec un innocent appel à la fonction scanf.
Si l’utilisateur rentre sur l’entrée standard une chaîne de plus de 256 caractères, on a un débordement de tampon, et boum, stack smash !
Toujours en utilisant des fonctions de la libc, on peut utiliser l’option %n de printf qui permet d’écrire dans un entier passé par adresse en paramètre à printf le nombre d’octets écrits dans le tampon de sortie depuis le début de l’appel à la fonction. Dans :
Si l’utilisateur contrôle buffer (ce qui est bien le cas dans notre exemple), il peut alors...
- Accédez à tous les contenus de Connect en illimité
- Découvrez des listes de lecture et des contenus Premium
- Consultez les nouveaux articles en avant-première