Titre: [général] Buffer overflow Posté par: the lsd le 20 Décembre 2005 à 11:25:07 Je me posais la question l'autre jour jour du comment du pourkoi d'un buffer overflow...
Je savais que c'etait un dépassement de la mémoire tampon, mais a part ca pas grand chose Du coup je me suis dit : "Mon grand, Google est ton ami:!:" Sauf que google il m'a pas aidé beaucoup, parce que moi avoir pas compris ce qu'il disait... Alors si quelqu'un pouvait me des donner des liens "compréhensible" sur le buffer overflow, ou meme expliquer comment ca marche, je suis preneur. =D Merki Titre: [général] Buffer overflow Posté par: comtezero le 20 Décembre 2005 à 14:18:08 C'est la goutte qui fait deborder le vase. =D
Titre: [général] Buffer overflow Posté par: SeVeN le 24 Décembre 2005 à 01:11:20 Bah c'est pas compliqué, le programmeur a prévu 15 petites cases pour stoquer les données, et hop pas de chance, on veut en écrire 30. Donc y'en a 15 qui se balade dans la mémoire là où elles ne devraient pas (à la suite des 15 premieres autorisées) Apres, l'exploitation d'un buffer overflow consiste a écrire par dessus des données existantes afin de modifier eip par exemple, pour qu'il pointe vers une bout de code à nous, une fonction qu'on veut executer.
Titre: [général] Buffer overflow Posté par: neoflo le 06 Janvier 2006 à 22:56:46 Code: #include <stdlib.h> NOM_CLIENT = 4 octets | ARGENT_CLIENT = 4octers | NUMERO_CLIENT = 4 octers (on est sur un PC en général avec la norme BIG ENDIAN (ou LITTLE en fait, je confond toujours, mais la mémoire est rangé dans l'ordre inverse)) Ainsi, si on écrit la chaine "aaaa", elle est en réalité de 5 octers car elle finit par le caractère \0, ainsi, l'argent client va valoir 0 car on aura écrasé cette zone mémoire et la programme affichera qu'on a un crédit de 0€. Si on entre "aaaaaaaa", on va se retrouver avec une somme bcp plus interessante... Pour éviter ce type de faille dans ce cas ci, il faut écrire: scanf("%4s"..... et il n'y aura plus d'écrasement mémoire Titre: [général] Buffer overflow Posté par: noitan le 07 Janvier 2006 à 00:35:05 cé très clair ! jvais essayer le code rien que pour voir combien d'euros jvais me faire... :lol:
Titre: [général] Buffer overflow Posté par: absolut le 08 Janvier 2006 à 21:56:09 Pour comprendre, ce qu'est un buffer overflow, je te conseillerais si tu fais un peu de prog, d'apprendre comment ca se passe en memoire.
Notamment, l'appel de fonction, le passage d'arguments a une fonction et la reservation memoire. disons une fonction comme ceci que l'on appelle d'une autre fonction : #define X 13092 #define Y 1991 int foo(char *str) { char pad[X]; char b[Y]; strcpy(b, str); return (0); } pour simplifier et en gros : une valeur sur la pile est stockee lors de l'appel a ta fonction foo (on l'appelle la 'valeur de retour' de ta fonction appelante). Ensuite, tu as 13092 octets qui sont reserves, puis s'ajoutent 1991 octets soient 15083 octets au total. Puis va s'effectuer la fonction strcpy avec en arguments les adresses de b et str. Lors de la copie en memoire (ce que fait strcpy), si ta chaine str, fais 1991 caracteres pas de buffer overflow, si elle depasse 1991 mais et inferieure 15083, ton programme ne plantera pas mais tu auras un bufferoverflow, si elle depasse 15083: bufferOverflow mais pas d'erreur de ton programme et puis si tu depasses tu vas ecraser la valeur de retour de ta fonction appelante et la, soit tu as de la chance (ou pas) et ton programme ne plante pas mais a un comportement incomprehensible soit il plante. Donc le plus amusant est d'ecraser la valeur de retour de ta fonction appelante et d'en mettre une que tu connais et qui par exemple pourrait t'executer un shell. Ce qui est amusant apres, par exemple, sous Unix, c'est d'exploiter des bufferOverflow avec et sans shell code. Voila, un complement d'information. L'expose et l'explication n'est pas juste a 100%, c'est juste pour donner une idee. |