Un bufferoverrun : le débordement de pile

Description

Soit un programme mal écrit, qui ne se protège pas contre les débordements de pile.
On va successivement voir comment ce programme :

I) Peut planter

II) Peut exécuter du code spécifié par l’utilisateur

III) Pourrait être corrigé

IV) Peut encore être « patché »

V) Devrait enfin utiliser l’option /GS du compilateur de VS7 ou équivalent pour d’autres compilateurs

Source / Exemple :


le point de départ est ce petit code :
void MalEcrite(const char* entree)
{
  char buf[10];// ce buffer est limité à 10 caractères, soient 9 utiles !
  //copions tout ce qui se présente sans contrôle ... copieusement quoi !
  strcpy(buf, input);
  printf("voici mon buffer :\n%s\n\n", buf);
}

Conclusion :


Cet article est dans la catégorie Sécurité.
Pour nous simplifier la compréhension, bien respecter les principes suivants :
1) le code sera compilé sans les nouvelles options de sécurité du compilateur Visual Studio .NET
2) nous allons utiliser une version "Release" sans optimisation de code
3) nous allons afficher les adresses utiles pour mieux pouvoir les introduire en entrée.

Codes Sources

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.