En otro artículo comentaré el proceso y técnicas para realizar Passwords cracking de hashes NTLM ntds.dit de Active Directory en sistemas Windows.

En esta ocasión para poder llevar a cabo un ataque por fuerza bruta, diccionario o Rainbow tables a los hashes de contraseñas de sistemas Linux. Es necesario obtener un acceso root para copiar o volcar el contenido de los ficheros /etc/passwd y /etc/shadow.

Si tenemos acceso físico a la máquina o un entorno de hipervisor donde podemos elevarnos a root abriendo una terminal usando Grub, explotar una vulnerabilidad que nos permita conseguir acceso con root o en una fase de post-explotación crear un usuario y hacerlo miembro del grupo sudo o colocarlo en /etc/sudoers.

Extracción de los ficheros /etc/passwd y /etc/shadow Link to heading

Una vez accedido al sistema como root. Podemos realizar la extracción de los ficheros /etc/passwd y /etc/shadow. Podríamos copiarlos a una unidad externa USB.

Requiere privilegios root

Para volcar los hashes de /etc/shadow necesitas privilegios root. /etc/passwd es de lectura mundial pero ya no contiene los hashes (sustituidos por x desde hace décadas); los hashes reales viven en shadow con permisos 640 root:shadow.

fdisk -l                          # Vemos los discos conectados al sistema
mkdir /mnt/usb                    # Creamos directorio para montar la unidad USB
mount -t vfat /dev/sda1 /mnt/usb/    # Montamos la unidad USB
df -h                            # Nos aseguramos de que está montado
cp /etc/passwd /mnt/usb/passwd.txt   # Copia del fichero /etc/passwd
cp /etc/shadow /mnt/usb/shadow.txt   # Copia del fichero /etc/shadow
umount /mnt/usb                   # Desmontamos la unidad USB

Si en el momento de desmontar la unidad USB nos muestra un mensaje del tipo umount: /mnt/usb: device is busy. Podemos ver que proceso está siendo usado para /mnt/usb, finalizarlo e intentar desmontar nuevamente la unidad.

fuser -vm /mnt/usb

# Ver los procesos existentes.
fuser -k /mnt/usb

# Matar los procesos existentes.
umount /mnt/usb

# Desmontar la unidad (forzar con el argumento -l).

unshadow: Combinar los ficheros passwd y shadow Link to heading

Una vez conseguidos ambos ficheros y volcados en una máquina controlada y aislada sin riesgo a ser bloqueados o detectados, podemos tomarnos más tiempo para el proceso de descifrado de passwords.


# tail -n 3 /etc/passwd
pepe:x:1005:1005::/home/pepe:/bin/bash
maria:x:1006:1006::/home/maria:/bin/bash
admin:x:1007:1007::/home/admin:/bin/bash

# tail -n 3 /etc/shadow
pepe:$6$yQVL/XM8/ZZ9S2IR$yOiJozomFYVYkdeOiXO7OGrceqiVdc6aBeb9yO4QnW.DiQQf9yEBKtm8J4F0Vu2JDXwIJtTKWfUyqMoqKqDNv/:18420:0:99999:7:::
maria:$6$2t4URKFkY/8Maj.I$mo2yfY0iAMXE60qWxiuKwXMOhexJiPIHYPVL6A7iBNBqV7H5IRLySeTc6dqREkBSflbjuQJlZO2tXEFXYidkK/:18420:0:99999:7:::
admin:$6$0tr5dcVdjueqvQna$LQu.ul4LmYbaNG8/lnx7LBwlW5RxFBEUqjE.sLRlYHeeGkKzz5TZHZ5foe.HEW2hrjNw0Q3sxTMRHFkYmp9uN0:18419:0:99999:7:::

Debemos fusionarlos en un mismo fichero. Este fichero será el que le pasaremos a las herramientas de cracking para el descifrado de passwords.

Para combinar el fichero /etc/passwd y /etc/shadow usamos el comando unshadow.

unshadow passwd.txt shadow.txt > passwords

Password cracking con John The Ripper Link to heading

John The Ripper es una de las herramientas más populares usada para el cracking de contraseñas.

Con el fichero único creado anteriormente. Sin indicar ningún diccionario previamente, con John podemos realizar un ataque por fuerza bruta por defecto. Dependiendo de la complejidad de la contraseña esto puede tardar unos minutos o muchas horas.

john passwords

Si no disponemos de un buen diccionario. John cuenta con el modo –incremental se trata del modo más potente y también el más costoso en tiempo de procesamiento. Es aconsejable establecer a este modo un límite de longitud y comprobaciones de contraseñas (dígitos, mayúsculas, minúsculas, símbolos, etc.) para intentar que el proceso no tarde exageradamente tanto tiempo. Donde “passwords” sería el fichero creado con unshadow.

john --incremental passwords

Podemos consultar los logs de John para ver a tiempo real el proceso de cracking.

tail -f /root/.john/john.log                   # Opción con tail
less /root/.john/john.log (pulsar shift + f)   # Opción con less

John crea un directorio oculto ~/.john en el home de usuario donde es ejecutado. Aquí almacena varios ficheros.

  • ~/.john/john.log: Almacena el proceso de cracking, podemos consultarlo en tiempo real.
  • ~/.john/john.pot: Almacena los hashes y las passwords encontradas. Podemos ver su contenido ejecutando john --show <fichero_passwords_hashes>.
  • ~/.john/john.rec: Guarda el estado del proceso de cracking en el caso de que sea interrumpido (‘q’ o ‘ctrl+c’ pulsado una sola vez, si lo pulsamos dos veces el proceso se abortará por completo), de todos modos John realiza un autoguardado del proceso en este fichero cada 10 minutos.

Para mostrar o visualizar las contraseñas encontradas. Donde “passwords” sería el fichero creado con unshadow.

john --show passwords

Para mostrar el estado del proceso.

john --status

Obtener una lista de los tipos de formatos de cifrado compatibles en el caso de especificar uno concreto dependiendo del tipo de hashes.

john --list=formats
john --format=sha512crypt

Para realizar un ataque por diccionario y aplicar el estilo de reglas por defecto.

john --wordlist=diccionario.lst --rules password

En la siguiente captura se puede ver un proceso de cracking por defecto y de contraseñas débiles a través de John The Ripper.

Figura 1: Password cracking en Linux con John The Ripper.

Figura 1: Password cracking en Linux con John The Ripper.

Password cracking con Hashcat Link to heading

Hashcat es otra herramienta archiconocida para el cracking a una amplia variedad de tipos de hashes de passwords.

Código Hashcat del tipo de hash de cifrado comunes en sistemas Linux.

  • DES (Unix) = 1500
  • MD5 = 0
  • MD5 (Unix $1$) = 500
  • Blowfish (Unix $2*$) = 3200
  • SHA1 = 100
  • SHA-256 = 1400
  • SHA-256 (Unix $5$) = 7400
  • SHA-512 = 1700
  • SHA-512 (Unix $6$) = 1800 (usado en la mayoría de distribuciones actualizadas a día de hoy)

Ejemplo de uso en un ataque por diccionario con Hashcat.

hashcat -m 1800 -a 0 passwords diccionario.txt -r /usr/share/hashcat/rules/InsidePro-PasswordsPro.rule -o cracked.txt --force

Referencia: https://hashcat.net/wiki

En la siguiente captura se muestra un ataque por diccionario, estableciendo el formato del tipo de hash de cifrado 1800 (sha-512 - unix $6$), añadir el fichero de reglas InsidePro-PasswordsPro.rule incluido en el paquete de Hashcat y guardar el resultado de las contraseñas encontradas en un fichero de salida llamado cracked.txt.

Figura 2: Password cracking en Linux con Hashcat.

Figura 2: Password cracking en Linux con Hashcat.

Password hash cracking Online Link to heading

Existen multitud de sitios web en Internet que contienen grandes bases de datos con todo tipo de hashes donde pueden comparar y obtener un match en base al hash introducido. Algunas webs usan servidores potentes para realizar consultas a tablas Rainbow consiguiendo resultados más rápidamente.

Figura 3: Descifrar hashes SHA512crypt (Unix) en sitios web online.

Figura 3: Descifrar hashes SHA512crypt (Unix) en sitios web online.

Saludos!