Tag Archive for gpr

GDB orientado a Pentesting – Parte 3

Continuamos con esta serie de artículos sobre depuración de programas orientados al pentesting y la ingeniería inversa. En los artículos anteriores de esta serie GDB orientado a Pentesting vimos cómo podíamos depurar simples programas hechos en C que contenían sus símbolos de depuración, lo cual facilita mucho la depuración, así como programas que no incluyen estos símbolos, algo bastante más habitual cuando estamos realizando una tarea de pentesting o reverse engineering.

Si no has leído esos artículos, antes de leer este te aconsejo que le eches un vistazo. Los podrás encontrar en los siguientes enlaces:

GDB orientado a Pentesting – Parte 1

GDB orientado a Pentesting – Parte 2

En esta ocasión vamos a ver cómo podríamos “crackear” un simple programa desarrollado en C. El programa es muy simple; se le pasa como argumento un código, si es correcto mostraré un mensaje diciendo que el código secreto es correcto, en caso contrario indicaré que es erróneo.

Aquí podemos plantear dos opciones; hacer un simple “bypass” del programa, para que introduciendo cualquier cosa obtengamos el mensaje correcto, o intentar localizar el registro donde se almacena temporalmente el código correcto con el que compará lo que nosotros hayamos introducido como argumento.

En esta tercera parte de la serie haremos un bypass, de forma que da igual el valor que introduzcamos, siempre pasaremos con éxito la autenticación. El programa lo he llamado codigoSecreto y su sintaxis es la siguiente:

./codigoSecreto 123456

GDB orientado a Pentesting

Podemos observar que con los distintos código, al ser incorrectos, obtenemos el mensaje correspondiente de error.

Veamos esto mismo pero ya con nuestro GDB depurando el programa.

GDB orientado a Pentesting

Read more

GDB orientado a Pentesting – Parte 2

Continuamos con la segunda parte de esta serie de artículos sobre cómo usar GDB orientado a Pentesting. Tal y como vimos en el GDB orientado a Pentesting – Parte 1 de esta serie,

GDB es un depurador que podemos utilizar para distintas tareas de las cuales las que nos interesan desde el punto de vista del pentesting son aquellas orientadas al análisis de un programa en tiempo de ejecución, de forma que podamos controlar el flujo del programa, así como consultar o modificar valores de variables y registros durante la ejecución del mismo.

En artículo anterior, que nos sirvió de introducción, vimos cómo podemos analizar un programa que ha sido compilado con gcc incluyendo sus símbolos de depuración. En esta ocasión vamos a ver cómo podríamos depurar un programa que no incluye los símbolos de depuración, un escenario mucho más real, ya que cuando tengamos que analizar un programa o una App móvil, no incluirá estos símbolos, lo que dificultará de alguna forma su análisis.

En esta ocasión, siguiendo con ejemplos básico de programas en C, vamos a utilizar uno muy sencillo que realiza la suma de dos números, que el usuario introduce durante le ejecución del programa. Este programa, llamado sumaNumeros, básicamente funciona así:

GDB orientado a Pentesting - Parte 2

¿Fácil, verdad? Introducimos dos sumandos, y el programa nos muestra el resultado de sumarlos. Pero claro, aquí no estamos para jugar a las matemáticas, nuestra intención podría ser, por ejemplo, modificar los valores de los sumandos o el resultado final de la suma. Pasemos a depurar nuestro programa con GDB.

gdb ./sumaNumeros

En primer lugar, prestamos atención al mensaje de GDB cuando se ejecuta, y es que al no haber compilado este programa con la opción –ggdb del compilador gcc, los símbolos de depuración no están disponibles.

GDB orientado a Pentesting - Parte 2

Read more