Esta web utiliza cookies, puedes ver nuestra política de cookies aquí. Si continuas navegando estás aceptándola

Crackeo de passwords mediante HashCat


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):

wget https://raw.githubusercontent.com/SmeegeSec/HashTag/master/HashTag.py
wget www.alfaexploit.com/uploads/files/HashTag.py

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/uploads/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/uploads/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


Autor: Kr0m -- 30/07/2015 03:40:43