Pb anti-overflow: quelle cause ?

Fermé
panxhito Messages postés 4 Date d'inscription mardi 29 septembre 2009 Statut Membre Dernière intervention 9 juin 2010 - Modifié par panxhito le 9/06/2010 à 14:59
panxhito Messages postés 4 Date d'inscription mardi 29 septembre 2009 Statut Membre Dernière intervention 9 juin 2010 - 9 juin 2010 à 17:32
Bonjour,

J'ai achete un bouquin de prog en C; un des exercices consiste a illustrer les exploits a travers l'overflow. un petit code permet de simuler une demande d'acces par mot de passe, le bon password renvoie Access Granted et un mauvais Access Denied.

le point interessant est que en entrant un pass trop long du genre AAAAAAAAAAAAAAAAAAAAAAAAAAA, le systeme est cense repondre Access Granted, puis d'apres l'imprim ecran du bouquin de ne pas partir en seg fault.

quand j'essaye ca chez moi, sur un laptop HP classique grand public, avec Ubuntu 10.04, j'ai ma seg. fault qui apparait tt de suite, sans mm avoir le message Access Granted. j'ai tente l'exemple sur la mm machine ac un live CD Backtrack3 , mm chose.

j'ai demande a un ami qui a une super becane et qui est sous mandriva de le tester, il m'a dit qu'il reussi a voir le Access Granted mais qu'ensuite ca part en seg fault.

Je pense que ce que veut montrer l'auteur, c'est qu'on peut gagner l'acces au systeme donc je ne pense pas que lui attende une seg fault. Maintenant avec les systemes modernes j'imagine que ces fautes doivent etre en permanence prises en compte ...

malgre tout perso, j'aurais envie de soupconner mon proce ( ou l'appli /process qui le gere ) d'etre deliberement limite du fait que ce soit une config "familiale" qui n'est pas prevu pour ce genre de chose; est ce que ca pourrait etre ca ?

l'autre possibilite que je vois serait qu'Ubuntu est egalement trop "grand public" et qu'il me faudrait une distrib avec plus de liberte ... mm si je trouve bizarre que backtrack qui fonctionne je crois sous KDE, donc sur une base differente du noyau Ubuntu ( me semble t'il) ne fonctionne pas non plus ...

qq aurait une idee sur la question ?

Je joins a la fin le code source en question

merci



#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int check_authentication(char *password){
int auth_flag = 0;
char password_buffer[16];

strcpy(password_buffer,password);

if(strcmp(password_buffer,"brillig") == 0)
auth_flag = 1;
if(strcmp(password_buffer,"outgrabe")==0)
auth_flag = 1;


return auth_flag;
}

int main(int argc,char *argv[]){
if(argc<2){
printf("Usage: %s <password>\n",argv[0]);
exit(0);
}
if(check_authentication(argv[1])){
printf("\n_=_==_=__=_=_=_=_=_=_=_=_\n");
printf(" Access granted.\n");
printf("_=_=_=_=_=_=_=_=_=_=_=_=_=_\n");
} else {
printf("\nAccess Denied.\n");
}
}

1 réponse

panxhito Messages postés 4 Date d'inscription mardi 29 septembre 2009 Statut Membre Dernière intervention 9 juin 2010
9 juin 2010 à 17:32
ok , ca vient de limitations sur ubuntu

un copy paste :

To allow stack-based buffer overflows in Ubuntu (and most modern kernels) there are a number of required gcc options. Below is an example command-line:

$ gcc -fno-stack-protector -z execstack vulnerable.c

-fno-stack-protector disables SSP (stack guard)
-z execstack marks the stack as executable

To turn randomization off by running:

$ sysctl -w kernel.randomize_va_space=0
0