mdbtools en Kali Linux

 https://www.onlinetis.com/es/

mdbtools en Kali Linux

Si estás trabajando con bases de datos de Microsoft Access (.mdb o .accdb) en un entorno Linux, mdbtools es el conjunto de utilidades por excelencia para leer y exportar esos datos sin necesidad de Windows.

¿Para qué sirve mdbtools?

Es una colección de herramientas de línea de comandos que permiten interactuar con archivos de Access. Algunas de las funciones más comunes son:

  • mdb-tables: Lista todas las tablas de la base de datos.

  • mdb-schema: Genera el esquema (DDL) para crear las tablas en otros sistemas como MySQL o PostgreSQL.

  • mdb-export: Exporta el contenido de una tabla específica a formato CSV o sentencias SQL INSERT.

  • mdb-sql: Una pequeña interfaz interactiva para hacer consultas SQL básicas directamente al archivo.


Instalación en Kali Linux

Kali suele tenerlo en sus repositorios oficiales. Para instalarlo, abre tu terminal y ejecuta:

Bash
sudo apt update
sudo apt install mdbtools

Comandos principales (Ejemplos rápidos)

Aquí tienes una guía de uso para los casos más frecuentes:

  1. Ver las tablas de un archivo:

    mdb-tables mi_archivo.mdb

  2. Ver la estructura de una tabla (Columnas y tipos):

    mdb-schema mi_archivo.mdb mysql

    (Esto generará el código necesario para recrear la base en MySQL).

  3. Exportar los datos a CSV:

    mdb-export mi_archivo.mdb nombre_de_la_tabla > datos.csv

  4. Hacer una consulta rápida:

    mdb-sql mi_archivo.mdb

    Luego, dentro del prompt, puedes escribir: select * from MiTabla seguido del comando go.


Un detalle importante (¡Ojo aquí!)

A veces, en auditorías de seguridad o informática forense, te encontrarás con que los archivos .accdb (formatos más modernos de Office 2007 en adelante) pueden dar problemas si la versión de mdbtools es muy antigua. Asegúrate siempre de tener la última versión para máxima compatibilidad.

Nota: Si necesitas algo más visual, Kali también permite usar DBeaver o LibreOffice Base, que pueden importar estos archivos usando los drivers de mdbtools por debajo.

 

Un script es la mejor forma de ahorrar tiempo, especialmente si el archivo .mdb tiene decenas de tablas.

Aquí tienes un script sencillo y efectivo. Este código lee todas las tablas del archivo y crea un archivo .csv independiente para cada una en una carpeta de salida.

Script: Exportar todo a CSV

Puedes copiar esto en un archivo llamado exportar_access.sh:

Bash
#!/bin/bash

# Comprobar si se pasó un archivo como argumento
if [ -z "$1" ]; then
    echo "Uso: $0 archivo.mdb"
    exit 1
fi

FILE=$1
# Crear una carpeta para no mezclar archivos
OUTPUT_DIR="export_$(basename "$FILE" .mdb)"
mkdir -p "$OUTPUT_DIR"

echo "Iniciando exportación de: $FILE"

# Obtener la lista de tablas y loopear sobre ellas
for table in $(mdb-tables -1 "$FILE"); do
    echo "Exportando tabla: $table..."
    mdb-export "$FILE" "$table" > "$OUTPUT_DIR/$table.csv"
done

echo "---"
echo "¡Listo! Todas las tablas están en la carpeta: $OUTPUT_DIR"

Cómo usarlo:

  1. Guarda el código: Usa un editor como nano o mousepad.

    Bash
    nano exportar_access.sh
    
  2. Dale permisos de ejecución:

    Bash
    chmod +x exportar_access.sh
    
  3. Ejecútalo pasando tu base de datos:

    Bash
    ./exportar_access.sh tu_archivo.mdb
    

¿Qué hace exactamente este script?

  • mdb-tables -1: El parámetro -1 (el número uno) lista las tablas una por línea, lo que facilita que el ciclo for las procese sin errores.

  • mkdir -p: Crea una carpeta con el nombre del archivo para que tus CSV estén organizados y no se mezclen con otros archivos en tu directorio actual.

  • Redirección >: Toma la salida de texto de mdb-export y la guarda directamente en un archivo físico.


Generar un archivo SQL es un poco más técnico porque primero necesitamos crear la estructura de las tablas (el "esqueleto") y luego insertar los datos (el "contenido").

Aquí tienes el script actualizado para generar un único archivo .sql compatible con MySQL/MariaDB o PostgreSQL.

Script: Convertir MDB a SQL completo

Guarda este código como mdb_a_sql.sh:

Bash
#!/bin/bash

# Comprobar si se pasó el archivo
if [ -z "$1" ]; then
    echo "Uso: $0 archivo.mdb"
    exit 1
fi

FILE=$1
OUTPUT_SQL="$(basename "$FILE" .mdb).sql"

echo "-- Generando SQL para: $FILE" > "$OUTPUT_SQL"

# 1. Generar el Esquema (CREATE TABLE)
echo "[1/2] Extrayendo estructura de tablas..."
mdb-schema "$FILE" mysql >> "$OUTPUT_SQL"

echo "" >> "$OUTPUT_SQL"

# 2. Generar los Datos (INSERT INTO)
echo "[2/2] Extrayendo datos de las tablas..."
for table in $(mdb-tables -1 "$FILE"); do
    echo "  -> Procesando datos de: $table"
    mdb-export -I mysql "$FILE" "$table" >> "$OUTPUT_SQL"
done

echo "---"
echo "¡Finalizado! Archivo generado: $OUTPUT_SQL"

Detalles técnicos del comando:

  • mdb-schema "$FILE" mysql: Este comando analiza el archivo Access y "traduce" los tipos de datos de Microsoft a tipos de datos que MySQL entiende (como VARCHAR, INT, etc.).

  • mdb-export -I mysql: La opción -I (i mayúscula) le dice a mdbtools que no queremos un CSV, sino que queremos sentencias INSERT INTO nombre_tabla (...) VALUES (...).

  • >>: Usamos el doble signo de mayor que para anexar contenido al archivo sin borrar lo que ya escribimos antes (el esquema).


Cómo importar el resultado en Kali

Una vez que tengas tu archivo .sql, si tienes un servidor MariaDB/MySQL corriendo en tu Kali, puedes importar todo de un golpe así:

Bash
mysql -u tu_usuario -p nombre_de_tu_base < mi_archivo.sql

Un pequeño consejo de "pro":

A veces los nombres de las tablas en Access tienen espacios (ej. Tabla de Clientes). Esto suele dar errores en SQL. Si tu base de datos tiene espacios, me dices y te ayudo a añadir una línea al script para que los limpie automáticamente.


Filtrar por una tabla específica es muy útil cuando tienes bases de datos gigantescas y solo necesitas auditar o extraer una parte concreta (como una tabla de Usuarios o Configuración).

Aquí tienes una versión del script que acepta dos argumentos: el nombre del archivo y el nombre de la tabla que quieres extraer.

Script: Extraer Tabla Específica a SQL

Guarda este código como extraer_tabla.sh:

Bash
#!/bin/bash

# Comprobar que se pasaron los dos argumentos necesarios
if [ -z "$1" ] || [ -z "$2" ]; then
    echo "Uso: $0 archivo.mdb nombre_de_tabla"
    echo "Ejemplo: $0 datos.mdb Usuarios"
    exit 1
fi

FILE=$1
TABLE=$2
OUTPUT_FILE="${TABLE}_export.sql"

echo "-- Extrayendo solo la tabla: $TABLE de $FILE" > "$OUTPUT_FILE"

# 1. Extraer solo el esquema de esa tabla específica
# Usamos grep para filtrar el CREATE TABLE de esa tabla
echo "[1/2] Generando estructura para '$TABLE'..."
mdb-schema "$FILE" mysql | sed -n "/CREATE TABLE \`$TABLE\`/,/);/p" >> "$OUTPUT_FILE"

echo "" >> "$OUTPUT_FILE"

# 2. Extraer los datos (INSERTs) de esa tabla
echo "[2/2] Generando datos para '$TABLE'..."
mdb-export -I mysql "$FILE" "$TABLE" >> "$OUTPUT_FILE"

echo "---"
echo "¡Hecho! Tabla '$TABLE' guardada en: $OUTPUT_FILE"

¿Cómo funciona la "magia" del filtrado?

  • **sed -n "/CREATE TABLE \$TABLE`/,/);/p"**: Este comando es un poco avanzado. Como mdb-schemanormalmente escupe el esquema de *todo* el archivo, usamossedpara decirle: *"Busca donde empieza el CREATE TABLE de mi tabla y deja de copiar cuando encuentres el cierre de paréntesis);`"*.

  • mdb-export -I mysql "$FILE" "$TABLE": Aquí es más sencillo, ya que el comando mdb-export permite pasarle el nombre de la tabla directamente como argumento para que ignore el resto.


Un consejo para nombres con espacios

Si tu tabla se llama, por ejemplo, Lista de Clientes, debes ejecutar el script poniendo el nombre entre comillas:

Bash
./extraer_tabla.sh mi_base.mdb "Lista de Clientes" 
 

En el mundo de las bases de datos, los espacios y los acentos son el enemigo número uno. Si intentas importar una tabla llamada Registro de Clientes en MySQL, lo más probable es que te dé un error de sintaxis.

Aquí tienes la versión "pro" del script. Este no solo extrae la tabla, sino que limpia el nombre (quita espacios, acentos y convierte a minúsculas) para que el archivo SQL resultante sea perfecto.

Script: Extracción Limpia y Compatible

Guarda este código como extraer_limpio.sh:

Bash
#!/bin/bash

# Comprobar argumentos
if [ -z "$1" ] || [ -z "$2" ]; then
    echo "Uso: $0 archivo.mdb 'Nombre de Tabla'"
    exit 1
fi

FILE=$1
ORIGINAL_TABLE=$2

# --- MAGIA DE LIMPIEZA ---
# 1. Quita acentos, 2. Cambia espacios por guiones bajos, 3. Todo a minúsculas
CLEAN_TABLE=$(echo "$ORIGINAL_TABLE" | iconv -f utf-8 -t ascii//TRANSLIT | tr ' ' '_' | tr '[:upper:]' '[:lower:]' | tr -cd '[:alnum:]_')

OUTPUT_FILE="${CLEAN_TABLE}.sql"

echo "-- Extrayendo: $ORIGINAL_TABLE -> $CLEAN_TABLE" > "$OUTPUT_FILE"

# 1. Extraer esquema y renombrar la tabla en el vuelo usando 'sed'
echo "[1/2] Limpiando estructura..."
mdb-schema "$FILE" mysql | \
sed -n "/CREATE TABLE \`$ORIGINAL_TABLE\`/,/);/p" | \
sed "s/\`$ORIGINAL_TABLE\`/\`$CLEAN_TABLE\`/g" >> "$OUTPUT_FILE"

echo "" >> "$OUTPUT_FILE"

# 2. Extraer datos y renombrar la tabla en los INSERTs
echo "[2/2] Limpiando datos..."
mdb-export -I mysql "$FILE" "$ORIGINAL_TABLE" | \
sed "s/INSERT INTO \`$ORIGINAL_TABLE\`/INSERT INTO \`$CLEAN_TABLE\`/g" >> "$OUTPUT_FILE"

echo "---"
echo "¡Éxito! Tabla extraída como: $CLEAN_TABLE"
echo "Archivo: $OUTPUT_FILE"

¿Qué hace este script de especial?

  1. iconv -f utf-8 -t ascii//TRANSLIT: Convierte caracteres como ñ en n o á en a.

  2. tr ' ' '_': Sustituye todos los espacios por guiones bajos (_).

  3. **sed "s/\$ORIGINAL_TABLE`/`$CLEAN_TABLE`/g"**: Esta es la clave. Busca el nombre original dentro del código SQL que genera mdbtools` y lo reemplaza por el nombre limpio antes de guardarlo en el archivo.

Ejemplo de uso:

Si tu tabla se llama Configuración de Red 2024, el script hará lo siguiente:

  • Nombre limpio: configuracion_de_red_2024

  • Archivo: configuracion_de_red_2024.sql

  • SQL interno: CREATE TABLE configuracion_de_red_2024 (...);


Un último detalle forense

Si estás usando esto para hacking ético o forense, a veces los archivos Access tienen tablas "ocultas" del sistema (empiezan por MSys). mdbtools suele ignorarlas, pero si quieres verlas todas, puedes usar mdb-tables -S.

 

Aunque la terminal es muy potente, a veces necesitas ver los datos con tus propios ojos, desplazarte por las filas o filtrar visualmente sin escribir comandos.

En Kali Linux, la mejor opción para esto es MDB Viewer, que es parte del ecosistema de mdbtools pero con una interfaz gráfica (GUI). Sin embargo, hay una alternativa más moderna y profesional que te recomiendo: DBeaver.

Aquí tienes las dos mejores opciones:

1. MDB Viewer (La opción ligera)

Es la herramienta oficial de la suite mdbtools. Es muy básica: abres el archivo, seleccionas la tabla y ves los datos.

  • Instalación:

    Bash
    sudo apt update
    sudo apt install gmdb2
    
  • Cómo usarla: Una vez instalada, búscala en tu menú de aplicaciones como MDB Viewer. Al abrirla, simplemente seleccionas tu archivo .mdb o .accdb. Podrás ver la estructura de las tablas y el contenido de las filas de forma inmediata.


2. DBeaver (La opción profesional)

DBeaver es un gestor de bases de datos universal. Es visualmente mucho más potente y te permite no solo ver, sino también exportar a mil formatos, hacer gráficos y ejecutar SQL complejo.

  • Instalación:

    Kali no siempre lo trae preinstalado, pero puedes bajar el paquete .deb o instalarlo vía apt:

    Bash
    sudo apt install dbeaver-ce
    
  • Ventaja: DBeaver descarga automáticamente los controladores (drivers) necesarios para leer archivos de Microsoft Access. Es ideal si estás haciendo un trabajo serio de análisis de datos.


3. LibreOffice Base (La opción "Office")

Si ya tienes instalado LibreOffice en tu Kali, puedes usar Base (el equivalente a Microsoft Access).

  1. Abre LibreOffice Base.

  2. Selecciona "Conectar con una base de datos existente".

  3. Elige "Microsoft Access" en el desplegable.

  4. Busca tu archivo y ¡listo! Tienes una interfaz casi idéntica a la de Windows.

Resumen de comparación

HerramientaPesoFacilidadRecomendado para...
MDB Viewer (gmdb2)Muy ligeroAltaVistazo rápido y simple.
DBeaverPesadoMediaAnálisis profundo y exportaciones complejas.
LibreOffice BaseMedioAltaUsuarios que extrañan el look de MS Access.

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