Ci-dessous, les différences entre deux révisions de la page.
appsysteme:buffer_overflow_basique [2016/03/25 12:36] arkinar créée |
appsysteme:buffer_overflow_basique [2016/04/19 11:18] yorin Ortho. Il faudra revoir cet article imo |
||
---|---|---|---|
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. |