Comprender los Modos Básicos de John the Ripper

Kali LinuxBeginner
Practicar Ahora

Introducción

John the Ripper (JtR) es una potente y ampliamente utilizada herramienta de código abierto para la auditoría de seguridad de contraseñas y la recuperación de contraseñas. Puede ser utilizada por administradores de sistemas para probar la fortaleza de las contraseñas en sus sistemas y por profesionales de seguridad para recuperar contraseñas perdidas. Comprender sus diferentes modos de operación es clave para usarla de manera efectiva.

En este laboratorio, obtendrá experiencia práctica con los modos básicos de cracking de John the Ripper. Aprenderá a usar sus opciones de ayuda y explorará su comportamiento predeterminado. Luego, se adentrará en sus cuatro modos principales: Single Crack, Wordlist, Incremental y External mode, aprendiendo el propósito y el uso básico de cada uno.

Explorar las Opciones de Ayuda de John the Ripper

En este paso, comenzará explorando la documentación de ayuda integrada de John the Ripper. El menú de ayuda es un recurso esencial que proporciona una referencia rápida para la sintaxis de la herramienta, las opciones de línea de comandos y los modos disponibles.

Para ver la página de ayuda principal, simplemente ejecute el comando john con la bandera --help. Esto mostrará un resumen de las opciones más comunes y sus descripciones.

Ejecute el siguiente comando en su terminal:

john --help

Verá una salida detallada que enumera varias opciones. Preste atención a las banderas que especifican diferentes modos de cracking, como --single, --wordlist y --incremental.

John the Ripper 1.9.0-jumbo-1 [linux-gnu 64-bit x86_64 AVX2 AC]
Copyright (c) 1996-2019 by Solar Designer and others
Homepage: http://www.openwall.com/john/

Usage: john [OPTIONS] [PASSWORD-FILES]

--single                   modo "single crack"
--wordlist=FILE --stdin    modo wordlist, leer palabras de FILE o stdin
--rules                    habilitar reglas de manipulación de palabras para el modo wordlist
--incremental[=MODE]       modo "incremental" [usando la sección MODE]
--external=MODE            modo externo o filtro de palabras
--stdout[=LENGTH]          solo generar contraseñas candidatas [cortar en LENGTH]
--restore[=NAME]           restaurar una sesión interrumpida [llamada NAME]
--session=NAME             nueva sesión [llamada NAME]
--status[=NAME]            mostrar el estado de una sesión [llamada NAME]
--show[=LEFT]              mostrar contraseñas descifradas [si =LEFT, entonces no descifradas]
--test[=TIME]              ejecutar pruebas y benchmarks durante TIME segundos cada uno
--users=[-]LOGIN|UID[,..]  cargar solo este (estos) usuario(s) [no cargar]
--groups=[-]GID[,..]       cargar solo usuarios de este (estos) grupo(s)
... (salida truncada) ...

Este comando le brinda una visión general sólida de lo que John the Ripper puede hacer. En los siguientes pasos, exploraremos algunos de estos modos en la práctica.

Identificar los Modos de Cracking Predeterminados de John the Ripper

En este paso, aprenderá cómo opera John the Ripper por defecto. Cuando ejecuta john en un archivo de contraseñas sin especificar un modo, no elige un solo método. En su lugar, itera inteligentemente a través de sus modos más efectivos en un orden predeterminado: primero el modo "single", luego el modo "wordlist" y finalmente el modo "incremental". Esto proporciona un buen equilibrio entre velocidad y exhaustividad.

Nuestro script de configuración ya ha creado un archivo llamado mypasswd.txt en su directorio actual (~/project). Este archivo contiene una entrada de usuario con una contraseña simple y hasheada.

Ejecutemos John the Ripper en este archivo sin ninguna bandera de modo para observar su comportamiento predeterminado.

john mypasswd.txt

John iniciará el proceso de cracking. Verá actualizaciones de estado mientras trabaja. Dado que la contraseña es simple, debería ser descifrada muy rápidamente.

Using default input encoding: UTF-8
Loaded 1 password hash (descrypt, traditional crypt(3) [DES 128/128 SSE2-16])
Cost 1 (algorithm [1:descrypt]...[3:DES]) is 50400 for all loaded hashes
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
password         (testuser)
1g 0:00:00:00 DONE (2023-10-27 10:30) 100.0g/s 12000p/s 12000c/s 12000C/s rolez..pimpin
Use the "--show" option to display all of the cracked passwords reliably
Session completed

Como puede ver, John descifró con éxito la contraseña (password) para el usuario testuser. También sugiere útilmente usar la opción --show para ver las contraseñas descifradas más tarde.

Para confirmar la contraseña descifrada, puede usar la opción --show:

john --show mypasswd.txt

Esto mostrará todas las contraseñas que se han descifrado con éxito para el archivo dado.

testuser:password:1001:1001::/home/testuser:/bin/sh

1 password hash cracked, 0 left

Esto confirma que la secuencia de modos predeterminada fue exitosa.

Diferenciar entre el Modo Single Crack y el Modo Wordlist

En este paso, aprenderá sobre dos de los modos de cracking más fundamentales: "single crack" y "wordlist".

Primero, es importante saber que John the Ripper almacena las contraseñas descifradas en un archivo llamado john.pot ubicado en el directorio ~/.john/. Para volver a ejecutar una sesión de cracking en una contraseña ya descifrada, primero debemos eliminar este archivo. Hagamos eso ahora.

rm ~/.john/john.pot

Modo Single Crack

El modo "single crack" es un modo rápido y eficiente que genera candidatos a contraseñas basándose en información sobre la propia cuenta de usuario, como el nombre de usuario o los datos del campo GECOS. Aplica mutaciones comunes (como agregar números o símbolos) a estos candidatos.

Ejecutemos John en modo "single crack" explícitamente usando la bandera --single.

john --single mypasswd.txt

La salida será similar a la ejecución predeterminada, ya que este es el primer modo que John intenta. Es muy efectivo contra contraseñas que son variaciones del nombre de usuario.

Modo Wordlist

El modo "wordlist" es una de las técnicas de cracking de contraseñas más populares. Utiliza una lista de palabras precompilada (un diccionario o wordlist) e intenta cada una como contraseña. John viene con una wordlist predeterminada, que generalmente se encuentra en /usr/share/john/password.lst.

Primero, eliminemos el archivo pot nuevamente para restablecer la sesión.

rm ~/.john/john.pot

Ahora, ejecutemos John en modo "wordlist", apuntando explícitamente a su wordlist predeterminada usando la bandera --wordlist.

john --wordlist=/usr/share/john/password.lst mypasswd.txt

Verá a John cargar la wordlist e intentar descifrar el hash. Dado que "password" es una contraseña muy común, está incluida en la lista predeterminada y se encontrará casi al instante.

Using default input encoding: UTF-8
Loaded 1 password hash (descrypt, traditional crypt(3) [DES 128/128 SSE2-16])
Cost 1 (algorithm [1:descrypt]...[3:DES]) is 50400 for all loaded hashes
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
password         (testuser)
1g 0:00:00:00 DONE (2023-10-27 10:35) 100.0g/s 12000p/s 12000c/s 12000C/s passwo..pascal
Use the "--show" option to display all of the cracked passwords reliably
Session completed

Esto demuestra cómo dirigir a John para que utilice un archivo de diccionario específico para su ataque.

Comprender los Fundamentos del Modo Incremental

En este paso, explorará el modo "incremental". Este modo es esencialmente un ataque de fuerza bruta. Intenta sistemáticamente todas las combinaciones posibles de caracteres hasta una cierta longitud. Si bien es el modo más completo, también puede consumir mucho tiempo para contraseñas de complejidad moderada.

El comportamiento del modo incremental se define en el archivo john.conf, que especifica conjuntos de caracteres (por ejemplo, Alnum para alfanuméricos, All para todos los caracteres) y restricciones de longitud.

Primero, reiniciemos la sesión de cracking eliminando nuevamente el archivo john.pot.

rm ~/.john/john.pot

Ahora, ejecutemos John en modo incremental. Especificaremos el conjunto de caracteres Digits, que le indica a John que intente todas las combinaciones numéricas posibles. Usamos la bandera --incremental para esto.

john --incremental=Digits mypasswd.txt

Verá a John comenzar a intentar combinaciones como "0", "1", "2", "00", "01", etc. Dado que nuestra contraseña es "password" (todas letras), este ataque no tendrá éxito. Puede presionar Ctrl+C para detenerlo después de unos segundos.

Ahora, intentemos un conjunto de caracteres más apropiado. Usaremos el modo incremental predeterminado, que generalmente comienza con conjuntos de caracteres comunes como letras minúsculas.

Restablezcamos la sesión una vez más:

rm ~/.john/john.pot

Ejecute el comando sin especificar un conjunto de caracteres:

john --incremental mypasswd.txt

Esta vez, John utilizará su secuencia predefinida de conjuntos de caracteres. Dado que "password" consta de letras minúsculas, el conjunto de caracteres Lower o Alpha eventualmente la encontrará.

Using default input encoding: UTF-8
Loaded 1 password hash (descrypt, traditional crypt(3) [DES 128/128 SSE2-16])
Cost 1 (algorithm [1:descrypt]...[3:DES]) is 50400 for all loaded hashes
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
password         (testuser)
1g 0:00:00:00 DONE (2023-10-27 10:40) 100.0g/s 12000p/s 12000c/s 12000C/s passwo..pascal
Session completed

El modo incremental es su último recurso cuando otros modos más rápidos han fallado.

Conocer la Funcionalidad del Modo Externo

En este paso, se le presentará el modo "external". Este es el modo más avanzado y flexible de John. Le permite definir lógica personalizada de generación de contraseñas utilizando un lenguaje de scripting similar a C directamente dentro del archivo de configuración john.conf. Esto es potente para crear ataques altamente dirigidos que otros modos no pueden manejar.

Si bien escribir scripts externos es un tema avanzado, puede usar fácilmente los modos externos predefinidos que vienen con John. Primero, enumeremos los modos externos disponibles definidos en /etc/john/john.conf.

grep '^\[' /etc/john/john.conf | grep 'External:'

Este comando filtra el archivo de configuración para mostrarle los nombres de las secciones de modo externo.

[External:Compiler]
[External:Double]
[External:Hybrid]
[External:Keyboard]
[External:LanManager]
[External:Shift]
[External:Status]
[External:Wordlist]

Puede ver varias funciones externas integradas. Intentemos usar el modo externo Wordlist. Este modo esencialmente imita el modo wordlist estándar pero se implementa como un script externo, lo que lo convierte en un buen ejemplo.

Primero, como siempre, restablezcamos la sesión.

rm ~/.john/john.pot

Ahora, ejecutemos John usando la bandera --external, especificando el modo Wordlist.

john --external=Wordlist mypasswd.txt

La salida será muy similar a cuando ejecutó el modo wordlist estándar porque la lógica subyacente es la misma: utiliza la wordlist predeterminada para encontrar la contraseña.

Using default input encoding: UTF-8
Loaded 1 password hash (descrypt, traditional crypt(3) [DES 128/128 SSE2-16])
Cost 1 (algorithm [1:descrypt]...[3:DES]) is 50400 for all loaded hashes
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
password         (testuser)
1g 0:00:00:00 DONE (2023-10-27 10:45) 100.0g/s 12000p/s 12000c/s 12000C/s passwo..pascal
Session completed

El modo externo desbloquea posibilidades casi ilimitadas para generar candidatos a contraseñas, lo que lo convierte en una herramienta para usuarios expertos que necesitan implementar lógica de cracking personalizada.

Resumen

En este laboratorio, ha explorado con éxito los modos de cracking fundamentales de John the Ripper. Aprendió a navegar por sus opciones de ayuda y observó su comportamiento predeterminado, que combina inteligentemente múltiples modos para lograr eficiencia.

Adquirió experiencia práctica con:

  • Modo Single Crack: Un modo rápido que utiliza información específica del usuario para adivinar contraseñas.
  • Modo Wordlist: Una técnica común que utiliza un diccionario de palabras.
  • Modo Incremental: Un modo completo de fuerza bruta que prueba todas las combinaciones de caracteres.
  • Modo Externo: Un modo avanzado y programable para crear reglas personalizadas de generación de contraseñas.

Comprender estos modos principales es el primer paso para dominar John the Ripper para tareas de auditoría y recuperación de seguridad de contraseñas. Ahora está equipado con el conocimiento fundamental para elegir el modo correcto para diferentes escenarios.