Format string attack

Forums » Sécurité Répondre

Glubby26 mai 2008 à 11h31


En ce moment, je suis en train de préparer une démonstration de la "format string attack". Le but est de pouvoir lire les valeurs qui sont dans la pile d'exécution du programme. Donc, pour y parvenir j'utilise un petit programme C crée dans ce but (et trouver sur Internet) :

/*
* fmtme.c
* Format a value into a fixed-size buffer
*/
#include <stdio.h>
int main(int argc, char **argv){
char buf[100];
int x;
if(argc != 2)exit(1);
x = 1;
snprintf(buf, sizeof buf, argv[1]);
buf[sizeof buf - 1] = 0;
printf("buffer (%d): %sn", strlen(buf), buf);
printf("x is %d/%#x (@ %p)n", x, x, &x);
return 0;
}

Le programme fonctionne bien et voici sa trace d'exécution :

$ ./fmtme "aaaa %x %x %x %x %x %x %x %x %x"
buffer (49): aaaa 0 0 0 bf821020 bf820ff0 8048226 0 1 61616161
x is 1/0x1 (@ 0xbf820f68)

Mon problème est que dans l'exemple que j'ai trouvé, l'affichage des résultats est différent. Dans mon exemple, il a été exécuté sur une BSD/OS 4.1 et en voici le résultat :
% ./fmtme "aaaa %x %x"
buffer (15): aaaa 1 61616161
x is 1/0x1 (@ 0x804745c)

(1 est la valeur de x et 61616161 est l'affichage hexadécimal de aaaa passé en paramètre)

Donc j'aimerais savoir à quoi corresponde ces valeurs : "0 0 0 bf821020 bf820ff0 8048226 0" qui sont affichés avant les éléments de la pile. J'ai fait tous ces tests sur Backtrack 2, Debian 3.1 et fedora 7 (kernel 2.6) et j'obtiens des résultats similaires. Je vous remercie par avance pour votre aide.

Forums » Sécurité Répondre