Outils pour utilisateurs

Outils du site


appsysteme:buffer_overflow_basique

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
appsysteme:buffer_overflow_basique [2016/03/25 12:36]
arkinar créée
appsysteme:buffer_overflow_basique [2016/07/04 08:38] (Version actuelle)
Ligne 4: Ligne 4:
  
 Le buffer overflow est le dépassement de la mémoire dans un programme. Le buffer overflow est le dépassement de la mémoire dans un programme.
-Il est souvent lié au C du faite que ce langage nécessite de stipuler l'​allocation mémoire pour les tailles des variables.+Il est souvent lié au C du fait que ce langage nécessite de stipuler l'​allocation mémoire pour les tailles des variables.
  
  
Ligne 13: Ligne 13:
 </​code>​ </​code>​
  
-La variable buf va pouvoir recevoir jusqu'​à 49 caractères (le dernier caractère est le null byte qui est la fin de chaîne \0+La variable buf va pouvoir recevoir jusqu'​à 49 caractères (le dernier caractère est le null byte qui est la fin de chaîne \x00
  
 Si on lui donne plus de 49 caractères elle va déborder, d'où le buffer overflow. Si on lui donne plus de 49 caractères elle va déborder, d'où le buffer overflow.
Ligne 23: Ligne 23:
 __2.1 Méthode 1 : Exploitation d'un buffer overflow__ __2.1 Méthode 1 : Exploitation d'un buffer overflow__
  
-Prenons l'​exemple d'un programme qui demande le nom de la personne et qui lui print ensuite.+Prenons l'​exemple d'un programme qui demande le nom de la personne et qui ensuite ​le print.
  
 <​code>​ <​code>​
Ligne 38: Ligne 38:
 </​code>​ </​code>​
  
-Le resultat ​de la commande va nous donner 30 fois la lettre A.+Le résultat ​de la commande va nous donner 30 fois la lettre A.
  
 Essayons de nouveau : Essayons de nouveau :
Ligne 47: Ligne 47:
 </​code>​ </​code>​
  
-Il faut augmenter le nombre de A jusqu'​a ​obtenir un **Segmentation Fault** qui signifie un plantage du programme+Il faut augmenter le nombre de A jusqu’à obtenir un **Segmentation Fault** qui signifie un plantage du programme ​suite au dépassement du buffer.
  
 Dans notre cas cela sera : Dans notre cas cela sera :
Ligne 69: Ligne 69:
 - "​r"​ pour run - "​r"​ pour run
  
-- "b* adresse"​ pour mettre un breakpoint(point d'arret) dans le programme (attention à bien faire défiler le programme avec "​c"​ pour continue et non plus "​r"​)+- "b* adresse"​ pour mettre un breakpoint(point d’arrêt) dans le programme (attention à bien faire défiler le programme avec "​c"​ pour continue et non plus "​r"​)
  
-- "disass ​fonction"​ pour désassembler une fonction+- "pdisass ​fonction"​ pour désassembler une fonction
  
 L'​adresse "​$PC"​ dans gdb-peda est la prochaine adresse où le programme va jumper. L'​adresse "​$PC"​ dans gdb-peda est la prochaine adresse où le programme va jumper.
Ligne 84: Ligne 84:
 [------------------------------------stack-------------------------------------] [------------------------------------stack-------------------------------------]
 </​code>​ </​code>​
-Dans notre cas le but et de trouver à partir de combien de AAAA on ecrit à cette adresse+Dans notre cas le but et de trouver à partir de combien de AAAA on écrit ​à cette adresse
  
 Pour info A en hexa donne : \x41 Pour info A en hexa donne : \x41
Ligne 90: Ligne 90:
 On remarque que pour 53*A + AAAA on réécrit la prochaine adresse. On remarque que pour 53*A + AAAA on réécrit la prochaine adresse.
  
-Pour trouver l'​adresse sur laquel ​jumper , il faut regarder le code.+Pour trouver l'​adresse sur laquelle ​jumper , il faut regarder le code.
  
 On va trouver l'​adresse de la fonction shell qui est dans notre programme (dans le cas deux on verra comment mettre notre propre shell). On va trouver l'​adresse de la fonction shell qui est dans notre programme (dans le cas deux on verra comment mettre notre propre shell).
Ligne 96: Ligne 96:
 Pour cela on va faire  Pour cela on va faire 
 <​code>​ <​code>​
-disass ​shell +pdisass ​shell 
  
 gdb-peda$ disass shell gdb-peda$ disass shell
Ligne 122: Ligne 122:
 </​code>​ </​code>​
  
-On peut désormais écrire des commandes avec l'​utilisateur du programme.+On peut désormais écrire des commandes avec les droits root.
  
  
appsysteme/buffer_overflow_basique.1458909418.txt.gz · Dernière modification: 2016/07/04 08:37 (modification externe)