¿Qué es John The Ripper?
John The Ripper es una herramienta de código abierto para la recuperación y auditoría de seguridad en contraseñas, además de ser multiplataforma, es el más utilizado y versátil ya que combina una velocidad de “craqueo” rápida, con una extraordinaria gama de tipos de hash compatibles. Para poder utilizar la herramienta primero debemos cubrir algunos términos y conceptos básicos.
¿Qué es un hash?
La función hash toma como entrada un dato que puede ser un texto o un archivo y produce un cadena de caracteres de tamaño fijo, el tamaño depende el algoritmo que se emplee por ejemplo MD5 es de: 128 bits y SHA2 es de 224 bits.
Cualquier pequeño cambio en los datos de entrada (incluso un solo bit) debería causar un gran cambio en la salida. Hay muchos tipos de algoritmos hash, pero los mas populares son MD4, MD5, SHA1, SHA2 y NTLM (MD4, MD5 y SHA1 ya no son considerados seguros). SHA2 y NTLM (MD4, MD5 y SHA1 ya no son considerados seguros). El más recomendado en la actualidad es SHA2 en su versión SHA256. Te mostraré esto con un ejemplo:
Si tomamos una cadena de caracteres, y la ejecutamos a través de un algoritmo hash SHA2, obtenemos una salida de: 044c0220bdf502427be1db8075afb1e3a988f6e268a16decde739164a9357372
un hash SHA256 estándar de 64 caracteres.
Del mismo modo, si tomamos kolibers-group, una cadena de 14 caracteres, y la ejecutamos mediante el mismo algoritmo de hash MD5, obtenemos una salida de: 1532365c6fc36eb4882c82a8f4f0f54427436af5d2a12ebbfbd4cef52f38910e
otro hash SHA256 estándar de 64 caracteres.
Ahora si quisiéramos regresar del hash al dato original resultaría prácticamente imposible, esa es una de las características principales de un algoritmo de hash.
Usos del hash
Y porque debería importarme esto, bueno el hash se utiliza para dos propósitos principales en ciberseguridad para verificar la integridad de los datos, o para verificar contraseñas.
En el caso de verificar constraseñas déjame explicarte como funciona:
La mayoría de las aplicaciones web necesitan verificar la contraseña de un usuario en algún momento. Almacenar estas contraseñas en texto plano sería una mala practica, probablemente hayas visto noticias sobre empresas a las que se les ha filtrado su base de datos, algunas personas, usan la misma contraseña para todo, incluido su banco, por lo que la filtración sería realmente mala. Tampoco se podrían cifrar, ya que alguien que tenga acceso a la llave de cifrado (administradores o atacantes) podrían obtener todas las contraseñas almacenadas.
Aquí es donde entra el hash. ¿Qué pasaría si, en lugar de almacenar la contraseña, simplemente almacena el hash? Esto significa que nunca se tendría que almacenar la contraseña del usuario, y si se filtra la base de datos, un atacante tendría que comparar todos los hashes contra un diccionario para averiguar cuál era la contraseña. Eso suena bastante útil.En otros artículos tocaremos el tema de salt y algoritmos lentos para asegurar las contraseñas.
Aquí entra John...
Aunque los algoritmos de hash son muy dificiles de revertir. Eso no significa los hashes sean infalibles.Si tienes el algoritmo empleado y la cadena final, ejemplo:
Hash: SHA256
Cadena: 044c0220bdf502427be1db8075afb1e3a988f6e268a16decde739164a9357372
Lo que puedes hacer es tomar el diccionario y “hashear” todas las palabras de esta forma podrías deducir que el password empleado en este caso es: otorrinolaringologo.
Este proceso es un ejemplo del tipo denominado ataque de diccionario y John the Ripper, o John, es una herramienta que le permite realizar este tipo de ataques, así como de fuerza bruta en una gran variedad de diferentes tipos de hash. Vamos a la practica para que veas como funciona la herramienta.
Instalación
John the Ripper es compatible con muchos sistemas operativos:si esta utilizando Parrot o Kali ya debería tenerlo instalado en el sistema. lo puedes verificar escribiendo
John
en la terminal, si no es así puede intentar sudo apt install john
para instalarlo.Windows:
En Windows, solo necesita descargar e instalar el binario comprimido para sistemas de 64 bits o para sistemas de 32 bits aquí.construyendo desde el código fuente para Linux y Mac:
Puedes checar todo el procedimiento de la instalación aquí.Sintaxis básica de John
Hay varias formas de usar John para descifrar hashes simples, pero antes necesitamos dos cosas primero una lista de palabras diccionario o wordlist en estos ejemplos usaremos la famosa wordlist rockyou.txt, lo otro que necesitamos es identificar el tipo de hash a "craquear" si bien john puede deducir que tipo de hash, seria más rápido si ya le pasamos el tipo de hash, para eso usaremos una herramienta en Phyton llamada hash-id.py Para utilizarla, puede simplemente traer el archivo de Python desde gitlab usando:
wget https://gitlab.com/kalilinux/packages/hash-identifier/-/raw/kali/master/hash-id.py
después, simplemente ejecútalo python3 hash-id.py
y luego ingresa el hash que está tratando de identificar y te mostrará los tipos de hashes más probables, dándote más opciones si el primero falla. Una vez identificado el hash con el que está tratando, puedes decirle a John que lo use mientras descifra el hash proporcionado usando la siguiente sintaxis:
sudo john --format=[format] --wordlist=[path to wordlist] [path to file]
--format=
Es la bandera para decirle a John que use el siguiente formato para descifrar el hash. [format]
El formato en el que está el hash. --wordlist=
Especifica el uso del modo de lista de palabras, leyendo del archivo que proporcionas en la siguiente ruta.[path to wordlist]
La ruta a la lista de palabras que está usando. [path to file]
El archivo que contiene el hash que está intentando descifrar, si está en el mismo directorio, no necesitará nombrar una ruta, solo el archivo.**Nota
Cuando le estás diciendo a John que formatos usar, si estás tratando con un tipo de hash estándar, por ejemplo md5, debes anteponerle
raw-
para decirle a John que solo está tratando con un tipo de hash estándar, aunque esto no siempre se aplica. Para verificar si necesita agregar el prefijo o no, puede enumerar todos los formatos de John usando john --list=formats
y verificar manualmente o grep para su tipo de hash usando algo como john --list=formats | grep "md5"
.
Rompiendo hashes básicos
Ahora si vamos a la practica, vamos a craquear el siguiente hash:
2e728dd31fb5949bc39cac5a9f066498
Primero identificaremos el tipo de hash que es:
root@kali:~# python3 hash-id.py
#########################################################################
# __ __ __ ______ _____ #
# /\ \/\ \ /\ \ /\__ _\ /\ _ `\ #
# \ \ \_\ \ __ ____ \ \ \___ \/_/\ \/ \ \ \/\ \ #
# \ \ _ \ /'__`\ / ,__\ \ \ _ `\ \ \ \ \ \ \ \ \ #
# \ \ \ \ \/\ \_\ \_/\__, `\ \ \ \ \ \ \_\ \__ \ \ \_\ \ #
# \ \_\ \_\ \___ \_\/\____/ \ \_\ \_\ /\_____\ \ \____/ #
# \/_/\/_/\/__/\/_/\/___/ \/_/\/_/ \/_____/ \/___/ v1.2 #
# By Zion3R #
# www.Blackploit.com #
# Root@Blackploit.com #
#########################################################################
--------------------------------------------------
HASH: 2e728dd31fb5949bc39cac5a9f066498
Possible Hashs:
[+] MD5
[+] Domain Cached Credentials - MD4(MD4(($pass)).(strtolower($username)))
Least Possible Hashs:
[+] RAdmin v2.x
[+] NTLM
[+] MD4
[+] MD2
[+] MD5(HMAC)
--------------------------------------------------
como podemos ver es un MD5, ahora le pasaremos eso a nuestro john con la siguiente sintaxis:
root@kali:~# sudo john --format=Raw-MD5 --wordlist=/usr/share/wordlists/rockyou.txt hash1.txt
Created directory: /root/.john
Using default input encoding: UTF-8
Loaded 1 password hash (Raw-MD5 [MD5 256/256 AVX2 8x3])
Warning: no OpenMP support for this hash type, consider --fork=2
Press 'q' or Ctrl-C to abort, almost any other key for status
biscuit (?)
1g 0:00:00:00 DONE (2021-08-05 05:56) 50.00g/s 134400p/s 134400c/s 134400C/s skyblue..nugget
Use the "--show --format=Raw-MD5" options to display all of the cracked passwords reliably
Session completed
y hemos descifrado el valor del hash que como lo muestra la salida de john es biscuit. Ahora intentemos con otro:
D7F4D3CCEE7ACD3DD7FAD3AC2BE2AAE9C44F4E9B7FB802D73136D4C53920140A
Como ya lo mencionamos continuaremos con nuestra metodología, identificando primero que tipo de hash es:
root@kali:~# python3 hash-id.py
#########################################################################
# __ __ __ ______ _____ #
# /\ \/\ \ /\ \ /\__ _\ /\ _ `\ #
# \ \ \_\ \ __ ____ \ \ \___ \/_/\ \/ \ \ \/\ \ #
# \ \ _ \ /'__`\ / ,__\ \ \ _ `\ \ \ \ \ \ \ \ \ #
# \ \ \ \ \/\ \_\ \_/\__, `\ \ \ \ \ \ \_\ \__ \ \ \_\ \ #
# \ \_\ \_\ \___ \_\/\____/ \ \_\ \_\ /\_____\ \ \____/ #
# \/_/\/_/\/__/\/_/\/___/ \/_/\/_/ \/_____/ \/___/ v1.2 #
# By Zion3R #
# www.Blackploit.com #
# Root@Blackploit.com #
#########################################################################
--------------------------------------------------
HASH: D7F4D3CCEE7ACD3DD7FAD3AC2BE2AAE9C44F4E9B7FB802D73136D4C53920140A
Possible Hashs:
[+] SHA-256
[+] Haval-256
Least Possible Hashs:
[+] GOST R 34.11-94
[+] RipeMD-256
[+] SNEFRU-256
[+] SHA-256(HMAC)
[+] Haval-256(HMAC)
[+] RipeMD-256(HMAC)
[+] SNEFRU-256(HMAC)
[+] SHA-256(md5($pass))
[+] SHA-256(sha1($pass))
--------------------------------------------------
Vemos que es un algoritmo SHA-256, y le pasamos esa información a nuestro john:
root@kali:~# sudo john --format=Raw-SHA256 --wordlist=/usr/share/wordlists/rockyou.txt hash2.txt
Using default input encoding: UTF-8
Loaded 1 password hash (Raw-SHA256 [SHA256 256/256 AVX2 8x])
Warning: poor OpenMP scalability for this hash type, consider --fork=2
Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
microphone (?)
1g 0:00:00:00 DONE (2021-08-05 06:18) 33.33g/s 3276Kp/s 3276Kc/s 3276KC/s ryanscott..Donovan
Use the "--show --format=Raw-SHA256" options to display all of the cracked passwords reliably
Session completed
Listo ha descifrado otro hash ahora este con el valor microphone.
Conclusión
Hemos cubierto la parte introductoria a esta gran herramienta, pero eso no es todo aun hay más modos y funciones que podemos usar con John, pero no te preocupes en la parte 2 de este articulo estaremos cubriendo aspectos más avanzados así que no te olvides de seguirnos en nuestras redes sociales y estar al pendiente de las notificaciones. Nos vemos en una siguiente edición.
Escrito Por:
David Islas
Security Engineer