Nous sommes le 15 Mar 2010, 07:41

Heures au format UTC + 1 heure [ Heure d'été ]






Poster un nouveau sujet Répondre au sujet  [ 15 messages ]  Aller à la page 1, 2  Suivante
  Imprimer le sujet Sujet précédent | Sujet suivant 
Auteur Message
 Sujet du message: buffer overflow
MessagePosté: 22 Juin 2009, 08:20 
Hors ligne

Inscription: 28 Mai 2009, 19:16
Messages: 57
bonjour à tous!

j'ai décidé d'essayer de comprendre ce qu'est un buffer overflow. Je comprends bien le coup du dépassement de mémoire sur un tableau qui n'admet qu'un nombre limité de caractères. Par contre, dès uqon commence à aborder la pile stack, les pointeur EBP...ben je comprends plus rien.
J'ai fait plusieurs cours mais à chaque fois, au moment où on parle de ce qui se passe dans la mémoire, jcomprends plus rien... :?
Vous auriez pas un cours gratuit et clair(très très clair en fait: mes neurones tournent au ralenti... :( ) sur tout ce qui est segmentation mémoire et toussa toussa à me proposer?(edit: si possible en lien avec les buffer overflow)

merci d'avance.

_________________
fervent supporter du hack dilletante


Haut
 Profil  
 
 Sujet du message: Re: buffer overflow
MessagePosté: 22 Juin 2009, 09:16 
Hors ligne

Inscription: 20 Mai 2009, 22:08
Messages: 45
Je te conseil de lire la mag hzv #1 où il y a un article asser claire sur les BOF


Haut
 Profil  
 
 Sujet du message: Re: buffer overflow
MessagePosté: 22 Juin 2009, 10:26 
Hors ligne
Avatar de l'utilisateur

Inscription: 13 Oct 2008, 00:27
Messages: 89
Localisation: Paris
Pour la segmentation de la mémoire je suis entrain d'écrire un article dessus mais il est pas finit. Tu peux aller le voir sur mon blog à l'adresse donné dans ma signature, dans la section articles.

Pour les registres va voir ici : http://www2.lifl.fr/~sedoglav/Archi/TP022.html

Je vais tout détailler bientôt en finissant mon article. Bonne chance à toi pour tes recherches ;)

_________________
"Forever trusting who we are and nothing else matters..."

Blog --> http://skyper.perso.neuf.fr


Haut
 Profil  
 
 Sujet du message: Re: buffer overflow
MessagePosté: 22 Juin 2009, 12:37 
Hors ligne
Avatar de l'utilisateur

Inscription: 16 Avr 2008, 11:59
Messages: 975
moi je dis :
pcasm!
ou assembly language step by step
http://www.flazx.com/ebook473.php


Haut
 Profil  
 
 Sujet du message: Re: buffer overflow
MessagePosté: 22 Juin 2009, 20:10 
Hors ligne

Inscription: 28 Mai 2009, 19:16
Messages: 57
merci pour vos réponses mais je galère encore un peu... :|
alors pour résumer sur les différents segments utilisés lors du lancement d'un programme:
Stack: pour toutes les variables passées à la fonction et dans la fonction.
Data: pour toutes les variables globales statiques initialisées au lancement du programme.
Bss: pour toutes les variables globales statiques déclarées au lancement du programme mais non initialisées.
Heap: toutes les variables qui ne sont pas déclarées au moment du lancement du programme et/ou les variables des fonctions.

Donc si je comprends bien au final on peut résumer en disant que stack=data+bss+heap.
...ou pas?

_________________
fervent supporter du hack dilletante


Haut
 Profil  
 
 Sujet du message: Re: buffer overflow
MessagePosté: 22 Juin 2009, 21:04 
Hors ligne
Staff
Staff
Avatar de l'utilisateur

Inscription: 22 Mar 2008, 22:45
Messages: 920
Je crois que tu confonds un peu tout.
La section data et la section bss sont des zones du fichier exécutable... qui se retrouveront inévitablement en mémoire.
Data et Bss, pour l'instant osef de la différence.

Le tas (heap) :
Quand tu fais un malloc, ou un new en C++, tu alloues un bout de mémoire dans le tas. La taille de mémoire que tu vas allouer n'est à priori pas connu lors de la compilation. C'est pour ça qu'on appel ça de l'allocation dynamique...

La pile (stack) :
Dans la pile tu as uniquement les variables locales aux fonctions. (Les paramètres sont un peu des variables locales.) Sauf les variables static qui sont en fait des variables globales déguisées. Dans la pile on trouve aussi tout plein de données relatives à l'exécution du programme. Tu sais ces fameux registres ESP, EIP qui sont sauvegardés et qu'on aime bien écraser ?

Pour ce qui est de la section data, c'est pour stocker les données. Genre tu fais char *str = "Hello World\n"; il faut bien que la chaîne soit stockée quelque part dans l'exécutable. C'est dans la section data. Mais la variable str peut très bien être dans la pile, l'initialisation se fera au début de la fonction. La section data contient aussi les variables globales auxquels on a donné une valeur à la compilation. Genre char *str[] = "Hello World\n"; si str est global.

Et dans le bss on y trouve quoi ? Bah les autres variables globales ou static.


Et si tu faisais un peu de reversing sur des programmes que t'écris toi-même ? Tu comprendrais mieux de quoi il s'agit.


Haut
 Profil  
 
 Sujet du message: Re: buffer overflow
MessagePosté: 24 Juin 2009, 09:58 
Hors ligne

Inscription: 28 Mai 2009, 19:16
Messages: 57
grave! en plus c'est mon topic! :mrgreen:

et sinon pour répondre celelibi, si je savais faire du reversing j'en ferais mais là.... :oops: (je mène beaucoup de projets en même temps: comprendre le réseau, programmation, bufferoverflow,prise en main de linux donc ça avance lentement bref osef)

sinon, à force d'avoir lu presque une dizaine de cours là dessus, je crois que j'ai fini par comprendre(quand je disais que j'étais lent... :D ).
J'ai bien compris que lors d'un dépassement, on réécrivait EIP qui pointait l'adresse dans text de l'instruction suivante.
Par contre, j'arrive toujours pas à comprendre à quoi sert concrètement le registre EBP:
"Le registre EBP, appelé aussi FP (frame pointer) ou LBP (local base pointer), sert à référencer les différentes variables de chaque bloc. On accède aux différentes variables en additionnant ou en soustrayant d'EBP."
Moi pas comprendre... :?

_________________
fervent supporter du hack dilletante


Haut
 Profil  
 
 Sujet du message: Re: buffer overflow
MessagePosté: 24 Juin 2009, 11:02 
Hors ligne
Avatar de l'utilisateur

Inscription: 13 Oct 2008, 00:27
Messages: 89
Localisation: Paris
Enfaite, EBP (appelé pointeur de base) pointe sur le bloc d'activation de la fonction en cours (dans la pile). Un bloc d'activation est est crée à chaque fois qu'une fonction est appelée (même main). Il est placé au dessus du bloc d'activation de la fonction qui l'a appelée, en remontant vers les adresses mémoire basses . C'est une façon de diviser la mémoire de la Pile. Chaque fonction à donc son bloc d'activation qui contient les variables locales de la fonction en cours. C'est pour cette raison que deux variables portant le même nom mais dans deux fonctions différentes peuvent avoir des valeurs différentes. C'est ce qu'on appéle la portée des variables.

Tu sais que la Pile marche en FILO (premier entré, dernier sorti) ? Donc quand une fonction est appelée, un nouveau bloc d'activation est crée. Le processeur va empiler dans l'ordre suivant :

- Les arguments de la fonction
- L'adresse de retour
- La sauvegarde de l'EBP (appelé SFP dans ce cas là)
- Variables locales à la fonction.

Vu que ces informations sont empilées, il faut que tu imagines la chose à l'envers. Quand tu fais un buffer Overflow, le tampon va dépasser sur les autres variables locales (si il y en a), il va écraser la SFP et par la suite l'adresse de retour (l'EIP sauvegardé).

J'espère que ça va t'aider à compendre. J'ai écris ces lignes un peu en vrac mais je suis entrain de finir mon article sur la segmentation de la mémoire qui sera beaucoup plus explicite. Bien comprendre comment la mémoire marche est la première étape pour faire du Buffer Overflow.

Bonne chance pour la suite ;)

_________________
"Forever trusting who we are and nothing else matters..."

Blog --> http://skyper.perso.neuf.fr


Haut
 Profil  
 
 Sujet du message: Re: buffer overflow
MessagePosté: 24 Juin 2009, 23:52 
Hors ligne

Inscription: 24 Mar 2008, 11:58
Messages: 666
sauf qu'en cas pratique, tout ce que tu raconte ne marche plus (c'est uniquement dans les p49 & cie qu'on lit ca)
maintenant, ya gcc 4, ya la SSP, ya propolice etc

_________________
"Le Telnet, ca prends combien de raw sockets en sur-adressage sur un FDDI ?"
toto is dead.


Haut
 Profil  
 
 Sujet du message: Re: buffer overflow
MessagePosté: 25 Juin 2009, 00:15 
Hors ligne
Avatar de l'utilisateur

Inscription: 13 Oct 2008, 00:27
Messages: 89
Localisation: Paris
Oui et non. Il est vrai que maintenant il y a des sécurités mises en place pour éviter les débordements. Mais quand on apprend à faire un Buffer Overflow, il faut commencer par le commencement. Apprendre comment est organisé la mémoire (segmentation et co.) est fondamental avant de compliquer la chose.

D'ailleurs sous gcc, pour enlever la protection du canary il faut utiliser l'argument "-fno-stack-protector".

_________________
"Forever trusting who we are and nothing else matters..."

Blog --> http://skyper.perso.neuf.fr


Haut
 Profil  
 
Afficher les messages précédents:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 15 messages ]  Aller à la page 1, 2  Suivante

Heures au format UTC + 1 heure [ Heure d'été ]


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages
Vous ne pouvez pas joindre des fichiers

Rechercher:
Aller à:  



HZV WILL NEVER DIE !!