Tag Archive for gdb

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

GDB orientado a Pentesting – Parte 1

Introducción a GDB orientado a Pentesting

GDB o GNU Debugger es el depurador escrito por Richard Stallman en 1986 y utilizado en plataformas Unix. Es software libre y está distribuido bajo la licencia GPL.

Aunque se utiliza para depurar programas y trazar posibles errores en tiempo de ejecución, su potencial y características hacen que sea una herramienta muy utilizada para pentesters y expertos en ingeniería inversa.

Es por este motivo por el que desde hacking-etico.com nos hemos decidido a crear una pequeña serie de artículos dedicados a cómo usar esta poderosa herramienta en nuestros trabajos de pentesting que hemos titulado “GDB orientado al Pentesting“.

Con GDB podremos controlar el flujo de un programa, ingeniería inversa o hacer un análisis en tiempo real, también aplicable por ejemplo a entornos iOS del que también tenemos una serie de artículos, y complementaremos precisamente con análisis en tiempo real de una App de iOS.

Pero para poder llegar a ese punto, tenemos que empezar por lo básico, así que en este primer artículo de la serie, empezaremos a ver conceptos básicos de GDB.

Ejemplos prácticos – Binario con símbolos de depuración

Para nuestros ejemplos prácticos nos basaremos en sencillos programas en C y compilados con su gcc. En este punto hay que hacer mención a los símbolos de depuración. Este tipo de compilación, incluyendo estos símbolos, se utiliza cuando un programador quiere depurar su programa, tiene el código fuente y lo compila con estos símbolos, para que el proceso de depuración sea mucho más sencillo.

Supongamos que tenemos nuestro primer programa que queremos depurar, el típico helloWorld.c

#include<stdio.h>

main()

{

printf(“Hello World!\n\n”);

return 0;

}

Read more