Esta pagina se ve mejor con JavaScript habilitado

Crackeo de passwords mediante HashCat

 ·  🎃 kr0m

Hashcat es un software de crackeo de passwords, este tiene fama de ser el mas rápido del mundo, soporta varios algoritmos de cifrado, varias técnicas de crackeo y además es capaz de utilizar tarjetas gráficas como unidades de cómputo(OpenCL/CUDA).

Si vamos a utilizar la versión compatible con OpenCL/CUDA debemos recompilar el driver de la tarjeta gráfica e instalar las herramientas necesarias, en mi caso se trata de una tarjeta NVIDIA:

echo “>=x11-drivers/nvidia-drivers-340.76 uvm” » /etc/portage/package.use/nvidia
emerge x11-drivers/nvidia-drivers
echo “=dev-util/nvidia-cuda-toolkit-6.5.14 NVIDIA-CUDA” > /etc/portage/package.license/nvidia
emerge dev-util/nvidia-cuda-toolkit

Para hacer la prueba vamos a generar un usuario en el sistema cuyo password es alfaexploit

useradd test00
passwd test00
alfaexploit
grep test00 /etc/shadow

test00:$6$bwbfkx6h$1qPTzJWY.mK71F0MjLA5iihgUpr/AJmp0CPZY1qUhe46cWyZDzmJketQYfX.MIYY/vQw5Cyg877GZDbWmX3Mn/:16641:0:99999:7:::

El hash en un sistema linux se compone de varios elementos:

$6$bwbfkx6h$1qPTzJWY.mK71F0MjLA5iihgUpr/AJmp0CPZY1qUhe46cWyZDzmJketQYfX.MIYY/vQw5Cyg877GZDbWmX3Mn/
  • $6: Tipo de hash, en este caso SHA-512
  • $bwbfkx6h: Grano de sal, cadena de carácteres aleatorios empleados como entrada en el algoritmo de cifrado, hay sistemas que almacenan los granos de sal a parte aumentando de este modo la seguridad, hascat permite indicar un fichero de granos de sal independiente.
  • $1qPTzJWY.mK71F0MjLA5iihgUpr/AJmp0CPZY1qUhe46cWyZDzmJketQYfX.MIYY/vQw5Cyg877GZDbWmX3Mn/: Hash del password combinado con el grano de sal

Para poder romper el password es necesario indicarle a hashcat de que tipo de cifrado se trata, un modo rápido de hacerlo es consultando el siguiente enlace con ejemplos:
http://hashcat.net/wiki/doku.php?id=example_hashes

Los principales algoritmos son:

  • $0 = DES
  • $1 = MD5 Hashing
  • $2 = Blowfish
  • $2A = eksblowfish
  • $5 = SHA256
  • $6 = SHA512

Otro modo de averiguar el tipo de hash es mediante este script en python(lo alojaré en mi propio servidor también por si se eliminase de Inet):

Comprobamos que efectivamente se trata de SHA512 y además nos indica el id a utilizar en hashcat:

python HashTag.py -sh ‘$6$bwbfkx6h$1qPTzJWY.mK71F0MjLA5iihgUpr/AJmp0CPZY1qUhe46cWyZDzmJketQYfX.MIYY/vQw5Cyg877GZDbWmX3Mn/’

[*] sha512crypt, SHA512(Unix) - Hashcat Mode 1800

Dependiendo de si vamos a utilizar la gráfica debemos descargarnos una versión u otra:

GPU

cd /usr/src
wget http://hashcat.net/files/cudaHashcat-1.36.7z
wget www.alfaexploit.com/files/cudaHashcat-1.36.7z
emerge app-arch/p7zip
p7zip -d cudaHashcat-1.36.7z
cd cudaHashcat-1.36

CPU

cd /usr/src
wget http://hashcat.net/files/hashcat-0.50.7z
wget www.alfaexploit.com/files/hashcat-0.50.7z
p7zip -d hashcat-0.50.7z
cd hashcat-0.50

Podemos ver los diferentes algortimos soportados con:
GPU

./cudaHashcat64.bin -h

CPU

./hashcat-cli64.bin -h

Generamos el fichero de hash y el diccionario:

vi hash

$6$bwbfkx6h$1qPTzJWY.mK71F0MjLA5iihgUpr/AJmp0CPZY1qUhe46cWyZDzmJketQYfX.MIYY/vQw5Cyg877GZDbWmX3Mn/
vi dict
1
2
3
alfaexploit

A hashcat hay que indicarle el tipo de hash: 1800, la técnica de crackeo a utilizar: 0, el fichero de hash y el de diccionario:

GPU

./cudaHashcat64.bin -m 1800 -a 0 hash dict

ERROR: Shader Model 1.0 - 1.3 based GPU detected. Support for CUDA was dropped by NVidia.

Mi gráfica ya no está soportada por CUDA :(

CPU

./hashcat-cli64.bin -n 2 -m 1800 -a 0 hash dict

$6$bwbfkx6h$1qPTzJWY.mK71F0MjLA5iihgUpr/AJmp0CPZY1qUhe46cWyZDzmJketQYfX.MIYY/vQw5Cyg877GZDbWmX3Mn/:alfaexploit

All hashes have been recovered
Input.Mode: Dict (dict)
Index.....: 1/1 (segment), 4 (words), 18 (bytes)
Recovered.: 1/1 hashes, 1/1 salts
Speed/sec.: - plains, - words
Progress..: 4/4 (100.00%)
Running...: 00:00:00:01
Estimated.: --:--:--:--

NOTA: -n 2 me permite utilizar los dos cores de mi core2duo

Modos de crackeo:

0 = Straight: Simplemente corre todas las palabras del diccionario contra la lista de hashes, teniendo un buen diccionario aumentarán las posibilidades de recuperar el hash.
1 = Combination: Combina las palabras del diccionario dado. Ejemplo: aa bb -> aa, bb, aabb, bbaa
2 = Toggle-Case: Cambia todas las letras minúsculas a mayúsculas y viceversa. Dígitos y caracteres especiales son ignorados.
3 = Brute-force: Fuerza bruta debe ser usado como último recurso, no es efectivo contra contraseñas largas y puede consumir mucho tiempo, deberemos indicarle la longitud min/max a probar y el charset.
4 = Permutation: Toma las letras de una palabra y las reordena. Ejemplo: abc se vuelve abc, acb, bca, bac.
5 = Table-Lookup: Rompe la palabra del diccionario en carácteres individuales y aplica una regla definida en table-file=FILE a cada uno. Por ejemplo password es roto en cada carácter: p a s s w o r d.

Entonces hashcat mira en la tabla por las reglas que deben ser aplicadas a cada carácter. En este caso nuestra tabla tendría:

vi tabla.table

a=a
a=A
p=p
p=P
o=o
o=O
o=0 (cero)

Ahora cada carácter que coincida será cambiado y probado. Así que por cada a -> a y A será probada, por cada p -> p y P será probado y por cada o -> o, O y 0 será probado.

Para este tipo de ataque hay que indicar el fichero table y la longituda min/max de las palabras del diccionario, por defecto no comprueba palabras mayores de 10 carácteres.

--table-file=./tabla.table --table-min=1 --table-max=20

En este web podemos encontrar una buena lista de diccionarios:
http://hashcrack.blogspot.com.es/p/wordlist-downloads_29.html

Si te ha gustado el artículo puedes invitarme a un RedBull aquí