Fundamentos de Hashing con Hashcat

LinuxBeginner
Practicar Ahora

Introducción

¡Bienvenidos al mundo del hashing y la crackeado de contraseñas! El hashing es un concepto fundamental en ciberseguridad, utilizado para verificar la integridad de los datos y almacenar contraseñas de forma segura. Una función hash toma una entrada (como una contraseña) y devuelve una cadena de bytes de tamaño fijo, el hash. Este proceso está diseñado para ser unidireccional, lo que significa que no se puede revertir fácilmente para obtener la entrada original.

Hashcat es una herramienta de recuperación de contraseñas potente y mundialmente reconocida. Antes de poder utilizarla eficazmente, debe comprender los conceptos básicos de qué son los hashes y cómo manejarlos.

En este laboratorio, aprenderá los conceptos fundamentales del hashing. Explorará los tipos de hash comunes, generará su propio hash, lo preparará para su uso con Hashcat y comprenderá la diferencia crucial entre una contraseña y su hash. Este conocimiento es el primer paso esencial en su camino para dominar Hashcat.

Este es un Guided Lab, que proporciona instrucciones paso a paso para ayudarte a aprender y practicar. Sigue las instrucciones cuidadosamente para completar cada paso y obtener experiencia práctica. Los datos históricos muestran que este es un laboratorio de nivel principiante con una tasa de finalización del 94%. Ha recibido una tasa de reseñas positivas del 100% por parte de los estudiantes.

Comprender los tipos de hash comunes: MD5, SHA1 y NTLM

En este paso, aprenderá sobre tres tipos de hash comunes que encontrará frecuentemente en el campo de la ciberseguridad: MD5, SHA1 y NTLM. No hay comandos que ejecutar en este paso; el objetivo es comprender estos conceptos centrales.

  • ¿Qué es un Hash?
    Un hash es una cadena de caracteres única y de tamaño fijo que se genera a partir de un fragmento de datos. Los algoritmos de hashing están diseñados para ser funciones unidireccionales, lo que significa que es computacionalmente inviable revertir el proceso y encontrar los datos de entrada originales solo a partir del hash.

  • MD5 (Message Digest 5)
    MD5 es uno de los algoritmos de hashing más antiguos y conocidos. Produce un valor hash de 128 bits (32 caracteres hexadecimales). Aunque alguna vez fue popular para el almacenamiento de contraseñas, ahora se considera inseguro para ese propósito debido a vulnerabilidades que lo hacen susceptible a "colisiones" (donde dos entradas diferentes producen el mismo hash). Hoy en día, se utiliza principalmente para verificar la integridad de archivos y asegurar que un archivo no ha sido alterado durante la transferencia.

  • SHA-1 (Secure Hash Algorithm 1)
    SHA-1 fue desarrollado como sucesor de MD5. Produce un hash de 160 bits (40 caracteres hexadecimales). Al igual que MD5, SHA-1 tampoco se considera seguro para fines criptográficos debido a debilidades descubiertas. Sin embargo, todavía lo encontrará en sistemas antiguos y aplicaciones heredadas (legacy).

  • NTLM (NT LAN Manager)
    NTLM es un algoritmo de hashing utilizado por Microsoft Windows para almacenar contraseñas de usuario. Cuando establece una contraseña en un sistema Windows, esta se convierte en un hash NTLM y se almacena. Estos son un objetivo común en las actividades de pruebas de penetración que involucran entornos Windows.

Comprender estos tipos es el primer paso para identificar un hash y elegir el método correcto para crackearlo.

Crear un hash MD5 a partir de una cadena usando 'echo' y 'md5sum'

En este paso, generará un hash MD5 a partir de una cadena de texto simple. Esta es una tarea común para hashear rápidamente un fragmento de datos desde la línea de comandos. Utilizaremos dos utilidades estándar de Linux: echo y md5sum.

Primero, comprendamos las herramientas:

  • echo: Este comando se utiliza para mostrar una línea de texto.
  • md5sum: Este comando calcula y verifica los resúmenes de mensajes MD5.
  • | (Pipe o Tubería): Este operador envía la salida del comando a su izquierda como entrada al comando a su derecha.

Vamos a hashear la cadena password123. Es importante usar la opción -n con echo. Esto le indica a echo que no emita el carácter de nueva línea final, el cual de otro modo se incluiría en el cálculo del hash y produciría un resultado diferente.

Ejecute el siguiente comando en su terminal:

echo -n "password123" | md5sum

Verá la siguiente salida. La cadena larga de caracteres es el hash MD5 de "password123", y el - indica que md5sum leyó su entrada de la entrada estándar (la tubería) en lugar de un archivo.

482c811da5d5b4bc6d497ffa98491e38  -

¡Ahora ha creado con éxito su primer hash!

Preparar un archivo de texto que contenga un único hash objetivo

En este paso, creará un archivo para almacenar el hash que generó. Hashcat y otras herramientas de crackeo de contraseñas típicamente trabajan con archivos que contienen uno o más hashes, no con entrada de cadena directa. Esto le permite apuntar a muchos hashes a la vez.

Usaremos el hash MD5 para password123 que generó en el paso anterior: 482c811da5d5b4bc6d497ffa98491e38.

Podemos usar el comando echo nuevamente, pero esta vez usaremos el operador de redirección de salida > para escribir la cadena en un nuevo archivo llamado target_hash.txt. Este comando creará el archivo en su directorio actual (~/project).

Ejecute el siguiente comando para crear el archivo:

echo "482c811da5d5b4bc6d497ffa98491e38" > target_hash.txt

Ahora, verifiquemos que el archivo se creó correctamente y contiene el hash. Use el comando cat para mostrar el contenido del archivo:

cat target_hash.txt

La salida debe ser el hash en sí:

482c811da5d5b4bc6d497ffa98491e38

Ahora tiene un archivo objetivo formateado correctamente, listo para una herramienta de crackeo como Hashcat.

Identificar el modo de hash correcto para MD5 a partir de la ayuda de Hashcat

En este paso, aprenderá a encontrar el modo correcto para un tipo de hash específico en Hashcat. Hashcat soporta cientos de algoritmos de hashing diferentes, y usted debe indicarle exactamente qué tipo de hash está intentando crackear. Esto se hace utilizando un "modo de hash" numérico.

Para encontrar el modo correcto, puede usar el menú de ayuda integrado de Hashcat. Ejecutar hashcat --help mostrará una lista muy larga de todos los tipos de hash soportados y sus modos correspondientes. Para encontrar lo que necesitamos rápidamente, podemos canalizar (pipe) esta salida al comando grep para buscar "md5".

Ejecute el siguiente comando para buscar el modo de hash MD5:

hashcat --help | grep -i "md5"

La opción -i en grep hace que la búsqueda no distinga entre mayúsculas y minúsculas. Verá mucha salida, ya que hay muchas variaciones de MD5. Busque la más básica.

...
      0 | MD5                                            | Raw Hash
...
   2410 | Cisco-ASA MD5                                  | Operating System
...

Como puede ver en la salida, el modo de hash para un hash MD5 estándar y "crudo" (raw) es 0. Este es el número que proporcionaría a Hashcat con la opción -m (por ejemplo, -m 0) para indicarle que está crackeando un hash MD5.

Diferenciar entre un hash y una contraseña

En este paso final, reforzaremos la diferencia crítica entre una contraseña y su hash. Este es un concepto fundamental en el crackeo de contraseñas.

  • La Contraseña es la cadena secreta y legible por humanos. En nuestro ejemplo, es password123.
  • El Hash es la cadena revuelta y de longitud fija generada a partir de la contraseña. En nuestro ejemplo, es 482c811da5d5b4bc6d497ffa98491e38.

El crackeo de contraseñas no revierte el hash. En su lugar, funciona tomando una lista de contraseñas potenciales (una lista de palabras o wordlist), hasheando cada una y comparando el resultado con el hash objetivo. Si coinciden, se ha encontrado la contraseña.

Para ilustrar esto, creemos un archivo de lista de palabras simple. En un escenario real, este archivo contendría millones de intentos de contraseñas. Para este laboratorio, solo contendrá la contraseña correcta.

Cree un archivo llamado potential_passwords.txt con la contraseña original:

echo "password123" > potential_passwords.txt

Ahora, veamos los dos archivos que ha preparado. Use el comando ls para verlos en su directorio.

ls
potential_passwords.txt  target_hash.txt

Usted tiene target_hash.txt, que contiene el hash a crackear, y potential_passwords.txt, que contiene la contraseña a probar. Esta separación es clave para el funcionamiento de las herramientas de crackeo de contraseñas.

Resumen

¡Felicidades por completar este laboratorio! Ha aprendido con éxito los fundamentos esenciales del hashing que se requieren antes de utilizar una herramienta como Hashcat.

En este laboratorio, usted ha:

  • Aprendido los conceptos detrás de tipos de hash comunes como MD5, SHA-1 y NTLM.
  • Generado un hash MD5 a partir de una cadena utilizando los comandos echo y md5sum.
  • Preparado un archivo de hash objetivo, que es el formato estándar para las herramientas de crackeo.
  • Utilizado el comando hashcat --help para identificar el modo de hash correcto para MD5.
  • Afianzado su comprensión de la diferencia crucial entre una contraseña y su hash correspondiente.

Con esta base, ahora está mejor preparado para pasar a laboratorios más avanzados donde utilizará estos archivos y conceptos para realizar un ataque real de crackeo de contraseñas con Hashcat.