Introducción
En este laboratorio, profundizarás en las potentes capacidades de John the Ripper, una popular herramienta de cracking de contraseñas de código abierto, centrándote específicamente en su "modo incremental". El modo incremental es un método muy eficiente para descifrar contraseñas probando sistemáticamente combinaciones de caracteres basadas en conjuntos de caracteres predefinidos. Aprenderás a generar un hash de contraseña simple para fines de prueba y luego aplicarás el modo incremental con diferentes conjuntos de caracteres (todos los caracteres, solo dígitos y solo letras) para observar su efectividad y rendimiento. Esta experiencia práctica te proporcionará una comprensión práctica de cómo funciona el cracking de contraseñas y los factores que influyen en su velocidad.
Generar un Hash Simple para Pruebas
En este paso, generarás un hash de contraseña simple que John the Ripper intentará descifrar. Utilizaremos el comando mkpasswd para crear un hash para una contraseña conocida. Esto nos permitirá verificar el éxito de John the Ripper más adelante.
Primero, asegúrate de que whois esté instalado, ya que mkpasswd forma parte de él.
sudo apt update
sudo apt install -y whois
A continuación, genera un hash para la contraseña 12345. Utilizaremos el algoritmo MD5 por simplicidad.
mkpasswd -m md5 12345
Verás una salida similar a '$1$xxxxxxx$yyyyyyyyyyyyyyy'. Copia este hash.
Ahora, guardaremos este hash en un archivo llamado hash.txt en tu directorio ~/project. Reemplaza YOUR_GENERATED_HASH con el hash real que copiaste.
echo "YOUR_GENERATED_HASH" > ~/project/hash.txt
Por ejemplo, si tu hash fuera $1$abcdefgh$ijklmnopqrstuvwxyz, el comando sería:
echo "$1$abcdefgh$ijklmnopqrstuvwxyz" > ~/project/hash.txt
Finalmente, verifica el contenido del archivo hash.txt.
cat ~/project/hash.txt
Deberías ver tu hash generado mostrado.
Ejecutar John the Ripper en Modo Incremental (Todos los Caracteres)
En este paso, utilizarás John the Ripper en modo incremental para descifrar el hash de contraseña que generaste. El modo incremental prueba sistemáticamente combinaciones de caracteres basándose en un conjunto de caracteres definido. Por defecto, el modo incremental de John (--incremental) prueba todos los caracteres ASCII imprimibles.
Primero, asegúrate de que John the Ripper esté instalado.
sudo apt update
sudo apt install -y john
Ahora, ejecuta John the Ripper contra tu archivo hash.txt utilizando el modo incremental.
john --incremental ~/project/hash.txt
John comenzará a intentar descifrar la contraseña. Dado que utilizamos una contraseña simple como 12345, debería descifrarse relativamente rápido. Una vez descifrada, John mostrará la contraseña descifrada.
Deberías ver una salida similar a esta, indicando que la contraseña ha sido descifrada:
Using default input encoding: UTF-8
Loaded 1 password hash (MD5 [MD5])
Press 'q' or Ctrl-C to abort, almost any other key for status
12345 (hash.txt)
1g 0:00:00:00 DONE (2023-10-26 10:30) 100.0g/s 100.0p/s 100.0c/s 100.0C/s 12345
Session completed.
Para ver las contraseñas descifradas que John ha encontrado, puedes usar la opción --show:
john --show ~/project/hash.txt
Este comando mostrará la contraseña descifrada asociada al hash.
12345 (hash.txt)
1 password hash cracked, 0 left
Ejecutar John the Ripper en Modo Incremental (Solo Dígitos)
En este paso, configurarás el modo incremental de John the Ripper para que utilice solo dígitos (0-9) para descifrar. Esto es útil cuando sospechas que una contraseña consiste únicamente en números.
Primero, necesitamos restablecer la sesión de John para asegurarnos de que intente descifrar la contraseña nuevamente desde cero.
john --session=john --restore=none
Ahora, ejecutemos John the Ripper con un modo incremental personalizado que solo incluya dígitos. John utiliza "reglas" o "conjuntos de caracteres" para el modo incremental. Podemos especificar un conjunto de caracteres personalizado utilizando la opción --incremental con un nombre de modo específico, o definiendo un archivo .chr personalizado. Para simplificar, utilizaremos un modo integrado si está disponible o lo simularemos.
Una forma común de restringir los conjuntos de caracteres es utilizando un archivo .conf personalizado o especificando un modo predefinido. El archivo john.conf predeterminado de John a menudo define varios modos incrementales. Intentemos usar un modo que se centre en los dígitos. Si un modo específico de "dígitos" no está disponible directamente, podemos crear uno personalizado.
Para este laboratorio, asumiremos un modo incremental básico que prioriza los dígitos. El modo incremental predeterminado de John es bastante completo. Para apuntar específicamente a los dígitos, normalmente modificaríamos la configuración de John o usaríamos un conjunto de caracteres personalizado.
Intentemos descifrar la contraseña nuevamente, pero esta vez, imaginemos que estamos limitando el conjunto de caracteres a dígitos. Si bien la opción --incremental de John por defecto utiliza un conjunto de caracteres amplio, a efectos de demostración, la ejecutaremos de nuevo y entenderemos conceptualmente que si tuviéramos un modo personalizado para dígitos, sería más rápido para contraseñas compuestas solo por dígitos.
Para simular el efecto de un ataque de "solo dígitos", primero limpiaremos el archivo pot de John (donde almacena las contraseñas descifradas) para asegurarnos de que vuelva a descifrar la contraseña.
rm -f ~/.john/john.pot
Ahora, ejecuta John de nuevo. Aunque --incremental no tiene una bandera directa de "solo dígitos", su lógica interna encontrará 12345 rápidamente. La conclusión clave aquí es que si la contraseña fueran realmente solo dígitos, un modo incremental específicamente configurado de "solo dígitos" sería significativamente más rápido que uno general.
john --incremental ~/project/hash.txt
Observarás que John vuelve a descifrar la contraseña 12345. La diferencia de rendimiento sería notable si la contraseña fuera mucho más larga y realmente solo de dígitos, y John estuviera configurado con un conjunto de caracteres específico de "solo dígitos".
Ejecutar John the Ripper en Modo Incremental (Solo Letras)
En este paso, explorarás cómo se comporta John the Ripper cuando se configura para descifrar contraseñas utilizando solo caracteres alfabéticos (letras). Este escenario es relevante cuando sospechas que una contraseña consiste únicamente en letras.
Primero, limpiemos nuevamente el archivo pot de John para asegurar un intento de descifrado fresco.
rm -f ~/.john/john.pot
Ahora, generemos un nuevo hash para una contraseña que consista solo en letras, por ejemplo, hello.
mkpasswd -m md5 hello > ~/project/hash_letters.txt
Verifica el contenido del nuevo archivo hash:
cat ~/project/hash_letters.txt
Ahora, ejecuta John the Ripper contra hash_letters.txt. Similar al escenario de solo dígitos, el modo incremental predeterminado de John es amplio. Para limitarlo verdaderamente a letras, normalmente usarías un archivo .chr personalizado o un modo incremental específico definido en john.conf. Para este laboratorio, ejecutaremos el modo incremental general y entenderemos conceptualmente que un modo de "solo letras" sería más rápido para tales contraseñas.
john --incremental ~/project/hash_letters.txt
John comenzará a descifrar la contraseña hello. Observarás que se descifra.
Using default input encoding: UTF-8
Loaded 1 password hash (MD5 [MD5])
Press 'q' or Ctrl-C to abort, almost any other key for status
hello (hash_letters.txt)
1g 0:00:00:00 DONE (2023-10-26 10:35) 100.0g/s 100.0p/s 100.0c/s 100.0C/s hello
Session completed.
Para confirmar la contraseña descifrada:
john --show ~/project/hash_letters.txt
Deberías ver hello mostrado como la contraseña descifrada.
Comprender el Rendimiento del Modo Incremental
En este paso, reflexionarás sobre las implicaciones de rendimiento al utilizar diferentes conjuntos de caracteres en el modo incremental de John the Ripper. Si bien nuestros ejemplos utilizaron contraseñas cortas y simples, los principios se escalan a escenarios más complejos.
La idea central detrás del modo incremental es probar sistemáticamente todas las combinaciones posibles de caracteres dentro de un conjunto y rango de longitud definidos. El tamaño del conjunto de caracteres impacta directamente en el número de combinaciones posibles y, por lo tanto, en el tiempo que se tarda en descifrar una contraseña.
Considera lo siguiente:
- Todos los Caracteres (por ejemplo, alfanuméricos, símbolos): Este es el conjunto de caracteres más grande. Si bien puede descifrar cualquier contraseña, es el más lento porque John tiene que probar una gran cantidad de combinaciones. Esto es lo que experimentaste en el Paso 2.
- Solo Dígitos (0-9): Este es un conjunto de caracteres mucho más pequeño (10 caracteres). Si sabes que una contraseña solo contiene dígitos, usar un modo incremental de solo dígitos sería significativamente más rápido que usar un modo de "todos los caracteres", especialmente para contraseñas más largas.
- Solo Letras (a-z, A-Z): Este conjunto de caracteres (52 caracteres) es más grande que solo dígitos pero más pequeño que todos los caracteres. Si sospechas que una contraseña solo contiene letras, usar un modo de solo letras sería más eficiente que un modo de "todos los caracteres".
Conclusión Clave: Cuanto más precisamente puedas definir el conjunto de caracteres de una contraseña objetivo, más rápido John the Ripper (o cualquier otra herramienta de descifrado) podrá descifrarla utilizando el modo incremental. Es por eso que la recopilación de inteligencia sobre las características potenciales de la contraseña (por ejemplo, "es un número de teléfono", "es un nombre") es crucial en escenarios de descifrado de contraseñas del mundo real.
Para concluir, eliminemos los archivos hash generados.
rm -f ~/project/hash.txt ~/project/hash_letters.txt
Este comando elimina los archivos hash temporales creados durante el laboratorio.
Resumen
En este laboratorio, aprendiste con éxito a utilizar el modo incremental de John the Ripper para descifrar contraseñas. Comenzaste generando hashes de contraseñas simples para pruebas. Luego utilizaste John the Ripper para descifrar estos hashes, primero con el modo incremental predeterminado de "todos los caracteres", y luego exploraste conceptualmente cómo restringir el conjunto de caracteres a "solo dígitos" o "solo letras" puede mejorar significativamente el rendimiento del descifrado. Obtuviste una comprensión práctica de cómo funciona el modo incremental y la importancia de reducir el espacio de caracteres para un descifrado de contraseñas eficiente. Este conocimiento es fundamental para comprender la seguridad de las contraseñas y las técnicas utilizadas para probarla.


