Bonjour,
Je me suis récemment amusé à essayer le buffer overflow à l'aide d'un cours assez complet que j'ai trouvé sur internet, mais je rencontre, dès le premier programme présenté en exemple, un problème.
Voici le programme:
Après quelques recherches, il semble que c'est vraiment l'exemple de base pour débuter, mais seulement, il ne fonctionne pas vraiment...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 #include <stdio.h> //#include <string.h> main (int argc, char *argv[]) { char buffer [256]; if (argc>1) strcpy(buffer, argv[1]); return (0); }
Déja, j'ai ajouté l'include string.h qui n'était pas et j'ai essayé avec et sans, ce qui ne change rien au résultat.
La compilation se déroule sans problème (heuresement...) et lors de l'execution, il ne se passe rien. seulement, lorsque je tape:
J'obtient comme réponse:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 ./vuln1 `perl -e 'print "A"x300'`
Alors que j'attends segmentation fault.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 ****stack smashing detected***** ====bactrace: ====== des trucs ====memory map ==== d'autres trucs (les adresses et les droits) Abandon (core dumped)
et quand je regarde le core dump, il confirme bien programm terminated with signal 6, Aborted
au lieu de signal 11, Segmentation fault.
Comme mon cours date de 2002 j'imagine que gcc a depuis été mis à jour pour protéger ce genre de bug, mais j'aimerais bien avoir confirmation et si possible savoir si il y a moyen de contourner ça (par exemple, compiler sans cette protection)
Une autre question me vient: pour faire quelque chose du buffer overflow, il faut compiler un exploit, dans lequel on insère un shellcode, est ce que quelqu'un pourrait m'éclairer sur ce qu'est précisément un shellcode
Je précise que je suis sous Ubuntu processeur x86
Merci d'avance
Partager