← Regresar a lecciones

Recuperando lo irrecuperable

¿Qué es una base de datos?
  • Tipos de bases de datos

Hoy no solo vas a aprender sobre bases de datos. Hoy vas a ver lo que significa perder algo que parecía estar a salvo. Vas a mirar de frente a la corrupción, al daño, a la pérdida. Y lo más importante: vas a aprender a enfrentarlo.

Una base de datos es el corazón de una aplicación. Contiene todo: usuarios, contraseñas, secretos, registros… vidas enteras. Pero cuando ese corazón falla, ¿qué nos queda? Nos queda tu mente. Tu resiliencia. Tu ingenio.

Este es tu primer contacto con una base de datos rota. Y también tu primera victoria al repararla.

¿Qué es una base de datos?

Una base de datos es un sistema organizado que permite almacenar, gestionar y recuperar información de forma eficiente. Piensa en ella como una gran biblioteca digital donde cada libro está perfectamente clasificado y etiquetado.

Tipos de bases de datos

  • Relacionales (SQL): Estructuradas en tablas, como hojas de cálculo.
  • No relacionales (NoSQL): Usan documentos, claves-valor o grafos.

En este desafío, trabajaremos con SQLite, una base de datos relacional liviana, de un solo archivo, que no necesita servidor.

¿Qué es SQLite y por qué es tan usada?

SQLite es un motor de base de datos relacional integrado directamente en aplicaciones. Es muy usado en:

  • Aplicaciones móviles
  • Navegadores web
  • Sistemas embebidos
  • Proyectos pequeños y medianos

Su mayor ventaja: todo está en un solo archivo. Eso también significa que si ese archivo se daña, podemos perderlo todo... o casi todo.

¿Y si una base de datos se corrompe?

Hay muchas razones por las cuales una base de datos puede romperse:

  • Fallos de energía
  • Errores de disco
  • Problemas de software
  • Ataques maliciosos

Pero incluso en el daño… queda esperanza. SQLite, al ser tan simple, permite leer partes del archivo aunque otras estén dañadas.

Formas de recuperar una base de datos SQLite dañada

  1. Usar la utilidad oficial de SQLite: La herramienta sqlite3 tiene un comando especial llamado .recover, que intenta reconstruir lo que pueda:
1sqlite3 archivo_danado.db ".recover" > base_recuperada.sql

Esto genera un archivo con los datos rescatados que luego puedes importar a una nueva base.

  1. Usar SQLite Browser (Interfaz gráfica): Una opción más visual. Algunos datos pueden abrirse parcialmente. Muy útil para explorar tablas manualmente.

  2. Leer el archivo como texto plano: Con herramientas como strings, puedes extraer contenido de un archivo binario sin necesidad de abrirlo con SQLite.

1strings archivo_danado.db | grep 4GEEKS

Esta técnica puede revelar fragmentos de datos que sobrevivieron, incluyendo valores sensibles.

  1. Python + sqlite3: Puedes usar un script en Python para intentar abrir la base, leer tablas, manejar errores o parsear lo que aún sirva:
1import sqlite3 2 3try: 4 conn = sqlite3.connect("archivo_danado.db") 5 cursor = conn.cursor() 6 cursor.execute("SELECT name FROM sqlite_master WHERE type='table';") 7 print(cursor.fetchall()) 8except Exception as e: 9 print("Error al leer la base de datos:", e)

Puedes continuar desarrollando este script para automatizar la recuperación.

¿Por qué esto importa en ciberseguridad?

Porque en el mundo real la información rara vez llega limpia o perfecta. A veces rescatar una base rota es la única forma de reconstruir los hechos después de un ataque. Otras veces es la única prueba que queda.

Un buen analista forense no se rinde ante un archivo dañado. Lo enfrenta, lo lee, lo entiende… y lo revive.

Comienza tu reconstrucción

Hoy comienzas a ver los datos con otros ojos. Ya no solo como algo almacenado, sino como algo vivo, algo que puede sufrir, romperse… y sanarse.

"No todo lo roto está perdido. Lo esencial siempre encuentra el camino de regreso. A veces, a través de ti."