34 lines
2.8 KiB
Markdown

# Ret2ret & Reo2pop
{{#include ../../../banners/hacktricks-training.md}}
## Ret2ret
Le **principal objectif** de cette technique est d'essayer de **contourner l'ASLR en abusant d'un pointeur existant dans la pile**.
En gros, les débordements de pile sont généralement causés par des chaînes, et **les chaînes se terminent par un octet nul à la fin** en mémoire. Cela permet d'essayer de réduire l'emplacement pointé par un pointeur existant déjà dans la pile. Donc, si la pile contenait `0xbfffffdd`, ce débordement pourrait le transformer en `0xbfffff00` (notez le dernier octet mis à zéro).
Si cette adresse pointe vers notre shellcode dans la pile, il est possible de faire en sorte que le flux atteigne cette adresse en **ajoutant des adresses à l'instruction `ret`** jusqu'à ce que celle-ci soit atteinte.
Par conséquent, l'attaque serait comme suit :
- NOP sled
- Shellcode
- Écraser la pile depuis l'EIP avec **des adresses vers `ret`** (RET sled)
- 0x00 ajouté par la chaîne modifiant une adresse de la pile pour la faire pointer vers le NOP sled
En suivant [**ce lien**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2ret.c), vous pouvez voir un exemple d'un binaire vulnérable et [**dans celui-ci**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2retexploit.c) l'exploit.
## Ret2pop
Dans le cas où vous pouvez trouver un **pointeur parfait dans la pile que vous ne voulez pas modifier** (dans `ret2ret`, nous changeons le dernier octet le plus bas en `0x00`), vous pouvez effectuer la même attaque `ret2ret`, mais la **longueur du RET sled doit être réduite de 1** (de sorte que le dernier `0x00` écrase les données juste avant le pointeur parfait), et la **dernière** adresse du RET sled doit pointer vers **`pop <reg>; ret`**.\
De cette façon, les **données avant le pointeur parfait seront supprimées** de la pile (ce sont les données affectées par le `0x00`) et le **dernier `ret` pointera vers l'adresse parfaite** dans la pile sans aucun changement.
En suivant [**ce lien**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2pop.c), vous pouvez voir un exemple d'un binaire vulnérable et [**dans celui-ci**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2popexploit.c) l'exploit.
## Références
- [https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md)
{{#include ../../../banners/hacktricks-training.md}}