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 burlar 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 la memoria. Esto permite intentar reducir el lugar apuntado por un puntero existente en la pila. Así, si la pila contenía 0xbfffffdd
, este desbordamiento podría transformarlo en 0xbfffff00
(nota el último byte nulo).
Si esa dirección apunta a nuestro shellcode en la pila, es posible hacer que el flujo alcance esa dirección agregando direcciones a la instrucción ret
hasta que se alcance esta.
Por lo tanto, el ataque sería así:
Trineo de NOP
Shellcode
Sobrescribir la pila desde el EIP con direcciones a ret
(trineo de RET)
0x00 añadido por la cadena modificando una dirección de la pila para que apunte al trineo de NOP
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 deseas modificar (en ret2ret
cambiamos el byte más bajo final a 0x00
), puedes realizar el mismo ataque ret2ret
, pero la longitud del trineo de RET debe ser acortada en 1 (para que el 0x00
final sobrescriba los datos justo antes del puntero perfecto), y la última dirección del trineo de RET 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)