Continuamos con la serie de una de las herramientas más utilizada a la hora de auditar
contraseñas si es la primera vez que ves esto te recomiendo ver la parte 1 de John.
Ya que cubro términos y sintaxis básica requeridas para que puedas comprender mejor cómo funciona John,
lo podrás consultar aquí.
Continuaremos esta segunda parte rompiendo hashes de los sistemas operativos Windows y Linux.
Hashes de autenticación de Windows
El NT Hash ó también conocido comúnmente como NTLM (New Technology Lan Manager) que hace referencia a la versión
anterior ("LM") del formato que Windows utilizaba. A partir de sistemas Windows 2008/Vista se usa por defecto NTLM
(aunque por compatibilidad se puede seguir haciendo uso de LM).
Las máquinas modernas con sistema operativo Windows
almacenarán las contraseñas de usuario en en la misma base de datos del fichero SAM (Security Account Manager).
Veamos el siguiente ejemplo:
F8096B866B26E76192DFF5E080C8A172
Una de las ventajas de John es que cuenta con una gran variedad de formatos hashs así que solo tenemos que
pasarle en el formato NTLM en el tipo de hash que va a romper. en este caso es NT
root@ip-10-10-230-147:~# john --format=NT --wordlist=wordlist.txt hash_ntlm.txt
Using default input encoding: UTF-8
Loaded 1 password hash (NT [MD4 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
Warning: Only 7 candidates left, minimum 24 needed for performance.
kolibers (?)
1g 0:00:00:00 DONE (2021-09-01 03:15) 100.0g/s 700.0p/s 700.0c/s 700.0C/s password..kolibers
Use the "--show --format=NT" options to display all of the cracked passwords reliably
Session completed.
root@ip-10-10-230-147:~#
Como podemos ver la contraseña es la palabra "kolibers".
Hashes de Linux
Para poder romper un hash de Linux necesitaremos dos archivos importantes el /etc/shadow y el /etc/passwd.
Los hashes en una máquina Linux por defecto se guardan en el archivo /etc/shadow el cual también almacena
otra información, como la fecha del último cambio de contraseña y la información de caducidad de la contraseña.
Contiene una entrada por línea para cada usuario o cuenta de usuario del sistema.
El /etc/passwd que almacena información importante requerida durante el inicio de sesión como ID de usuario,
ID de grupo, directorio de inicio, shell y más.
Primero utilizaremos la herramienta unshadow
integrada con John,
ésta herramienta combina el archivo passwd y el archivo shadow, para que John pueda comprender los datos que se
le están dando.
Utilizaremos solo las líneas necesarias para cada archivo así se verían:
root:x:0:0::/root:/bin/bash
ARCHIVO 2 /etc/shadow
root:$6$2nwjN454g.dv4HN/$m9Z/r2xVfweYVkrr.v5Ft8Ws3/YYksfNwq96UL1FX0OJjY1L6l.DS3KEVsZ9rOVLB/ldTeEL/OIhJZ4GMFMGA0:18576::::::
Hacemos uso de la herramienta
unshadow
con la siguiente sintaxis:root@ip-10-10-230-147:~# unshadow passwd.txt shadow.txt > unshadow_linux.txt
Redireccionamos el resultado a un nuevo archivo el cual le pasaremos a John con el tipo de formato de hash sha512crypt que va a utilizar.root@ip-10-10-230-147:~# john --wordlist=/usr/share/wordlists/rockyou.txt --format=sha512crypt unshadow_linux.txt
Loaded 1 password hash (sha512crypt, crypt(3) $6$ [SHA512 256/256 AVX2 4x])
Cost 1 (iteration count) is 5000 for all loaded hashes
Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
1234 (root)
1g 0:00:00:00 DONE (2021-09-01 03:35) 1.666g/s 2133p/s 2133c/s 2133C/s kucing..poohbear1
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
Ahora tenemos la contraseña "1234" para el usuario Linux.Hasta ahora hemos utilizado un ataque de diccionario para romper los diferentes formatos hash, pero qué podemos hacer si no contamos con una lista de palabras pues bien hay otros 2 modos que me gustaría mencionar el "Single mode" y el "Incremental mode".
"Single Mode"
Este modo de John usa solo la información proporcionada en el nombre de usuario para tratar de encontrar posibles contraseñas cambiando ligeramente las letras y números contenidos en el nombre de usuario.Imaginemos que tenemos el siguiente nombre de usuario; Kolibers las posibles contraseñas serian:
- Kolibers1, Kolibers2, Kolibers3 (etc.)
- KOlibers, KOLibers, KOLIbers (etc.)
- Kolibers!, Kolibers$, Kolibers* (etc.)
Tenemos nuestro hash:
B8E34F8CB2A3AAF59560435475E30975074FC0D64591CF53FFD940D48F4D86B
Cambiaria de esta forma:
Kolibers:B8E34F8CB2A3AAF59560435475E30975074FC0D64591CF53FFD940D48F4D86B
Utilizamos el parámetro
—single
para indicarle que use el modo single y le decimos el tipo de formato hash a romper.
root@ip-10-10-197-195:~# john --single --format=Raw-SHA256 hash_kolibers.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
Warning: Only 6 candidates buffered for the current salt, minimum 16 needed for performance.
kolibers2021 (Kolibers)
1g 0:00:00:00 DONE (2021-09-01 08:05) 20.00g/s 17200p/s 17200c/s 17200C/s kolibers2007..kolibers2022
Use the "--show --format=Raw-SHA256" options to display all of the cracked passwords reliably
Session completed.
Como podemos ver la contraseña es "Kolibers2021".
Este modo también permite crear nuestras propias reglas de alteración de palabras, así como longitud máxima, mínima, números, caracteres especiales etc.Modo incremental
John The Ripper permite también utilizar el modo “Incremental”, que es similar a realizar un ataque por fuerza bruta usando todas las combinaciones posibles de un conjunto de caracteres para la construcción de posibles contraseñas. Dado que las posibilidades son realmente grandes, este tipo de modo nunca finalizará, siendo desde luego el más complejo. Podemos listar los tipos de modo incremental que vienen por defecto en John por ejemplo:alpha
utiliza todas las letras del alfabeto y digits
todos los números del 0-9.
root@ip-10-10-197-195:~# john --list=incremental
Subsections of [incremental]:
digits
upper
lower
lowerspace
uppernum
lowernum
alpha
alnum
alnumspace
lanman
lm_ascii
ascii
latin1
utf8
custom
Hacemos uso del parámetro —incremental=
para indicarle a John el modo incremental y ascii
para utilizar todo el código ASCII.root@ip-10-10-197-195:~# john --incremental=ascii --format=Raw-SHA256 koliber.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
0g 0:00:00:12 0g/s 7509Kp/s 7509Kc/s 7509KC/s tocm96..tw453j
koliber (?)
1g 0:00:00:14 DONE (2021-09-01 08:25) 0.07017g/s 8662Kp/s 8662Kc/s 8662KC/s kors183..konky33
Use the "--show --format=Raw-SHA256" options to display all of the cracked passwords reliably
Session completed.
Y la contraseña es "koliber".Otro ejemplo es el siguiente, en donde sabemos que la contraseña son solopuros números, usamos el parámetro
—incremental=digits
con el valor digits
para que John haga todas las combinaciones posibles.root@ip-10-10-197-195:~# john --incremental=digits --format=Raw-SHA256 numbers.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
123456789 (?)
1g 0:00:00:00 DONE (2021-09-01 08:27) 9.090g/s 297890p/s 297890c/s 297890C/s 12345..222014
Use the "--show --format=Raw-SHA256" options to display all of the cracked passwords reliably
Session completed.
La contraseña es este caso es "123456789".Hemos elegido hashes fáciles de resolver para poder demostrar el uso de este modo pero recuerda que John intentara hacer todas las posibles combinaciones lo que consumirá recursos y tiempo. Sin embargo, para limitar un poco las combinaciones podemos establecer algunas variables, al igual que el modo single podemos crear nuestras propias reglas , como longitud mínima y máxima de la contraseña, caracteres especiales, números etc.
Conclusión
John The Ripper es una de las herramientas más poderosas, versátil y más utilizadas en ciberseguridad, sin duda una herramienta que debes tener en tu arsenal y esta serie de artículos fueron pensados para darte una buena introducción y un poco de conocimiento sobre John recuerda que puedes consultar la documentación oficial aquí.
Nos vemos en el siguiente artículo.
Escrito Por:
David Islas
Security Engineer