logo Homepage
Pages: [1]
  Imprimer  
Auteur Fil de discussion: Suis-je sur la bonne voie ? + question sur le buffer overflow  (Lu 2042 fois)
HeWG
Profil challenge

Classement : 9946/54254

Néophyte
*
Hors ligne Hors ligne
Messages: 2


Voir le profil
« le: 18 Mai 2009 à 20:33:37 »

Bonjour,

je m'intéresse depuis longtemps à l'informatique... Pendant longtemps j'ai fait de l'infographie (3d), mais je compte m'attaquer à la sécurité informatique.
Au tout début j'étais un peu perdu, j'ai appris des choses mais les choses restent assez abstraites  .

Ce que je sais faire :
- HTML, CSS, PHP, MySQL (plutôt les bases pour le mysql)
- BASIC, C (bases aussi)
- je comprends l'assembleur, j'ai fait des crack me dans le passé

Récemment j'ai appris :
- les failles connues (include, xss, et quelques autres)
J'ai un peu mis en pratique celle du XSS en installant WAMP chez moi (je peux exécuter des pages .php), et les autres un peu dans les challenges de votre cours. Cela reste assez abstrait .
- quelques trucs pour manipuler le réseau (ARP poisoning) et la théorie sur d'autres attaques (DDoS)
- je me suis renseigné sur comment fonctionnent ces failles (empoisonnement de cache toussa)
- je commence à tenter la technique du buffer overflow. Après m'être renseigné sur plusieurs sites j'ai trouvé ce tuto.

Alors, est ce que ma démarche est bonne ? (je n'en ai pas vraiment idée vu que j'ai tracé mon chemin en fonction de ce que j'ai rencontré).

Ensuite la question : voici mon code C pour provoquer une 'segmentation fault' (issu du tuto) :
Code:
#include <stdio.h>
#include <string.h>

void t(){
       char tmp[3];
       char code[]="AAAAAAAAAAAAAAAAAAAAAA";
       strcpy(tmp,code);
}

int main(){
       t();
       return 0;
}

Normalement, comme on mets une chaine d'une longueur de 20 caractère dans un tableau de 3, je devrais voir une erreur... mais ce n'est pas le cas !
J'ai allongé la chaine à 40 caractères environ, et là j'obtiens un crash. Est ce dû à mon OS 64 bits ? (vista 64b)
Autre question : comment afficher en direct les registre comme EIP d'un programme sans utiliser OllyDGB (assez lourd), avec un logiciel plus léger par exemple.
Ps : j'utilise DEV C++ pour le C.

Voilà, merci d'avance, toute remarque constructive est la bienvenue ! j'ai hésité au sujet du forum où je posterai mon message, j'espère que c'est bon !
Journalisée
eldergob

Profil challenge

Classement : 609/54254

Membre Junior
**
Hors ligne Hors ligne
Messages: 59


Voir le profil WWW
« #1 le: 19 Mai 2009 à 08:52:55 »

Normalement, comme on mets une chaine d'une longueur de 20 caractère dans un tableau de 3, je devrais voir une erreur... mais ce n'est pas le cas !

Non, çà dépend de où est stockée ta variable 'tmp' dans la mémoire de l'ordinateur et des informations qui sont stockées plus loin en mémoire.

Ta fonction t() écrase des informations en mémoire après la variable 'tmp'. Si ces informations ne sont pas utilisées par le programme, il n'a pas de raison de planter. Si elles sont utilisées, cela dépend du programme. Si tu as inséré des valeurs valides pour le programme, il va fonctionner avec les valeurs valides, sinon il plante.

Exemple d'application: ta variable 'tmp' est un paramètre de fonction. A l'appel de la fonction, le programme va stocker l'adresse de retour de la fonction et la variable 'tmp' dans la pile. Avec ta fonction t(), tu viens faire faire un buffer overflow sur 'tmp' pour modifier l'adresse de retour. Quand la fonction s'achève, le programme regarde l'adresse de retour pour savoir où reprend son cours normal. Le programme repart donc vers l'adresse de retour modifiée, par exemple une fonction implantée en mémoire avec le même buffer overflow ou un autre.

Cette réponse est à prendre avec précaution. Je ne maitrise pas totalement le sujet. Et je ne suis pas sur que mes explications soient très claires.
Journalisée

Hardware: MyBrain 70 beta
Software: MyMind OS rc5
HeWG
Profil challenge

Classement : 9946/54254

Néophyte
*
Hors ligne Hors ligne
Messages: 2


Voir le profil
« #2 le: 19 Mai 2009 à 17:51:40 »

Ah ok, c'est déjà plus clair ! Ça peut donc varier...
Quoi qu'il en soit, j'ai réussi à modifier EIP de façon à toujours exécuter une même fonction (boucle infinie).

Par contre maintenant que j'ai fait ça, je me demande :
ceux qui exploitent la faille semblent pouvoir par fois prendre contrôle 'un ordinateur à distance'  , j'ai bien compris qu'on pouvais exécuter une zone précise du programme via un buffer overflow, mais encore faut il modifier le programme pour y injecter ces dangereuses lignes qui feront la liaison... !?

Je continue cependant mes recherches .

Merci à vous.

EDIT : j'ai encore un peu avancé mais je n'ai pas trouvé réponse à une question : comment choisir où placer son shellcode ? Il semblerai qu'on doive les placer à un endroit qui ne changerai pas selon les ordis, et y accéder avec un registre (ECX), mais comment faire pour que le programme trouve l'adresse du shellcode et la mette dans ECX ? J'ai dû louper un truc... 
« Dernière édition: 19 Mai 2009 à 23:14:13 par HeWG » Journalisée
Pages: [1]
  Imprimer  
 
Aller à: