Pentesting con Kali VI - Buffer Overflow (sobre stack)

1 comment
En el siguiente módulo aprenderemos los conceptos básicos sobre el desbordamiento de buffer sobre el stack. Analizaremos en un principio un pequeño programa desarrollado en el lenguaje de programación C con el debugger ollydbg.



Acá esta el exe para que se descarguen, el código es el siguiente.


La idea de éste ejercicio es lograr que el pequeño programa nos muestre el string ‘you win!’, para eso, debemos lograr desbordar el buffer y escribir sobre la cookie. Como es un ejercicio de ejemplo, ya tenemos hardcodeado el valor de cookie (41424344) como así también los valores que tendremos que buscar en el debugguer cuando ejecutemos la aplicación.

Para el siguiente ejercicio es necesario que tengan instalado ollydbg. También nos será necesario un exploit para automatizar la explotación.
El siguiente ejemplo de exploit está hecho en python 2.6




Veamos entonces cómo terminar de armar nuestro exploit para lograr desbordar el buffer y obtener el string deseado.

1- Ejecutamos el .py y luego levantamos el olly atacheandonos al proceso del stack1.
Para attachear un proceso en el olly vamos a file -> attach  se abre una ventana y elegimos el programa.


Una vez attacheados, click en la letra E del panel superior y elegimos nuevamente el stack1.

Hacemos click derecho sobre el panel principal sSearch for -> All referenced text string  y buscamos el texto que tenemos como referencia que en éste caso es ‘you win!. ’Presionamos en play, vamos al programa hacemos click y volvemos al ollydbg para mirar los valores.


Como podemos visualizar en el panel derecho, el valor de EBX es 0022FEE0  y en el panel inferior derecho vemos que la posición posterior al return en kernel32 es 0022FF3C.
Entonces, debemos levantar restar al valor más grande el valor más chico en hexadecimal y así obtendremos el valor que debemos pasarle al buffer.


Vayamos a nuestro exploit y modifiquemos un poco el payload, necesitaremos importar la librería struct para poder pasar el valor que necesita cookie para mostrarnos el string.



Las 92 A son las necesarias para desbordar el tamaño del buffer (es el resultado de la cuenta que realizamos con los dos valores identificados en el ollydbg, nos queda 5C y si lo pasamos a decimal nos queda ese número). Luego llamamos el struct.pack, le indicamos que trabajaremos con little endian y el segundo parámetro es el valor de cookie.

Probemos entonces, cerremos todo, corremos nuevamente el .py, nos attacheamos con olly, click en E para elegir el módulo con el cual trabajaremos, presionamos play, vamos a la ventana donde se está ejecutando nuestro exploit, hacemos click, volvemos al ollydbg y damos F8 hasta que explote el payload y nos muestre el string la consola.


Ejercicios propuestos:

  •  Intentar reproducir el ejercicio sin la guia.

    Intenten realizar los ejercicios y brindarnos un feedback, es la única forma que tenemos de darnos cuenta si se entiende lo que vamos explicando, si pueden hacer los ejercicios o si tenemos que modificar algunas cosas.

Como siempre, cualquier duda o consulta, estamos por aquí.

Regards, @balderramaeric

1 comentario

  1. uff! esta parte del curso fue una bomba para nosotros los principiantes :)

    ResponderEliminar