Page cover

🔑Hashcat

Hashcat es una conocida herramienta de cracking de contraseñas para Linux, Windows y macOS. De 2009 a 2015 era software propietario, pero desde entonces se ha publicado como código abierto. Gracias a su excelente compatibilidad con GPU, permite descifrar una gran variedad de hashes. Al igual que John, Hashcat admite múltiples modos de ataque (cracking) que permiten atacar hashes de contraseñas de forma eficiente.

La sintaxis general utilizada para ejecutar hashcat es la siguiente:

afsh4ck@kali$ hashcat -a 0 -m 0 <hashes> [wordlist, rule, mask, ...]

En el comando anterior:

  • -a se utiliza para especificar el attack mode

  • -m se utiliza para especificar el hash type

  • <hashes> es una cadena hash o un archivo que contiene uno o más hashes de contraseña del mismo tipo

  • [wordlist, rule, mask, ...] es un marcador de posición para argumentos adicionales que dependen del modo de ataque

Tipos de hash

Hashcat admite cientos de tipos de hash diferentes, cada uno con un ID asignado. Se puede generar una lista de ID asociados ejecutando hashcat --help.

afsh4ck@kali$ hashcat --help

...SNIP...

- [ Hash modes ] -

      # | Name                                                       | Category
  ======+============================================================+======================================
    900 | MD4                                                        | Raw Hash
      0 | MD5                                                        | Raw Hash
    100 | SHA1                                                       | Raw Hash
   1300 | SHA2-224                                                   | Raw Hash
   1400 | SHA2-256                                                   | Raw Hash
  10800 | SHA2-384                                                   | Raw Hash
   1700 | SHA2-512                                                   | Raw Hash
  17300 | SHA3-224                                                   | Raw Hash
  17400 | SHA3-256                                                   | Raw Hash
  17500 | SHA3-384                                                   | Raw Hash
  17600 | SHA3-512                                                   | Raw Hash
   6000 | RIPEMD-160                                                 | Raw Hash
    600 | BLAKE2b-512                                                | Raw Hash
  11700 | GOST R 34.11-2012 (Streebog) 256-bit, big-endian           | Raw Hash
  11800 | GOST R 34.11-2012 (Streebog) 512-bit, big-endian           | Raw Hash
   6900 | GOST R 34.11-94                                            | Raw Hash
  17010 | GPG (AES-128/AES-256 (SHA-1($pass)))                       | Raw Hash
   5100 | Half MD5                                                   | Raw Hash
  17700 | Keccak-224                                                 | Raw Hash
  17800 | Keccak-256                                                 | Raw Hash
  17900 | Keccak-384                                                 | Raw Hash
  18000 | Keccak-512                                                 | Raw Hash
   6100 | Whirlpool                                                  | Raw Hash
  10100 | SipHash                                                    | Raw Hash
     70 | md5(utf16le($pass))                                        | Raw Hash
    170 | sha1(utf16le($pass))                                       | Raw Hash
   1470 | sha256(utf16le($pass))                                     | Raw Hash
...SNIP...

El sitio web hashcat alberga una lista completa de hashes de ejemplo que pueden ayudar a identificar manualmente un tipo de hash desconocido y determinar el identificador del modo hash Hashcat correspondiente.

Alternativamente, se puede utilizar hashID para identificar rápidamente el tipo de hash hashcat especificando la flag -m

Modos de ataque

Hashcat tiene muchos modos de ataque diferentes, incluyendo dictionary, mask, combinator y association. En esta sección, repasaremos los dos primeros, ya que probablemente sean los más comunes que necesitarás usar.

Ataque de diccionario

El ataque de diccionario (-a 0) es, como su nombre indica, un ataque de diccionario. El usuario proporciona hashes de contraseñas y una lista de palabras como entrada, y Hashcat prueba cada palabra de la lista como una posible contraseña hasta encontrar la correcta o hasta agotar la lista.

Por ejemplo, imaginemos que extrajimos el siguiente hash de contraseña de una base de datos SQL: e3e3ec5831ad5e7288241960e5d4fdb8. Primero, podríamos identificarlo como un hash MD5, cuyo ID de hash es 0. Para intentar descifrar este hash usando la wordlist rockyou.txt, se usaría el siguiente comando:

Una lista de palabras por sí sola no suele ser suficiente para descifrar el hash de una contraseña. Como en el caso de John, se puede usar rules para realizar modificaciones específicas en las contraseñas y generar aún más intentos. Los archivos de reglas que vienen con hashcat se encuentran generalmente en /usr/share/hashcat/rules:

Como otro ejemplo, imaginemos que se filtró un hash MD5 adicional de la base de datos SQL: 1b0556a75770563578569ae21392630c. No pudimos descifrarlo usando rockyou.txt , así que, en un intento posterior, podríamos aplicar algunas transformaciones comunes basadas en reglas. Un conjunto de reglas que podríamos probar es best64.rule, que contiene 64 modificaciones estándar de contraseñas, como añadir números o sustituir caracteres por sus equivalentes "leet". Para realizar este tipo de ataque, añadiríamos la opción -r <ruleset> al comando, como se muestra a continuación:

Ataque con máscara

El ataque de máscara (-a 3) es un tipo de ataque de fuerza bruta en el que el espacio de claves lo define explícitamente el usuario. Por ejemplo, si sabemos que una contraseña tiene ocho caracteres, en lugar de probar todas las combinaciones posibles, podríamos definir una máscara que pruebe combinaciones de seis letras seguidas de dos números.

Una máscara se define combinando una secuencia de símbolos, cada uno de los cuales representa un conjunto de caracteres integrado o personalizado. Hashcat incluye varios conjuntos de caracteres integrados:

Símbolo
Charset

?l

abcdefghijklmnopqrstuvwxyz

?u

ABCDEFGHIJKLMNOPQRSTUVWXYZ

?d

0123456789

?h

0123456789abcdef

?H

0123456789ABCDEF

?s

«space»!"#$%&'()*+,-./:;<=>?@[]^_`{

?a

?l?u?d?s

?b

0x00 - 0xff

Los conjuntos de caracteres personalizados se pueden definir con los argumentos -1, -2, -3, y -4, y luego hacer referencia a ellos con ?1, ?2, ?3, y ?4.

Supongamos que queremos probar contraseñas que empiezan con una letra mayúscula, continúan con cuatro letras minúsculas, un dígito y finalmente un símbolo. La máscara hashcat resultante sería ?u?l?l?l?l?d?s.


Caso práctico

Pregunta 1

Utiliza un ataque de diccionario para descifrar el hash de la contraseña.

(Hash: e3e3ec5831ad5e7288241960e5d4fdb8)

Pregunta 2

Utiliza un ataque de diccionario con reglas para descifrar el hash de la segunda contraseña.

(Hash: 1b0556a75770563578569ae21392630c)

Pregunta 3

Utiliza un ataque de máscara para descifrar el tercer hash de la contraseña.

(Hash: 1e293d6912d074c0fd15844d803400dd)

Última actualización

¿Te fue útil?