domingo, 23 de septiembre de 2018

Descifrar hashes de contraseñas con "John the Ripper"





La mayoría de los sistemas no almacenan en texto plano; en su lugar almacenan hashes que son utilizados al realizar la autenticación, si los hashes coinciden la autenticación es exitosa.
Los hashes de contraseñas se almacenan con distintos cifrados según el sistema utilizado.

El descifrado consiste generalmente en tomar una lista de palabras y compararlas con el hash a descifrar. En ocasiones los hashes se componen no solo de listas de palabras sino de forma aleatoria se mezclan con contraseñas públicas pudiendo hacer difícil descifrarlas (salt).

Para realizar la PoC vamos a utilizar una gran herramienta llamada John the Ripper ya que puede realizar ataques con diccionario o de fuerza bruta, además de ser rápida y gratuita.



Preparación


De donde obtener hashes

En primer lugar debemos obtener algunos hashes de contraseñas, en este caso son los obtenidos de un ataque SQLi a DVWA.

Otras fuentes

Con la herramienta openssl disponible en sistemas Linux podemos generar nuestros propios hash de contraseña

uso de openssl
Otra forma de obtener hashes es el desafío de KoreLogic 2012, los archivos del concurso de crackeo se pueden encontrar aquí.

John the Ripper

La herramienta propia de crackeo la tenemos disponible en Kali Linux pero también podemos descargarla


Obtención de la "wordlist"

Existen listas de palabras en la distribución de Kali Linux.
  • Lista básica de palabras de John the Ripper con un total de 3,559 palabras. están las contraseñas mas comunes del idioma inglés
  • Wordlist rockyou disponible en el directorio /usr/share/wordlist/  con algunas otras. Es necesario descomprimirlo
  • La gran lista de Crackstation, contiene 1.493.677.782 palabras
La elección dependerá del hash que obtengamos.


Uso de John the Ripper

Como he dicho anteriormente voy a utilizar los hash obtenidos de DVWA.

hashes obtenidos

Los guardamos en un .txt de la siguiente manera

hashes txt

Ahora ejecutamos la herramienta John the Ripper, se va a utilizar la wordlist de contraseñas mas comunes; después pasará al modo incremental

$ john --format=raw-MD5 hashes_dvwa.txt




Verificar el estado

Mientras la herramienta se está ejecutando, se puede presionar cualquier tecla (intro) para visualizar una salida del estado. O para verificar desde otra terminal john --status. La salida se verá así:



  1. Tipo de cifrado
  2. Número de conjeturas de contraseña exitosas
  3. Tiempo trascurrido desde el comienzo
  4. Porcentaje completado para ese pase
  5. Paso actual / número de pases totales
  6. g / s = conjeturas exitosas por segundo
  7. p / s = contraseñas probadas por segundo
  8. c / s = criptas (hashes) calculados por segundo
  9. C / s = criptas (hashes) probados por segundo
  10. La palabra que está intentando actualmente


MODOS de John the Ripper

John tiene tres modos para intentar descifrar los hash. Si no se indica el modo usará los 3.

Para obtener información detallada de los modos visita OpenWall.


{1} Single Crack

Este modo intenta manipular el nombre de usuario y probarlo como la contraseña, por ejemplo si el nombre de usuario es "Luis" probaría las siguientes contraseñas:

Luis
LUIS
luisn1
Luis=
luis
...


Utiliza las lista de palabras incluida en en John the Ripper, intenta con cientos de variaciones del nombre en todos los  hashes del archivo. Es una manera muy rápida de descifrar un hash y a veces funciona muy bien.

Para usar este modo:

$ john --single hashes.txt


{2} Modo Wordlist

Utiliza una lista de palabras para asignar un hash a cada una y comparar el hash de la contraseña. Si no se indica una lista John utiliza la que tiene incluida de aproximadamente 3.500 palabras, que son las contraseñas mas comunes que se ven en los volcados.


Para usar este modo:

$ john --wordlist=password.lst hashes.txt

{3} Modo Incremental

Este modo es un estilo a un ataque de fuerza bruta, probando cada combinación posible. Este modo jamas terminará ya que va probando  longitudes cada vez mas altas.

Para probar el modo incremental:

$ john --incremental hashes.txt


Reglas de manipulación de palabras

John tiene la capacidad de coger una lista de palabras y crear variaciones de la misma agregando números y reemplazando letras con otros símbolos aleatorios. Por ejemplo si la lista de palabras contiene "Garcia", con la opción "rules" habilitada probará una combinación de cientos de palabras a partir de "Garcia".

Simplemente hay que poner la opción --rules al invocar a John. Las reglas de manipulación por defecto suelen ser efectivas pero se puede cambiar la manera con la que se realizan las variaciones.
Para mas información visitar la página de OpenWall.

Además se pueden ver las reglas que se utilzaron en KoreLogic.


Ultimo ejemplo

Para utilizar una wordlist mas amplia, solo con cifrado DES y la manipulación de reglas activa, se puede usar el siguiente comando:

$ john --format:descrypt --wordlist=crackstation-human-only.txt --rules hashes.des.txt



Recursos


http://www.openwall.com/john/doc/

http://www.openwall.com/john/doc/EXAMPLES.shtml