Mostrando entradas con la etiqueta ingeniera inversa. Mostrar todas las entradas
Mostrando entradas con la etiqueta ingeniera inversa. Mostrar todas las entradas

martes, 3 de noviembre de 2015

Pentesting con Kali VI - Buffer Overflow (sobre stack)

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

Fuente: http://www.sniferl4bs.com/2015/10/pentesting-con-kali-vi-buffer-overflow.html

martes, 17 de febrero de 2015

Ingeniería inversa para principiantes (libro gratuito)

¿Por qué uno debe aprender el lenguaje ensamblador en estos días? A menos que seas desarrollador de sistemas operativos, es probable que no necesites escribir nunca en ensamblador: los compiladores modernos realizan optimizaciones mucho mejor de lo que lo hacen los humanos. Además, las CPUs modernas son dispositivos muy complejos y saber ensamblador no te dará un conocimiento exacto de su funcionamiento interno.

Sin embargo, hay al menos dos áreas en las que un buen conocimiento de ensamblador podría ayudarte: Primero, el análisis de malware/seguridad. Segundo, obtener una mejor comprensión de tu código compilado mientras lo depuras.

Ingeniería inversa para principiantes (en inglés 'Reverse Engineering for Beginners') es un libro gratuito de Dennis Yurichev dirigido a todos aquellos que quieran aprender a entender el código x86 (que representa la mayor parte de ejecutables en el mundo del software) y ARM creado por compiladores C/C++.


Muy, muy recomendable!!

Descarga del libro: http://beginners.re/RE_for_beginners-en.pdf


Fuente: http://www.hackplayers.com/2014/08/ingenieria-inversa-para-principiantes.html