Original article: https://www.freecodecamp.org/news/crack-passwords-using-john-the-ripper-pentesting-tutorial/

Si eres un pen-tester, descifrar contraseñas es algo que estarás haciendo en el día a día. Esto puede incluir contraseñas de inicio de sesión, contraseñas de archivo, y casi cualquier cosa que esté protegido usando una contraseña.

John the Ripper (JtR) es una herramienta popular para descifrar contraseñas. John soporta muchas tecnologías de encriptación para Windows y sistemas de Unix (inluido Mac).

Una característica notable de John es que puede autodetectar la encriptación para formatos comunes. Esto te ahorrará mucho tiempo en investigar los formatos hash y encontrar la herramienta correcta para descifrarlos.

John es también una herramienta basada en diccionario. Esto significa que funciona con un diccionario de contraseñas comunes para comprarlo con el hash a mano. Aquí hay una lista de contraseñas comunes llamada rockyout.txt.

Mientras puedas usar listas de palabras populares como RockYou, John también tiene su propio conjunto de listas de palabras con miles de contraseñas comunes. Esto hace a John muy efectivo cuando se descifre sistemas con contraseñas débiles.

Así es cómo John funciona por defecto:

  • reconocer el tipo de hash del hash actual
  • genera hashes en el momento/al vuelo para todas las contraseñas en el diccionario
  • se detiene cuando un hash generado coincide con el hash actual

Esta es la única forma en que John encuentra una contraseña. También puedes personalizar a John basado a tus requerimientos. Por ejemplo, puedes especificar el formato de la contraseña usando la bandera --format.

En este artículo, primero instalaremos John seguido de un recorrido de los diferentes modos que puedes usar. Luego usaremos John para descifrar contraseñas para tres diferentes casos de uso – una contraseña de Windows, una contraseña de Linux, y una contraseña de un archivo zip.

Un recordatorio rápido antes de que comencemos: no uses esta herramienta para propósitos nefastos. Esto está destinado para que sea un tutorial educacional para ayudarte a protegerte a ti mismo y a tus clientes o equipo de ataques de contraseñas. ¡Usa esta información con responsabilidad y con toda seguridad!

Manos a la obra.

Cómo instalar John the Ripper

Si estás usando Kali Linux, John es preinstalado. Puedes usar John escribiendo el siguiente comando:

$ john

Para Ubuntu/Debian, puedes obtener John desde la fuente apt. Este es el comando para instalar John en Ubuntu:

$ apt install John

En Mac, puedes encontrar John en Homebrew:

$ brew install john

Para Windows y otros Sistemas Operativos, puedes encontrar los binarios aquí.

Una vez que hayas instalado John, prueba el comando help para asegurarte que tu instalación esté funcionando. El comando help puede ser usado también como una referencia cuando se trabaja con John.

$ john -h

Esta es la salida del comando help:

image-89
Comando help de John 

Cómo usar John the Ripper

Ahora que sabemos qué es John, miremos tres modos que te ofrece. Estarás usando uno de estos tres para la mayoría de tus casos de usos:

  • Modo de descifrado simple
  • Modo lista de palabras
  • Modo Incremental

Miremos a cada uno en detalle.

¿Qué es el Modo de Descifrado Simple?

En modo de descifrado simple, John toma una cadena y genera variaciones de esa cadena para generar un conjunto de contraseñas.

Por ejemplo, si nuestro nombre de usuario es "stealth" y la contraseña es "StEaLtH", podemos usar el modo simple de John para generar variaciones de contraseña (STEALTH, Stealth, STealth, y así sucesivamente).

Usamos la bandera "formato" para especificar el tipo hash y la bandera "single" para hacer saber a John que queremos usar el modo de descifrado simple. También crearemos una archivo crack.txt el cual contendrá el nombre de usuario y el valor de hash de la contraseña.

stealth:d776dd32d662b8efbdf853837269bd725203c579

Ahora podemos usar el siguiente comando para usar el modo de descifrado simple de John:

$ john --single --format=raw-sha1 crack.txt

Y aquí está el resultado. Puedes ver que John ha encontrado la contraseña correcta “StEaLtH” con éxito.

image-90
Mode de descifrado simple de John

Eso fue divertido, ¿no? Ahora miremos al modo diccionario para descifrar contraseñas más complicadas.

¿Qué es Modo Diccionario?

En modo diccionario, proveeremos a John una lista de contraseñas. John les generará hashes en el momento y los comparará con nuestro hash de contraseña.

Para este ejemplo, usaremos la lista de palabras RockYou. Si estás usando Kali, puedes encontrarlo en /usr/share/wordlists/rockou.txt. También tendremos un archivo crack.txt con el hash de la contraseña solamente.

edba955d0ea15fdef4f61726ef97e5af507430c0

Este es el comando para ejecutar John en modo diccionario usando la lista de palabras.

$ john --wordlist=/usr/share/wordlists/rockyou.txt --format=raw-sha1 crack.txt

Y John encuentra la contraseña bastante rápido.

image-91
Modo lista de palabras de John

Cuanto más débil sea la contraseña, más rápido lo puede encontrar John. Por eso siempre se recomienda tener contraseñas fuertes.

¿Qué es el Modo Incremental?

El modo incremental es el modo más poderoso provisto por John. Prueba todas las combinaciones de caracteres posibles como contraseñas.

Esto suena genial, pero hay un problema. El descifrado puede llevar bastante tiempo si la contraseña es demasiado larga o si es una combinación de caracteres alfanuméricos y símbolos.

Raras veces usarás este modo a menos que no tengas otra opción. En casos típicos, una combinación de ataques de Ingeniería Social y modo de lista de palabras te ayudará a descifrar la mayoría de los hashes.

Si te gustaría intentar el modo incremental, esta es la sintaxis.

$ john -i:digits passwordfile.txt

Aquí, la bandera -i le dice a John que queremos usar el modo incremental. El marcador de posición "digits" puede ser usado para establecer el número máximo de dígitos en la contraseña.

También puedes agregar la opción "format" para que le sea más fácil a John empezar a descifrar.

Casos de Uso para John the Ripper

Ahora que entiendes los diferentes modos de John, miremos a unos pocos casos de uso.

Usaremos John para descifrar tres tipos de hashes: una contraseña de Windows NTLM, una contraseña alternativa de Linux, y la contraseña para un archivo zip.

Cómo Descifrar una Contraseña de Windows

Comencemos con Windows. En Windows, los hashes de contraseña están almacenados en la basebase de datos SAM. SAM usa el formato de hash LM/NTLM para las contraseñas, así que estaremos usando John para descifrar una.

Obtener contraseñas de la base de datos SAM está fuera del alcance para este artículo, pero asumamos que has adquirido un hash de contraseña para un usuario de Windows.

Este es el comando para descifrarlo:

$ john --format=lm crack.txt

El crack.txt contendrá el hash de la contraseña. Si John no es capaz de descifrar la contraseña usando su lista de palabras por defecto, puedes usar la lista de palabras RockYou usando la bandera --wordlist.

Cómo descifrar una Contraseña de Linux

Ahora, vamos a descifrar una contraseña de Linux. En Linux, hay dos archivos importantes guardados en la carpeta /etc: passwd y shadow.

  • /etc/passwd -> almacena información como nombre de usuario, id de usuario, shell de inicio de sesión, y así sucesivamente.
  • /etc/shadow -> contiene hash de contraseñas, expiración de contraseñas, y así sucesivamente.

Además del comando "john", John viene con un par de otras utilidades. Uno de ellos se llama "unshadow".

El comando unshadow combina los archivo passwd y shadow juntos en un solo archivo. Esto después puede ser usado por John para descifrar contraseñas.

Así es como usamos el comando unshadow:

$ unshadow /etc/passwd /etc/shadow > output.db

Este comando combinará los archivos juntos y creará un archivo output.db. Ahora podemos descifrar el archivo output.db usando John.

$ john output.db

John intenta encontrar la contraseña para todos los usuarios en el archivo passwd y genera la salida con la lista de contraseñas descifradas. De nuevo, puedes usar listas de palabras personalizadas con la bandera --wordlist.

Cómo descifrar una Contraseña de un archivo Zip

Finalmente, vamos a descifrar una contraseña de un archivo zip. Para hacer eso, primero tenemos que obtener el hash de la contraseña del archivo zip.

Como unshadow, John tiene otra utilidad llamado zip2john. zip2john nos ayuda en obtener el hash de los archivos zip. Si estás descifrando un archivo .rar, puedes usar la utilidad rar2john.

Esta es la sintaxis para obtener el hash de la contraseña de un archivo zip:

$ zip2john file.zip > zip.hashes

El comando de arriba obtendrá el hash de un archivo zip y lo almacenará en el archivo zip.hashes. Luego puedes usar John para descifrar el hash.

$john zip.hashes

John también tiene muchas otras funcionalidades que te ayudarán a descifrar una variedad de contraseñas. Puedes encontrar la documentación completa para John aquí.

Cómo defenderse de ataques de contraseña

Hasta ahora hemos visto cómo descifrar contraseñas con John the Ripper. Pero, ¿cómo nos defendemos de estos tipos de ataques de fuerza bruta?

La forma más sencilla para defenderse de ataques de contraseñas es estableciendo una contraseña fuerte. Cuánto más fuerte es la contraseña, más difícil es descifrarlo.

El segundo paso es dejar de usar las mismas contraseñas en múltiples sitios. Si un sitio es hackeado, tu contraseña será expuesta al internet. Un hacker luego puede usar la combinación email/contraseña para probar tus credenciales en otros sitios. Puedes verificar si tu contraseña está en el internet aquí.

El paso final sería generar contraseñas aleatorias y usar un gestionador de contraseñas. Hay una variedad de opciones, incluyendo la extensión Google password manager de Chrome. Si usas una contraseña fuerte para cada sitio que usas, se vuelve extremadamente difícil de descifrar tus contraseñas.

Resumen

John es una herramienta de descifrado de contraseñas poderoso y popular. Frecuentemente, es usado tanto por pen-testers y hackers de sombrero negro por su versatilidad y facilidad de uso.

De descubrimiento de hash automatizado a ataques basado en diccionario, John es una herramienta fantástica para tener en tu caja de herramientas de pentesting.

Espero que este artículo te haya ayudado a entender John the Ripper en detalle. Puedes contactarme aquí o visita mi blog aquí.