GNU Debugger con Plugins

GDB es una de las herramientas que más uso al momento de reversear binarios para CTF’s o realizar tareas de exploiting.

Para ser honesto hay una realidad a mi modo de ver y es que usarla a “secas”, es decir, de base.. sin ningún tipo de complemento acompleja un poco el asunto y resulta algo ‘aburrido’ visualmente hablando, y eso puede ocasionar en algunas personas que no sea la mejor experiencia de usuario.

Es por eso que si bien existen varios posteos al respecto, voy a comentar y setear tres de los complementos más habituales para mi y que facilitan un montón el reversing y explotación de binarios.


Descargando e instalando complementos para gdb:

En todo momento de descarga, estaré trabajando sobre el /home/user/


PEDA | Python Exploit Development Assistance for GDB.

PEDA es una tool escrita en Python, que boostea y potencia ampliamente el uso de GDB. Entre una gran cantidad de comandos y funciones destaca por la capacidad de poder identificar patrones de datos en la memoria, útil para la detección de desbordamientos de búfer, facilita la visualización y análisis de registros del CPU y de la memoria del programa en ejecución. Permite desensamblar el código, rastrear instrucciones y establecer breakpoints de manera más sencilla. Ofrece una gran ayuda para el desarrollo de exploits.

1
git clone https://github.com/longld/peda.git ~/.peda

Pwndbg | Debugging with a Python module.

Del mismo modo y con algunas variantes interesantes, Pwndbg está diseñado para testeos y desarrollo de exploits. Incluye funciones para la búsqueda de gadgets ROP. Proporciona comandos específicos para analizar y explotar vulnerabilidades del tipo heap, como desbordamientos de chunks. Permite a los usuarios integrar sus propios scripts y automatizaciones personalizadas en la depuración. Permite la depuración remota de binarios en máquinas y sistemas remotos, lo que es útil en entornos donde se necesita depurar aplicaciones distribuidas.Y mucho mas..

1
2
3
4
5
6
git clone https://github.com/pwndbg/pwndbg
cd pwndbg
./setup.sh
cd ..
mv pwndbg ~/.pwndbg-src
echo "source ~/.pwndbg-src/gdbinit.py" > ~/.gdbinit_pwndbg

GEF | GDB Enhanced Features

GEF es una extensión para GDB que añade comandos y características visuales para mejorar la experiencia de depuración. A diferencia de otras herramientas similares, GEF ofrece soporte para una amplia gama de arquitecturas, lo que lo hace útil tanto para el análisis de firmware en sistemas embebidos con procesadores MIPS o ARM como para la depuración estándar.

1
wget -O ~/.gdbinit-gef.py -q https://gef.blah.cat/py

Editando el archivo de configuración .gdbinit:

El archivo .gdbinit es el archivo de configuración de GDB que permite personalizar y automatizar distintas opciones. Se puede incluir comandos y complementos para que se carguen automáticamente cada vez que iniciamos el debugger.

Considerando que ya descargamos los tres complementos mencionados vamos a configurar el .gdbinit del siguiente modo para que queden seteados (verifiquen bien si cambiaron paths o carpetas para evitar errores):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
define init-peda
source ~/.peda/peda.py
end
document init-peda
Initializes the PEDA (Python Exploit Development Assistant for GDB) framework
end

define init-pwndbg
source ~/.gdbinit_pwndbg
end
document init-pwndbg
Initializes PwnDBG
end

define init-gef
source ~/.gdbinit-gef.py
end
document init-gef
Initializes GEF (GDB Enhanced Features)
end

Ya casi!. Creamos un script para ejecutarlo con el complemento deseado.

Bueno por ultimo, procedo a crear un script en el path /home/user/.local/bin/ en mi caso, este script me permite tomar alguno de los 3 argumentos.. [gef|peda|pwndbg]. Al archivo le puse “mygdb”, ustedes pongan el que gusten.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/bash
# powered by <shkz>

# Check args
if [ $# -lt 2 ]; then
echo "Usage: $0 [gef|peda|pwndbg] /path/of/binary"
exit 1
fi

# Checking only valid arg
if [ "$1" != "gef" ] && [ "$1" != "peda" ] && [ "$1" != "pwndbg" ]; then
echo "Invalid option. Type: 'gef', 'peda' or 'pwndbg'."
exit 1
fi

# Check file
if [ ! -f "$2" ]; then
echo "Binary file does not exist: $2"
exit 1
fi

# gdb + plugin from .gdbinit
gdb -q -ex "init-$1" --args "$2"

Parte de este contenido lo adapte del original https://infosecwriteups.com/pwndbg-gef-peda-one-for-all-and-all-for-one-714d71bf36b8, pero con algunos cambios:

  • En el original el autor crea 3 scripts en /usr/bin/ lo cual se vuelve repetitivo inecesariamente.
  • Además ese path requiere permisos de root, por ende cree un único archivo localizado en /home/user/.local/bin con permisos de usuario.
  • Codie solo 1 archivo en Bash-Script que toma uno de los 3 argumentos (complementos) instalados. Seguramente se pueda mejorar, o simplificar, pero funciona ;D