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.
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
Fuente: http://www.sniferl4bs.com/2015/10/pentesting-con-kali-vi-buffer-overflow.html
No hay comentarios:
Publicar un comentario