mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
34 lines
2.7 KiB
Markdown
34 lines
2.7 KiB
Markdown
# Ret2ret & Reo2pop
|
|
|
|
{{#include ../../../banners/hacktricks-training.md}}
|
|
|
|
## Ret2ret
|
|
|
|
El **objetivo** principal de esta técnica es intentar **eludir ASLR abusando de un puntero existente en la pila**.
|
|
|
|
Básicamente, los desbordamientos de pila suelen ser causados por cadenas, y **las cadenas terminan con un byte nulo al final** en memoria. Esto permite intentar reducir el lugar apuntado por un puntero existente en la pila. Así que si la pila contenía `0xbfffffdd`, este desbordamiento podría transformarlo en `0xbfffff00` (nota el último byte en cero).
|
|
|
|
Si esa dirección apunta a nuestro shellcode en la pila, es posible hacer que el flujo llegue a esa dirección **agregando direcciones a la instrucción `ret`** hasta que se alcance esta.
|
|
|
|
Por lo tanto, el ataque sería así:
|
|
|
|
- NOP sled
|
|
- Shellcode
|
|
- Sobrescribir la pila desde el EIP con **direcciones a `ret`** (RET sled)
|
|
- 0x00 agregado por la cadena modificando una dirección de la pila haciéndola apuntar al NOP sled
|
|
|
|
Siguiendo [**este enlace**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2ret.c) puedes ver un ejemplo de un binario vulnerable y [**en este**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2retexploit.c) el exploit.
|
|
|
|
## Ret2pop
|
|
|
|
En caso de que puedas encontrar un **puntero perfecto en la pila que no quieras modificar** (en `ret2ret` cambiamos el byte más bajo final a `0x00`), puedes realizar el mismo ataque `ret2ret`, pero la **longitud del RET sled debe acortarse en 1** (así que el final `0x00` sobrescribe los datos justo antes del puntero perfecto), y la **última** dirección del RET sled debe apuntar a **`pop <reg>; ret`**.\
|
|
De esta manera, los **datos antes del puntero perfecto serán eliminados** de la pila (estos son los datos afectados por el `0x00`) y el **último `ret` apuntará a la dirección perfecta** en la pila sin ningún cambio.
|
|
|
|
Siguiendo [**este enlace**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2pop.c) puedes ver un ejemplo de un binario vulnerable y [**en este**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2popexploit.c) el exploit.
|
|
|
|
## References
|
|
|
|
- [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}}
|