Opciones Avanzadas de Línea de Comandos de John the Ripper

Kali LinuxBeginner
Practicar Ahora

Introducción

John the Ripper es un cracker de contraseñas rápido, disponible para muchas variantes de Unix, macOS, Windows y DOS. Su propósito principal es detectar contraseñas débiles de Unix. Además de varios tipos de hash de contraseñas crypt(3) que se encuentran comúnmente en varios sistemas Unix, se admiten de fábrica los hashes Kerberos AFS y Windows LM, además de cientos de otros tipos de hash y cifrado en la versión mejorada por la comunidad.

En este laboratorio, profundizará en las capacidades de John the Ripper explorando algunas de sus opciones avanzadas de línea de comandos. Comprender estas opciones le permitirá ajustar sus intentos de cracking de contraseñas, gestionar sesiones de larga duración y redirigir la salida para un análisis posterior. Aprenderá a especificar formatos de hash, aplicar reglas personalizadas, gestionar sesiones de cracking y utilizar la opción --stdout para generar listas de palabras (wordlists).

Explorar la opción --format en detalle

En este paso, aprenderá a utilizar la opción --format en John the Ripper. Esta opción es crucial cuando se trabaja con varios tipos de hashes de contraseñas, ya que le indica a John qué tipo de hash esperar y cómo procesarlo. John the Ripper admite una amplia gama de formatos de hash, desde los hashes crypt tradicionales de Unix hasta hashes modernos específicos de aplicaciones.

Primero, enumeremos los formatos de hash disponibles que admite John the Ripper. Esto le dará una idea de la versatilidad de la herramienta.

john --list=formats

Verá una larga lista de formatos. Por ejemplo, crypt para hashes Unix tradicionales, raw-md5 para hashes MD5 sin cifrar, nt para hashes de Windows NT, y muchos más.

Ahora, intentemos descifrar una contraseña de nuestro archivo passwords.txt, apuntando específicamente a un formato conocido. Tenemos un usuario user1 con un hash SHA512 crypt. Podemos indicarle explícitamente a John que use el formato sha512crypt.

john --format=sha512crypt /home/labex/project/passwords.txt --wordlist=/home/labex/project/wordlist.txt

Si la contraseña de user1 (que es password123 en nuestra configuración) está en la lista de palabras, John la descifrará.

A continuación, intentemos descifrar un hash LM (user5) y un hash NT (user6) del archivo passwords.txt. John a menudo puede auto-detectar formatos, pero especificarlos explícitamente con --format puede ser más rápido y confiable, especialmente cuando se trata de tipos de hash mixtos o formatos menos comunes.

john --format=lm /home/labex/project/passwords.txt --wordlist=/home/labex/project/wordlist.txt
john --format=nt /home/labex/project/passwords.txt --wordlist=/home/labex/project/wordlist.txt

Es posible que vea una salida similar a esta, que indica el proceso de descifrado:

Using default input encoding: UTF-8
Loaded 1 password hash (sha512crypt, crypt(3) $6$ [SHA512 256/256 AVX2])
Press 'q' or Ctrl-C to abort, almost any other key for status
password123      (user1)
1g 0:00:00:00 DONE (2023-10-27 10:00) 100% (ETA: 10:00) 1.000g/s 1.000p/s 1.000c/s 1.000C/s password123
Session completed

Este paso demuestra la importancia de la opción --format para un descifrado de contraseñas eficiente y preciso.

Utilizar la opción --rules con reglas personalizadas

En este paso, explorará la opción --rules, que permite a John the Ripper aplicar un conjunto de reglas predefinidas o personalizadas a las palabras de una lista de palabras (wordlist). Las reglas son transformaciones potentes que se pueden aplicar a las palabras, como añadir números, cambiar mayúsculas/minúsculas o duplicar caracteres, lo que aumenta significativamente las posibilidades de descifrar contraseñas que son variaciones de palabras comunes.

John viene con varios conjuntos de reglas integrados, como Wordlist (por defecto), Single y Jumbo. Puede enumerar los conjuntos de reglas disponibles utilizando:

john --list=rules

Este comando mostrará una lista de conjuntos de reglas.

Ahora, usemos un archivo de reglas personalizado. Creamos un archivo de reglas personalizado simple llamado custom_rules.txt en la configuración, que contiene reglas como :$[0-9] (añadir un dígito) y Az (capitalizar la primera letra).

Intentemos descifrar user1 de nuevo, pero esta vez usando nuestras reglas personalizadas. Supongamos que la contraseña de user1 era Password123 (P mayúscula, luego 123). Nuestra lista de palabras solo contiene password. La regla Az capitalizará la primera letra y :$[0-9] añadirá un dígito.

john --wordlist=/home/labex/project/wordlist.txt --rules=/home/labex/project/custom_rules.txt /home/labex/project/passwords.txt --format=sha512crypt

Este comando aplicará las reglas de custom_rules.txt a cada palabra en wordlist.txt antes de intentar descifrarlas contra los hashes. Por ejemplo, password podría convertirse en Password, password0, password1, etc., y luego Password0, Password1, etc.

También puede combinar reglas con la opción --stdout (que cubriremos en el siguiente paso) para ver qué palabras se generan con sus reglas:

john --wordlist=/home/labex/project/wordlist.txt --rules=/home/labex/project/custom_rules.txt --stdout

Este comando imprimirá todas las palabras generadas al aplicar custom_rules.txt a wordlist.txt en su terminal. Esto es útil para depurar sus conjuntos de reglas.

La opción --rules es una característica potente para extender la efectividad de los ataques de lista de palabras generando variaciones comunes de contraseñas.

Comprender las opciones --session y --restore

En este paso, aprenderá sobre las opciones --session y --restore, que son vitales para gestionar tareas de descifrado de contraseñas de larga duración. Descifrar contraseñas complejas puede llevar horas, días o incluso semanas. Estas opciones le permiten guardar el estado actual de una sesión de descifrado y reanudarla más tarde sin perder el progreso.

Cuando John the Ripper se ejecuta, crea automáticamente un archivo de sesión (generalmente john.rec en el directorio de ejecución) para guardar su estado. Sin embargo, usar la opción --session le permite especificar un nombre personalizado para este archivo de sesión, lo cual es útil cuando ejecuta múltiples tareas de descifrado simultáneamente o cuando desea mantener registros de sesiones específicos.

Comencemos una sesión de descifrado para user1 y especifiquemos un nombre de sesión:

john --session=my_cracking_session /home/labex/project/passwords.txt --wordlist=/home/labex/project/wordlist.txt --format=sha512crypt

Deje que el descifrado se ejecute durante unos segundos, luego presione Ctrl+C para interrumpirlo. Verá un mensaje que indica que la sesión se guardó.

Ahora, enumere los archivos en su directorio actual para ver el archivo de sesión:

ls -l /home/labex/project/

Debería ver un archivo llamado my_cracking_session.rec (o similar, dependiendo de la versión y configuración de John).

Para reanudar la sesión interrumpida, use la opción --restore con el nombre de la sesión:

john --restore=my_cracking_session

John continuará exactamente desde donde lo dejó. Esto es increíblemente útil para gestionar operaciones de descifrado a gran escala o cuando su sistema necesita reiniciarse.

Si no especifica un nombre de sesión con --session, John usará un archivo de sesión predeterminado. Usar --restore sin un nombre de sesión intentará restaurar la sesión predeterminada.

john --restore

Este paso destaca cómo gestionar y reanudar eficazmente sus esfuerzos de descifrado de contraseñas, asegurando que no se pierda ningún progreso.

Experimentar con --stdout para la redirección de salida

En este paso, aprenderá sobre la opción --stdout, que es extremadamente útil para generar listas de palabras (wordlists) o probar conjuntos de reglas sin realizar realmente un intento de descifrado. Cuando se usa con --stdout, John the Ripper emitirá las contraseñas candidatas generadas a la salida estándar, que luego pueden ser redirigidas a un archivo o enviadas a otra herramienta mediante una tubería (pipe).

Esto es particularmente potente cuando se combina con listas de palabras y reglas. Puede usar John para crear listas de palabras altamente personalizadas basadas en las existentes y reglas específicas.

Generemos una lista de palabras aplicando nuestro custom_rules.txt a wordlist.txt y redirijamos la salida a un nuevo archivo llamado generated_wordlist.txt:

john --wordlist=/home/labex/project/wordlist.txt --rules=/home/labex/project/custom_rules.txt --stdout > /home/labex/project/generated_wordlist.txt

Después de ejecutar el comando, verifique el contenido del archivo recién creado:

cat /home/labex/project/generated_wordlist.txt

Debería ver palabras como password, Password, password0, password1, etc., generadas por las reglas.

También puede usar --stdout para generar permutaciones de una sola palabra. Por ejemplo, para generar variaciones de la palabra "test":

echo "test" | john --pipe --rules=/home/labex/project/custom_rules.txt --stdout

Aquí, echo "test" | john --pipe envía la palabra "test" a la entrada estándar de John, y --pipe le indica a John que lea desde la entrada estándar. Luego, --stdout emite las variaciones aplicadas por las reglas.

La opción --stdout es una característica versátil para preprocesar listas de palabras, crear diccionarios personalizados para otras herramientas de descifrado o simplemente para comprender cómo sus reglas transforman las palabras.

Descubrir otras banderas útiles de línea de comandos

En este último paso, explorará brevemente algunas otras banderas útiles de línea de comandos que pueden mejorar su uso de John the Ripper. Aunque no profundizaremos en cada una, saber que existen puede ayudarle en varios escenarios.

  1. --show: Esta opción muestra las contraseñas descifradas de una sesión anterior. Después de descifrar contraseñas, John las almacena en su archivo john.pot. Puede verlas usando:

    john --show /home/labex/project/passwords.txt

    Esto mostrará cualquier contraseña que John haya descifrado con éxito del archivo passwords.txt.

  2. --incremental: Este es un modo potente para ataques de fuerza bruta. John generará contraseñas basadas en conjuntos de caracteres y longitudes. Puede especificar un modo (por ejemplo, alnum, digits, all).

    ## Este comando se ejecutará durante mucho tiempo, así que solo demostraremos su uso.
    ## NO lo deje ejecutándose demasiado tiempo. Presione Ctrl+C para detenerlo después de unos segundos.
    john --incremental=digits /home/labex/project/passwords.txt --format=raw-md5

    Este comando intenta descifrar contraseñas generando combinaciones de dígitos.

  3. --fork=<N>: Esta opción permite a John utilizar múltiples núcleos de CPU o hilos para el descifrado, donde <N> es el número de forks (procesos) a utilizar. Esto puede acelerar significativamente el descifrado en sistemas multinúcleo.

    john --fork=2 /home/labex/project/passwords.txt --wordlist=/home/labex/project/wordlist.txt --format=sha512crypt

    Esto intentará descifrar contraseñas utilizando 2 núcleos de CPU.

  4. --mask: Esta opción le permite realizar ataques de máscara, donde define un patrón específico para la contraseña. Por ejemplo, ?l?l?l?d?d probaría todas las combinaciones de 3 letras y 2 dígitos.

    ## Este comando se ejecutará durante mucho tiempo, así que solo demostraremos su uso.
    ## NO lo deje ejecutándose demasiado tiempo. Presione Ctrl+C para detenerlo después de unos segundos.
    john --mask=?l?l?l?d?d /home/labex/project/passwords.txt --format=raw-md5

    Este comando intenta descifrar contraseñas que se ajustan a la máscara especificada.

Estas son solo algunas de las muchas opciones avanzadas disponibles en John the Ripper. Explorar la página man john o john --help revelará aún más posibilidades para tareas especializadas de auditoría y descifrado de contraseñas.

Resumen

En este laboratorio, ha adquirido experiencia práctica con varias opciones avanzadas de línea de comandos para John the Ripper. Aprendió a especificar formatos de hash con precisión usando --format, aplicar transformaciones potentes a listas de palabras con --rules y archivos de reglas personalizados, y gestionar sesiones de descifrado de larga duración usando --session y --restore. Además, exploró la versatilidad de --stdout para generar listas de palabras personalizadas y abordó brevemente otras banderas útiles como --show, --incremental, --fork y --mask.

Dominar estas opciones mejorará significativamente su capacidad para realizar auditorías y descifrados de contraseñas efectivos, haciéndole más competente en el uso de John the Ripper para diversas tareas de seguridad. Continúe explorando la extensa documentación de John para descubrir aún más características y técnicas avanzadas.