Pointers

bo

Los pointers (o punteros) son un concepto clave en programación, especialmente en lenguajes como C y C++. Un puntero es una variable que almacena la dirección de memoria de otra variable. En lugar de contener un valor de datos directamente (como un número o un carácter), un puntero guarda la ubicación de memoria donde ese dato está almacenado.

Conceptos Clave sobre los Punteros

  1. Dirección de Memoria: Cada variable en un programa tiene una dirección de memoria única, que es la ubicación en la memoria de tu computadora donde se guarda el valor de esa variable.

  2. Puntero: Un puntero es una variable especial cuyo valor es una dirección de memoria, es decir, apunta a una ubicación en la memoria donde se almacena otra variable.

Los punteros en el buffer overflow son la clave para manipular la memoria del programa vulnerable y redirigir la ejecución a código malicioso, como un shellcode.

ejecutamos el siguiente comando :

!mona jmp -r esp -cpb ''\x00"

se nos abrira una ventana que debemos maximizar, y ahí nos dirá cuantos pointers se han encontrado :

Se encuentra en la parte de abajo Number of pointers of type 'jmp esp' : en nuestro caso y el caso de los que estan resolviendo la brainpan junto a mi hemos encontrado 1 pointer. Ahora debemos copiar el numero que se encuentra abajo de results. Esta cadena la pegaremos al hacer click en el boton de arriba a la izquierda que podemos ver en la siguiente imagen

en las ventanas principales del programa, en la primera ventana especificamente vemos que se marca una linea de azul despues de el paso anterior

debemos copiar el numero que tenemos ahi

El ESP (Extended Stack Pointer) es un registro que apunta al tope de la pila (stack). Cuando desbordas un buffer, tu payload muchas veces queda muy cerca de donde apunta ESP en ese momento.

Entonces: Copiar el valor de ESP (o saber aproximadamente su valor) te ayuda a calcular a dónde saltar para ejecutar tu shellcode.

ahora si, estamos listos para el paso final..

Last updated