John the Ripper y Estrategias de Adivinación de Contraseñas

Kali LinuxBeginner
Practicar Ahora

Introducción

En este laboratorio, te sumergirás en el mundo de la seguridad de contraseñas aprendiendo a usar John the Ripper, una popular herramienta de cracking de contraseñas de código abierto. Comprender cómo se pueden adivinar o descifrar las contraseñas es crucial para desarrollar prácticas de seguridad más sólidas. Explorarás diferentes estrategias de adivinación de contraseñas, desde ataques básicos de fuerza bruta hasta ataques combinatorios e híbridos más avanzados. Al final de este laboratorio, tendrás una comprensión práctica de estas técnicas y cómo aplicarlas utilizando John the Ripper.

Comprender las técnicas comunes de adivinación de contraseñas

En este paso, aprenderás sobre los conceptos fundamentales detrás de las técnicas de adivinación de contraseñas, centrándote específicamente en los ataques de diccionario y la fuerza bruta simple. John the Ripper puede utilizar estos métodos para intentar descifrar contraseñas.

Primero, usaremos John the Ripper para descifrar un hash MD5 simple utilizando un ataque de diccionario. Ya hemos preparado un archivo passwords.txt que contiene una contraseña hasheada y un archivo wordlist.txt con contraseñas comunes.

Abre tu terminal y navega al directorio ~/project.

cd ~/project

Ahora, ejecuta John the Ripper con el archivo wordlist.txt:

john --format=raw-md5 --wordlist=wordlist.txt passwords.txt

Deberías ver una salida que indica que John está intentando descifrar la contraseña. Si tiene éxito, mostrará la contraseña descifrada.

Using default input encoding: UTF-8
Loaded 1 password hash (Raw-MD5 [MD5])
Cost 1 (MD5 [MD5]) is not supported.
Will run John the Ripper in single-threaded mode.
Press 'q' or Ctrl-C to abort, almost any other key for status.
password         (user1)
1g 0:00:00:00 DONE (2023-10-27 08:00) 100.0g/s 100.0p/s 100.0c/s 100.0C/s password

Para ver las contraseñas descifradas, puedes usar la opción --show:

john --show passwords.txt
user1:password

1 password hash cracked, 0 left

Esto demuestra un ataque de diccionario básico. John the Ripper encontró con éxito "password" en la lista de palabras proporcionada.

Implementar fuerza bruta con patrones específicos

En este paso, explorarás los ataques de fuerza bruta utilizando el modo incremental de John the Ripper. El modo incremental permite a John generar contraseñas basándose en conjuntos de caracteres (por ejemplo, minúsculas, mayúsculas, dígitos, símbolos) y longitud, realizando efectivamente un ataque de fuerza bruta.

Primero, crearemos un nuevo hash de contraseña que no esté en nuestra lista de palabras simple. Usaremos testuser:testpass (el hash MD5 de testpass es 5d41402abc4b2a76b9719d911017c592).

echo "testuser:5d41402abc4b2a76b9719d911017c592" > /home/labex/project/brute_passwords.txt

Ahora, usaremos John the Ripper en modo incremental. Para simplificar y acelerar, limitaremos el conjunto de caracteres y la longitud de la contraseña. Usaremos el modo digits para descifrar una contraseña que consista únicamente en dígitos.

Supongamos que tenemos una contraseña de 4 dígitos, por ejemplo, 1234. El hash MD5 para 1234 es 81dc9bdb52d04dc20036dbd8313ed055.

echo "digituser:81dc9bdb52d04dc20036dbd8313ed055" > /home/labex/project/digit_passwords.txt

Ahora, ejecuta John the Ripper en modo incremental, apuntando específicamente a los dígitos:

john --format=raw-md5 --incremental=digits digit_passwords.txt

Este comando intentará todas las combinaciones de dígitos hasta que encuentre la contraseña. Esto puede tardar un momento dependiendo de la longitud de la contraseña.

Using default input encoding: UTF-8
Loaded 1 password hash (Raw-MD5 [MD5])
Cost 1 (MD5 [MD5]) is not supported.
Will run John the Ripper in single-threaded mode.
Press 'q' or Ctrl-C to abort, almost any other key for status.
1234             (digituser)
1g 0:00:00:00 DONE (2023-10-27 08:05) 100.0g/s 100.0p/s 100.0c/s 100.0C/s 1234

Una vez descifrado, puedes mostrar el resultado:

john --show digit_passwords.txt
digituser:1234

1 password hash cracked, 0 left

Esto demuestra cómo se puede usar la fuerza bruta cuando la estructura de la contraseña se conoce o es limitada.

Utilizar ataques combinatorios

En este paso, aprenderás sobre los ataques combinatorios, que combinan palabras de dos listas de palabras diferentes. Esto es útil cuando las contraseñas se forman concatenando dos palabras comunes.

Primero, creemos un nuevo hash de contraseña para un ataque combinatorio. Usaremos john_doe como contraseña (el hash MD5 de john_doe es 112233445566778899aabbccddeeff00).

echo "combo_user:112233445566778899aabbccddeeff00" > /home/labex/project/combo_passwords.txt

Ya hemos preparado base_wordlist.txt con "john" y "doe". Ahora, creemos una segunda lista de palabras, second_wordlist.txt:

echo "doe" > /home/labex/project/second_wordlist.txt
echo "smith" >> /home/labex/project/second_wordlist.txt

Ahora, usa John the Ripper con el modo Combinator. Este modo toma dos listas de palabras y combina cada palabra de la primera lista con cada palabra de la segunda lista.

john --format=raw-md5 --rules=Combinator --wordlist=base_wordlist.txt --stdout > /home/labex/project/combined_words.txt
john --format=raw-md5 --wordlist=combined_words.txt combo_passwords.txt

El primer comando genera combinaciones y las guarda en combined_words.txt. El segundo comando luego usa esta lista de palabras generada para descifrar la contraseña.

Using default input encoding: UTF-8
Loaded 1 password hash (Raw-MD5 [MD5])
Cost 1 (MD5 [MD5]) is not supported.
Will run John the Ripper in single-threaded mode.
Press 'q' or Ctrl-C to abort, almost any other key for status.
john_doe         (combo_user)
1g 0:00:00:00 DONE (2023-10-27 08:10) 100.0g/s 100.0p/s 100.0c/s 100.0C/s john_doe

Para verificar la contraseña descifrada:

john --show combo_passwords.txt
combo_user:john_doe

1 password hash cracked, 0 left

Esto demuestra cuán efectivos pueden ser los ataques combinatorios cuando las contraseñas son una combinación de palabras conocidas.

Explorar ataques híbridos con John the Ripper

En este paso, aprenderás sobre los ataques híbridos, que combinan palabras de diccionario con elementos de fuerza bruta (como números o caracteres especiales). Esta es una estrategia muy común y efectiva para descifrar contraseñas que son variaciones de palabras comunes.

Creemos un nuevo hash de contraseña para un ataque híbrido. Usaremos password123 como contraseña (el hash MD5 de password123 es 28a112233445566778899aabbccddeeff).

echo "hybrid_user:28a112233445566778899aabbccddeeff" > /home/labex/project/hybrid_passwords.txt

Usaremos nuestra wordlist.txt existente y aplicaremos una regla que agrega cuatro dígitos a cada palabra. Ya hemos creado un archivo de reglas simple rules.txt en la configuración.

Ahora, ejecuta John the Ripper usando wordlist.txt y el archivo de reglas personalizado:

john --format=raw-md5 --wordlist=wordlist.txt --rules=rules.txt hybrid_passwords.txt

Este comando tomará cada palabra de wordlist.txt y aplicará las reglas definidas en rules.txt (agregando cuatro dígitos).

Using default input encoding: UTF-8
Loaded 1 password hash (Raw-MD5 [MD5])
Cost 1 (MD5 [MD5]) is not supported.
Will run John the Ripper in single-threaded mode.
Press 'q' or Ctrl-C to abort, almost any other key for status.
password123      (hybrid_user)
1g 0:00:00:00 DONE (2023-10-27 08:15) 100.0g/s 100.0p/s 100.0c/s 100.0C/s password123

Para verificar la contraseña descifrada:

john --show hybrid_passwords.txt
hybrid_user:password123

1 password hash cracked, 0 left

Esto demuestra el poder de los ataques híbridos para descifrar contraseñas que combinan palabras de diccionario con patrones predecibles.

Desarrollar estrategias de adivinación personalizadas

En este paso, aprenderás a desarrollar estrategias de adivinación personalizadas creando y utilizando tus propios archivos de reglas con John the Ripper. Esto permite ataques altamente dirigidos basados en patrones de contraseñas conocidos o hábitos del usuario.

Creemos un nuevo hash de contraseña para una estrategia personalizada. Usaremos LabEx@2023 como contraseña (el hash MD5 de LabEx@2023 es e0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5).

echo "custom_user:e0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5" > /home/labex/project/custom_passwords.txt

Ahora, creemos un archivo de reglas personalizado llamado custom_rules.txt que capitaliza la primera letra, agrega @ y luego agrega cuatro dígitos.

nano /home/labex/project/custom_rules.txt

Agrega el siguiente contenido al archivo custom_rules.txt:

:
c
$@
$[0-9]$[0-9]$[0-9]$[0-9]
  • : (regla vacía) - Este es un marcador de posición, a menudo utilizado para iniciar un conjunto de reglas.
  • c - Capitaliza la primera letra de la palabra.
  • $@ - Agrega el símbolo @.
  • $[0-9]$[0-9]$[0-9]$[0-9] - Agrega cuatro dígitos.

Guarda y sal de nano (Ctrl+X, Y, Enter).

Ahora, usemos una lista de palabras base que contenga "labex":

echo "labex" > /home/labex/project/base_custom_wordlist.txt

Ejecuta John the Ripper con tu archivo de reglas personalizado:

john --format=raw-md5 --wordlist=base_custom_wordlist.txt --rules=custom_rules.txt custom_passwords.txt
Using default input encoding: UTF-8
Loaded 1 password hash (Raw-MD5 [MD5])
Cost 1 (MD5 [MD5]) is not supported.
Will run John the Ripper in single-threaded mode.
Press 'q' or Ctrl-C to abort, almost any other key for status.
LabEx@2023       (custom_user)
1g 0:00:00:00 DONE (2023-10-27 08:20) 100.0g/s 100.0p/s 100.0c/s 100.0C/s LabEx@2023

Para verificar la contraseña descifrada:

john --show custom_passwords.txt
custom_user:LabEx@2023

1 password hash cracked, 0 left

Esto demuestra la flexibilidad del motor de reglas de John the Ripper, lo que te permite crear estrategias de adivinación de contraseñas altamente específicas y efectivas.

Resumen

En este laboratorio, adquiriste experiencia práctica con John the Ripper, una potente herramienta para descifrar contraseñas. Aprendiste e implementaste varias estrategias de adivinación de contraseñas, que incluyen:

  • Ataques de diccionario: Uso de listas precompiladas de contraseñas comunes.
  • Ataques de fuerza bruta: Prueba sistemática de todas las combinaciones de caracteres posibles dentro de un conjunto definido.
  • Ataques combinatorios: Combinación de palabras de múltiples listas de palabras para formar nuevos candidatos a contraseñas.
  • Ataques híbridos: Mezcla de palabras de diccionario con elementos de fuerza bruta utilizando reglas.
  • Estrategias de adivinación personalizadas: Desarrollo de tus propias reglas para dirigirse a patrones de contraseñas específicos.

Comprender estas técnicas es crucial tanto para la seguridad ofensiva (pruebas de penetración) como para la seguridad defensiva (creación de políticas de contraseñas sólidas y educación de los usuarios). Al ver con qué facilidad se pueden descifrar los patrones de contraseñas comunes, puedes apreciar mejor la importancia de contraseñas complejas y únicas, así como la autenticación multifactor.