Bonjour à tous,

Alors voila je cherche actuellement à reproduire sur ma machine (un ubuntu 11.04 dans une machine virtuelle VMware) un exemple d'exploitation d'un buffer overflow, ici : http://lasecwww.epfl.ch/~oechslin/advbof.pdf (page 12). En fait je ne comprend pas pourquoi alors que j’exécute la même chose avec la même ligne de commande, le segfault ne se produit pas au même moment.

Voila le code (que je compile en ajoutant -fno-stack-protector pour désactiver la détection et le blocage des segfault)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
#include <stdio.h>
 
main (int argc, char *argv[])
{
  char buffer[256];
  if (argc > 1)
    strcpy(buffer,argv[1]);
}
Par exemple dans le tuto il fait et obtient

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
ouah@weed:~$ ./vuln1 `perl -e 'print "B"x260'`AAAA
Segmentation fault (core dumped)
Alors que moi avec la même commande je n'ai pas de segfault,
il se produit a partir du moment ou je met 8 A au lieu de 4. Et ce n'est pas un core dumped.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
toto@ubuntu:~$ ./vuln1 `perl -e 'print "B"x260'`AAAA
toto@ubuntu:~$ ./vuln1 `perl -e 'print "B"x260'`AAAAA
toto@ubuntu:~$ ./vuln1 `perl -e 'print "B"x260'`AAAAAA
toto@ubuntu:~$ ./vuln1 `perl -e 'print "B"x260'`AAAAAAA
toto@ubuntu:~$ ./vuln1 `perl -e 'print "B"x260'`AAAAAAAA
Erreur de segmentation
Comment peut on expliquer que le segfault ne se produise pas au même moment ? Car j'utilise une VM ? Car j'ai un proc 64bits ? A cause de Ubuntu ? De la version de gcc ? Bref, je ne comprend pas et m'en remet donc aux pros de linux qui pourraient m'aider a comprendre ceci !

Merci d'avance.
Zarohn.