← Regresar a lecciones

SQL Injection y Cracking de Contraseñas - Guía Técnica y Ética

SQLMap
  • ¿Cuándo usarlo?

A veces, lo que derrumba muros no es la fuerza. Es la precisión. Un carácter, una comilla mal cerrada, una línea de código que nadie revisó. En la ciberseguridad, los errores más pequeños abren las puertas más grandes. Y una de las puertas más explotadas de la historia lleva un nombre: SQL Injection.

Primero lo básico:

SQL es un lenguaje diseñado para comunicarse con bases de datos. Cada vez que una aplicación guarda un nombre de usuario, una contraseña, un correo o una transacción, probablemente lo hace usando SQL. Y cuando el usuario inicia sesión o busca información, la aplicación construye dinámicamente consultas SQL para acceder a esos datos. El problema es cuando esa consulta no está bien controlada.

Imagina un formulario de login que inserta directamente lo que el usuario escribe en una consulta SQL, sin validarlo ni filtrarlo. Eso se convierte en una puerta abierta. Porque puedes escribir no solo tu nombre… sino también instrucciones maliciosas para alterar la lógica del sistema. Esa técnica se llama inyección SQL y permite, entre otras cosas:

  • Saltarse autenticaciones
  • Leer datos de usuarios
  • Modificar, borrar o insertar registros en la base de datos
  • Tomar control total del backend

Ejemplo clásico de inyección:

1SELECT * FROM users WHERE username = '$user' AND password = '$pass';

Si escribes lo siguiente como nombre de usuario:

1' OR '1'='1

Y dejas la contraseña vacía, la consulta se transforma en:

1SELECT * FROM users WHERE username = '' OR '1'='1' AND password = '';

Y como '1'='1' siempre es verdadero… se accede igual, sin credenciales, sin permisos. Aquí entra SQLMap.

SQLMap

Es una herramienta automática que detecta y explota inyecciones SQL en aplicaciones web. No necesitas escribir payloads manuales ni ir probando combinaciones a ciegas. SQLMap hace ese trabajo por ti.

Lo que puede hacer SQLMap:

  • Detectar si una URL o parámetro es vulnerable
  • Enumerar las bases de datos
  • Listar las tablas dentro de cada base
  • Mostrar el contenido de tablas específicas (incluyendo contraseñas)
  • Obtener información del sistema
  • Leer y escribir archivos
  • Obtener shells (dependiendo del contexto)

¿Cuándo usarlo?

Cuando identifiques que una aplicación web construye dinámicamente las consultas y no valida los datos del usuario. Puedes probar con caracteres como ' o con payloads comunes. Si ves errores SQL, comportamientos extraños o bypasses, probablemente SQLMap podrá ayudarte a explotar esa brecha.

Comandos técnicos de SQLMap

  1. Detectar si una URL es vulnerable:
1sqlmap -u "http://target.com/page.php?id=1" --batch
  1. Enumerar las bases de datos:
1sqlmap -u "http://target.com/page.php?id=1" --dbs --batch
  1. Elegir una base de datos y listar sus tablas:
1sqlmap -u "http://target.com/page.php?id=1" -D nombre_basededatos --tables --batch
  1. Ver las columnas de una tabla específica:
1sqlmap -u "http://target.com/page.php?id=1" -D nombre_basededatos -T usuarios --columns --batch
  1. Extraer los datos (ej: usuarios y contraseñas en MD5):
1sqlmap -u "http://target.com/page.php?id=1" -D nombre_basededatos -T usuarios -C username,password --dump --batch

Recuerda: muchas contraseñas se guardan cifradas (por ejemplo en MD5, un algoritmo de hashing). Si SQLMap te devuelve hashes, no son contraseñas en texto plano, pero puedes crackearlos con herramientas como Hashcat o John the Ripper.

Una advertencia necesaria:

SQLMap es una herramienta potente. Brutal incluso. Pero no es para usarla sin cuidado ni conciencia. No se trata de presionar botones Se trata de entender lo que estás haciendo, lo que representa y las consecuencias que puede tener.

Usala en tus máquinas de laboratorio ya que es parte de tu entrenamiento. Porque todo conocimiento, como toda arma, debe estar sostenido por ética.

Crackeando hashes de contraseñas

Romper una contraseña no es solo un acto técnico. Es entender cómo pensamos los humanos. Porque detrás de cada hash, de cada capa de seguridad, hay alguien que eligió una palabra que creyó secreta. Y el cracking es el arte de demostrar que nada lo es del todo.

¿Qué es el password cracking?

Password cracking es el proceso de recuperar una contraseña en texto plano a partir de su versión cifrada (hash). Es una de las habilidades fundamentales en el hacking ético porque permite comprobar cuán fuertes (o débiles) son las contraseñas que las personas usan.

Las contraseñas no se almacenan tal cual. Eso sería un suicidio de seguridad. Se almacenan como hashes, que son representaciones cifradas mediante funciones como MD5, SHA1, bcrypt, entre otros.

Pero aquí está el detalle:

Estos hashes no son encriptaciones reversibles. No se pueden “desencriptar”. Lo que hacemos es comparar, probar miles (o millones) de posibles contraseñas, aplicándoles la misma función hash, hasta encontrar una que produzca el mismo resultado.

¿Por qué es posible crackear contraseñas?

Porque las contraseñas humanas son, en general, predecibles. Porque usamos fechas, nombres, palabras comunes, patrones de teclado y porque los hashes, aunque matemáticamente sólidos, no protegen contra malas elecciones de contraseña.

Con suficiente potencia, buenos diccionarios y las herramientas correctas, el cracking se convierte en una posibilidad muy real.

¿Cómo se logra?

Existen dos formas principales:

  • Ataques de diccionario: Se usa un archivo con miles o millones de contraseñas posibles (como rockyou.txt) y se prueba cada una contra el hash.
  • Ataques de fuerza bruta: Se generan y prueban todas las combinaciones posibles, carácter por carácter. Es más lento pero exhaustivo.

Y para hacerlo tenemos dos grandes aliados: John the Ripper y Hashcat.

John the Ripper

Es una herramienta clásica, simple pero poderosa. Ideal para empezar.

Ejemplo de uso con diccionario:

1john --wordlist=/usr/share/wordlists/rockyou.txt hash.txt

Ver los resultados (cuando encuentra contraseñas):

1john --show hash.txt

John detecta automáticamente el tipo de hash en la mayoría de los casos. Pero si no lo hace, puedes indicarlo con --format=md5 o el que corresponda.

Hashcat

Hashcat es más rápido, versátil y optimizado para GPU. Ideal para ataques masivos.Primero, debes saber qué tipo de hash estás atacando. Puedes usar hashid o hash-identifierpara detectarlo.

Ejemplo de uso básico con diccionario:

1hashcat -m 0 -a 0 hash.txt /usr/share/wordlists/rockyou.txt
  • m 0: MD5 (cada tipo de hash tiene un número)
  • a 0: ataque con diccionario
  • hash.txt: archivo que contiene el hash
  • rockyou.txt: diccionario de contraseñas

Ver resultados:

1hashcat -m 0 -a 0 hash.txt /usr/share/wordlists/rockyou.txt --show

Puedes pausar y reanudar Hashcat sin perder progreso, lo que lo hace ideal para sesiones largas.

¿Dónde aparecen los hashes?

Los encuentras en bases de datos comprometidas, archivos de configuración mal protegidos, imágenes manipuladas, backups olvidados, o incluso en memoria. Y muchas veces están en formatos como:

121232f297a57a5a743894a0e4a801fc3

(que es, por cierto, el hash MD5 de “admin”).

Crackear es también comprender que cada hash representa un secreto mal guardado y que proteger bien una contraseña no empieza con un símbolo extraño, sino con una decisión responsable. Sigue practicando. Sigue rompiendo cosas, para luego construirlas mejor.