mdbtools en Kali Linux
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:
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:
Ver las tablas de un archivo:
mdb-tables mi_archivo.mdbVer 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).
Exportar los datos a CSV:
mdb-export mi_archivo.mdb nombre_de_la_tabla > datos.csvHacer una consulta rápida:
mdb-sql mi_archivo.mdbLuego, dentro del prompt, puedes escribir:
select * from MiTablaseguido del comandogo.
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:
#!/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:
Guarda el código: Usa un editor como
nanoomousepad.Bashnano exportar_access.shDale permisos de ejecución:
Bashchmod +x exportar_access.shEjecú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 cicloforlas 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 demdb-exporty 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:
#!/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 (comoVARCHAR,INT, etc.).mdb-export -I mysql: La opción-I(i mayúscula) le dice amdbtoolsque no queremos un CSV, sino que queremos sentenciasINSERT 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í:
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:
#!/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. Comomdb-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 comandomdb-exportpermite 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:
./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:
#!/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?
iconv -f utf-8 -t ascii//TRANSLIT: Convierte caracteres comoñennoáena.tr ' ' '_': Sustituye todos los espacios por guiones bajos (_).**
sed "s/\$ORIGINAL_TABLE`/`$CLEAN_TABLE`/g"**: Esta es la clave. Busca el nombre original dentro del código SQL que generamdbtools` 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_2024Archivo:
configuracion_de_red_2024.sqlSQL 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:
Bashsudo apt update sudo apt install gmdb2Cómo usarla: Una vez instalada, búscala en tu menú de aplicaciones como MDB Viewer. Al abrirla, simplemente seleccionas tu archivo
.mdbo.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
.debo instalarlo víaapt:Bashsudo apt install dbeaver-ceVentaja: 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).
Abre LibreOffice Base.
Selecciona "Conectar con una base de datos existente".
Elige "Microsoft Access" en el desplegable.
Busca tu archivo y ¡listo! Tienes una interfaz casi idéntica a la de Windows.
Resumen de comparación
| Herramienta | Peso | Facilidad | Recomendado para... |
| MDB Viewer (gmdb2) | Muy ligero | Alta | Vistazo rápido y simple. |
| DBeaver | Pesado | Media | Análisis profundo y exportaciones complejas. |
| LibreOffice Base | Medio | Alta | Usuarios que extrañan el look de MS Access. |