Introducción
En este laboratorio, explorará el "modo de grieta única" (single crack mode) de John the Ripper, una potente herramienta para descifrar contraseñas. El modo de grieta única es particularmente útil cuando se tiene una lista de nombres de usuario y se desea intentar descifrar sus contraseñas utilizando información derivada de los propios nombres de usuario, como permutaciones o variaciones comunes. Aprenderá a preparar un archivo hash adecuado para este modo, a ejecutar John the Ripper, a observar su proceso de descifrado y a comprender los escenarios específicos en los que el modo de grieta única es más efectivo, así como sus limitaciones. Esta experiencia práctica le proporcionará habilidades prácticas en seguridad y auditoría de contraseñas.
Preparar un archivo hash con nombres de usuario
En este paso, preparará un archivo hash que John the Ripper puede utilizar en el modo de grieta única (single crack mode). El modo de grieta única aprovecha la información del propio nombre de usuario para generar posibles contraseñas. Para que esto funcione eficazmente, su archivo hash debe contener nombres de usuario.
Primero, asegúrese de estar en el directorio de su proyecto.
cd ~/project
A continuación, creemos un archivo de contraseñas simple llamado my_hashes.txt con algunas entradas. Utilizaremos un hash MD5 conocido para la contraseña "password" (5f4dcc3b5aa765d61d8327deb882cf99) con fines de demostración.
echo "user1:5f4dcc3b5aa765d61d8327deb882cf99" > my_hashes.txt
echo "john:5f4dcc3b5aa765d61d8327deb882cf99" >> my_hashes.txt
echo "mary:5f4dcc3b5aa765d61d8327deb882cf99" >> my_hashes.txt
echo "testuser:5f4dcc3b5aa765d61d8327deb882cf99" >> my_hashes.txt
echo "admin:5f4dcc3b5aa765d61d8327deb882cf99" >> my_hashes.txt
Puede verificar el contenido del archivo utilizando el comando cat:
cat my_hashes.txt
Salida esperada:
user1:5f4dcc3b5aa765d61d8327deb882cf99
john:5f4dcc3b5aa765d61d8327deb882cf99
mary:5f4dcc3b5aa765d61d8327deb882cf99
testuser:5f4dcc3b5aa765d61d8327deb882cf99
admin:5f4dcc3b5aa765d61d8327deb882cf99
Este archivo ahora contiene nombres de usuario y sus hashes de contraseña correspondientes, listos para el modo de grieta única (single crack mode) de John the Ripper.
Ejecutar John the Ripper en modo de grieta única
En este paso, ejecutará John the Ripper utilizando el modo de grieta única (single crack mode) contra el archivo hash que preparó. John intentará descifrar las contraseñas derivando posibles contraseñas de los nombres de usuario.
Para ejecutar John the Ripper en modo de grieta única, utilice la opción --single seguida de la ruta a su archivo hash.
john --single my_hashes.txt
John the Ripper comenzará a procesar los hashes. Dado que la contraseña "password" es una palabra común y los nombres de usuario son simples, John podría descifrar rápidamente algunos de ellos. La salida mostrará las contraseñas descifradas.
Ejemplo de salida:
Using default input encoding: UTF-8
Loaded 5 password hashes with no different salts (Raw-MD5 [MD5])
Press 'q' or Ctrl-C to abort, almost any other key for status
password (user1)
password (john)
password (mary)
password (testuser)
password (admin)
5g 0:00:00:00 DONE (2023-10-27 08:30) 100% ...
Session completed.
Después de que John termine, puede ver las contraseñas descifradas que se han guardado en el archivo pot de John.
john --show my_hashes.txt
Salida esperada:
user1:password
john:password
mary:password
testuser:password
admin:password
5 password hashes cracked, 0 left
Este comando muestra todas las contraseñas que John ha descifrado con éxito del archivo my_hashes.txt.
Observar el comportamiento del modo de grieta única
En este paso, observará cómo se comporta el modo de grieta única (single crack mode) de John the Ripper y qué tipo de candidatos a contraseñas genera. El modo de grieta única es único porque no utiliza una lista de palabras ni un ataque de fuerza bruta directamente. En su lugar, utiliza el nombre de usuario (o el campo GECOS si está disponible) como base para generar suposiciones de contraseñas.
Limpiemos el archivo pot de John para asegurar una ejecución nueva para la observación. Esto no se hace típicamente en un escenario real, pero ayuda para la demostración.
john --session=clear --format=Raw-MD5 --pot=/home/labex/.john/john.pot
Ahora, ejecute John de nuevo en modo único, pero esta vez, prestemos más atención a la salida y a cómo procesa cada entrada.
john --single my_hashes.txt
Mientras John se ejecuta, notará que intenta variaciones del nombre de usuario. Por ejemplo, para john, podría intentar john, John, JOHN, john1, john123, johnny, j0hn, etc. Las variaciones exactas dependen de las reglas internas de John y del archivo de configuración john.conf.
La conclusión clave es que el modo de grieta única es muy eficiente para descifrar contraseñas que son variaciones simples del nombre de usuario. Es una verificación rápida antes de recurrir a métodos más intensivos en recursos como ataques de diccionario o fuerza bruta.
También puede inspeccionar el archivo de configuración de John para comprender las reglas que utiliza para el modo único. Aunque no lo modificaremos, saber su ubicación es útil.
ls -l /etc/john/john.conf
Salida esperada:
-rw-r--r-- 1 root root 12345 Oct 27 08:00 /etc/john/john.conf
(El tamaño del archivo y la fecha pueden variar)
Este archivo contiene los conjuntos de reglas para el modo de grieta única, entre otros.
Comprender las limitaciones del modo de grieta única
En este paso, comprenderá las limitaciones del modo de grieta única (single crack mode) de John the Ripper. Si bien es potente para ciertos escenarios, no es una solución universal para todas las necesidades de descifrado de contraseñas.
El modo de grieta única se basa principalmente en permutaciones y variaciones del nombre de usuario (y a veces del campo GECOS de /etc/passwd). Esto significa:
- Alcance limitado: Solo intentará contraseñas que sean directamente derivables del nombre de usuario. Si una contraseña es "apple" y el nombre de usuario es "user1", el modo de grieta única probablemente fallará porque "apple" no tiene una relación directa con "user1".
- Sin listas de palabras externas: A diferencia del modo de ataque de diccionario, el modo de grieta única no utiliza una lista de palabras externa. Esto lo hace rápido, pero también limita su capacidad para descifrar contraseñas que son palabras comunes no relacionadas con el nombre de usuario.
- Sin fuerza bruta: No realiza un ataque de fuerza bruta completo, que intentaría todas las combinaciones posibles de caracteres. Esto significa que es muy poco probable que las contraseñas complejas y aleatorias sean descifradas por este modo.
- Dependencia de los nombres de usuario: Su efectividad está directamente ligada a la calidad y relevancia de los nombres de usuario. Si los nombres de usuario son genéricos (por ejemplo,
user,admin), los candidatos a contraseñas generados pueden ser menos efectivos.
Para demostrar esta limitación, agregaremos un hash para una contraseña que no está relacionada con el nombre de usuario. Agregaremos randomuser:e10adc3949ba59abbe56e057f20f883e, donde e10adc3949ba59abbe56e057f20f883e es el hash MD5 para 123456.
echo "randomuser:e10adc3949ba59abbe56e057f20f883e" >> my_hashes.txt
cat my_hashes.txt
Ahora, ejecute John en modo único nuevamente:
john --single my_hashes.txt
Observará que la contraseña de randomuser (123456) no se descifra, porque 123456 no es una derivación de randomuser.
Salida esperada (observe que randomuser no se descifra):
Using default input encoding: UTF-8
Loaded 6 password hashes with no different salts (Raw-MD5 [MD5])
Press 'q' or Ctrl-C to abort, almost any other key for status
password (user1)
password (john)
password (mary)
password (testuser)
password (admin)
5g 0:00:00:00 DONE (2023-10-27 08:35) 100% ...
Session completed.
Esto ilustra claramente que el modo de grieta única solo es efectivo cuando las contraseñas son variaciones simples del nombre de usuario.
Comparar el modo de grieta única con otros modos
En este paso final, comparará brevemente el modo de grieta única con otros modos comunes de descifrado en John the Ripper, como el modo de lista de palabras (wordlist mode) y el modo de fuerza bruta (brute-force mode). Comprender estas diferencias es crucial para elegir la herramienta adecuada para el trabajo.
Modo de grieta única (
--single):- Método: Genera candidatos a contraseñas basándose en el nombre de usuario (y el campo GECOS).
- Caso de uso: Ideal para verificaciones rápidas contra contraseñas que son variaciones simples de nombres de usuario. Muy rápido.
- Limitaciones: Alcance limitado; no descifrará contraseñas no relacionadas con el nombre de usuario.
Modo de lista de palabras (
--wordlist=FILE):- Método: Intenta contraseñas de un archivo de diccionario o lista de palabras proporcionado. Se puede combinar con reglas (
--rules) para permutaciones. - Caso de uso: El más común y efectivo para descifrar contraseñas que son palabras comunes, frases o combinaciones que se encuentran en diccionarios.
- Limitaciones: Solo es tan bueno como la lista de palabras; no descifrará contraseñas que no estén presentes en la lista o sus permutaciones.
- Método: Intenta contraseñas de un archivo de diccionario o lista de palabras proporcionado. Se puede combinar con reglas (
Modo incremental (Fuerza bruta) (
--incremental):- Método: Intenta sistemáticamente todas las combinaciones posibles de caracteres dentro de un conjunto de caracteres y longitud definidos.
- Caso de uso: Último recurso para descifrar contraseñas complejas que no se encuentran por otros métodos. Garantiza encontrar la contraseña si se le da suficiente tiempo.
- Limitaciones: Extremadamente lento, especialmente para contraseñas más largas o conjuntos de caracteres más grandes. Puede llevar días, meses o incluso años.
Demostremos el descifrado de la contraseña de randomuser (123456) utilizando el modo de lista de palabras. Primero, cree una lista de palabras simple que contenga "123456".
echo "123456" > my_wordlist.txt
Ahora, ejecute John en modo de lista de palabras:
john --wordlist=my_wordlist.txt my_hashes.txt
Salida esperada:
Using default input encoding: UTF-8
Loaded 6 password hashes with no different salts (Raw-MD5 [MD5])
Press 'q' or Ctrl-C to abort, almost any other key for status
123456 (randomuser)
1g 0:00:00:00 DONE (2023-10-27 08:40) 100% ...
Session completed.
Como puede ver, la contraseña de randomuser se descifró utilizando la lista de palabras. Esto resalta que los diferentes modos de descifrado son adecuados para diferentes tipos de contraseñas. El modo de grieta única es un buen primer paso, pero a menudo debe ir seguido de los modos de lista de palabras o incremental para un descifrado más completo.
Finalmente, limpie los archivos creados:
rm my_hashes.txt my_wordlist.txt
Resumen
En este laboratorio, aprendió con éxito a utilizar el modo de grieta única (single crack mode) de John the Ripper. Preparó un archivo de hashes con nombres de usuario, ejecutó John en modo de grieta única y observó su comportamiento al descifrar contraseñas derivadas de nombres de usuario. También comprendió las limitaciones del modo de grieta única, dándose cuenta de que es más efectivo para patrones de contraseñas específicos y no una solución universal. Finalmente, comparó el modo de grieta única con otros modos comunes de John the Ripper como lista de palabras (wordlist) e incremental, destacando cuándo es más apropiado cada modo. Esta experiencia práctica mejora su comprensión de las técnicas de auditoría de seguridad de contraseñas.


