Ret2ret & Reo2pop
Last updated
Last updated
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)
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 puesto a 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 esta sea alcanzada.
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 puedes ver un ejemplo de un binario vulnerable y en este el exploit.
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 puedes ver un ejemplo de un binario vulnerable y en este el exploit.
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)