Descifrar Archivos ZIP Protegidos con Contraseña

Kali LinuxBeginner
Practicar Ahora

Introducción

En este laboratorio, aprenderá el proceso fundamental para descifrar un archivo ZIP protegido con contraseña. Esta es una tarea común en forense digital y pruebas de penetración. Utilizará una combinación de herramientas de línea de comandos disponibles en Linux para lograrlo. El proceso implica la creación de un archivo de muestra protegido, la extracción de su hash de contraseña y luego el uso de una potente herramienta de recuperación de contraseñas, Hashcat, para descifrar el hash y revelar la contraseña original.

Al final de este laboratorio, estará familiarizado con:

  • Crear archivos ZIP cifrados.
  • Usar zip2john para extraer hashes de contraseñas.
  • Preparar hashes para su uso con Hashcat.
  • Ejecutar un ataque de diccionario con Hashcat para recuperar una contraseña.

Crear un archivo ZIP protegido con contraseña

En este paso, creará un archivo ZIP protegido con contraseña. Este servirá como nuestro objetivo para el ejercicio de descifrado de contraseñas. Utilizaremos el comando estándar zip con la opción -e, que significa "encrypt" (cifrar).

Primero, asegúrese de estar en el directorio ~/project. Ya hemos creado un archivo llamado secret.txt para usted en el proceso de configuración.

Ahora, ejecute el siguiente comando para crear un archivo ZIP cifrado llamado secret.zip a partir del archivo secret.txt.

zip -e secret.zip secret.txt

El sistema le pedirá que introduzca y verifique una contraseña. Para este laboratorio, utilice la contraseña labex. Escriba labex, presione Enter y luego escríbala de nuevo para verificar.

Enter password:
Verify password:
  adding: secret.txt (stored 0%)

Después de que el comando se complete, puede usar el comando ls para verificar que el archivo secret.zip se ha creado en su directorio actual.

ls -l

Debería ver secret.zip listado en la salida.

-rw-r--r-- 1 labex labex  218 May 20 10:00 secret.zip
-rw-r--r-- 1 labex labex   23 May 20 10:00 secret.txt
-rw-r--r-- 1 labex labex   32 May 20 10:00 wordlist.txt

Usar zip2john para Extraer el Hash del Archivo ZIP

En este paso, utilizará la utilidad zip2john para extraer el hash de la contraseña del archivo secret.zip. Las herramientas de descifrado de contraseñas como Hashcat no funcionan directamente sobre el archivo cifrado; funcionan sobre su hash. zip2john es una herramienta del conjunto John the Ripper diseñada específicamente para este propósito.

Ejecute el siguiente comando para procesar secret.zip y guardar el hash resultante en un nuevo archivo llamado zip_hash.txt.

zip2john secret.zip > zip_hash.txt

Este comando no produce una salida directa en la terminal porque la hemos redirigido al archivo zip_hash.txt. Para ver el hash extraído, puede mostrar el contenido del nuevo archivo utilizando el comando cat.

cat zip_hash.txt

La salida se parecerá a la siguiente. Esta cadena contiene toda la información necesaria para descifrar la contraseña.

secret.zip:$pkzip2$1*1*2*0*8*24*7b4f4718*0*28*0*8*24*7b4f*53a9*$/pkzip2$

Formatear el Hash para Compatibilidad con Hashcat

En este paso, formateará el hash extraído para hacerlo compatible con Hashcat. La salida de zip2john incluye el nombre del archivo original (secret.zip:) como prefijo de la cadena del hash. Hashcat solo requiere los datos puros del hash.

Veamos nuevamente el contenido de zip_hash.txt:
secret.zip:$pkzip2$1*1*2*0*8*24*...

Necesitamos eliminar la parte secret.zip:. Una forma sencilla de hacerlo es con el comando cut, que puede dividir texto basándose en un delimitador. Usaremos el dos puntos (:) como delimitador y seleccionaremos el segundo campo.

Ejecute el siguiente comando para extraer el hash y guardarlo en un nuevo archivo llamado hashcat_ready.txt.

cut -d':' -f2 zip_hash.txt > hashcat_ready.txt
  • cut: El comando para cortar partes de líneas.
  • -d':': Especifica que el delimitador es un dos puntos.
  • -f2: Especifica que queremos el segundo campo.

Ahora, vea el contenido del nuevo archivo para confirmar que solo contiene el hash.

cat hashcat_ready.txt

La salida debe ser la cadena del hash sin el prefijo del nombre del archivo.

$pkzip2$1*1*2*0*8*24*7b4f4718*0*28*0*8*24*7b4f*53a9*$/pkzip2$

Este archivo ahora está listo para ser utilizado con Hashcat.

Seleccionar el Modo Correcto de Hashcat para PKZIP

En este paso, aprenderá cómo identificar el modo de hash correcto para Hashcat. Hashcat soporta el descifrado de cientos de tipos de hash diferentes, y debe especificar qué tipo está proporcionando utilizando un número de modo.

El hash que extrajimos comienza con $pkzip2$. Esto indica el tipo de cifrado ZIP utilizado. Podemos buscar en la documentación de ayuda de Hashcat los modos relacionados con "PKZIP" para encontrar el número correcto.

Utilice el siguiente comando para buscar "pkzip" dentro de la salida de ayuda de Hashcat.

hashcat --help | grep -i "pkzip"

La salida listará varios modos de hash relacionados con diferentes versiones de cifrado PKZIP.

17200 | PKZIP (legacy)                                       | Archives
17210 | PKZIP (legacy) (Compressed)                            | Archives
17220 | PKZIP (legacy) (Mixed)                                 | Archives
17225 | PKZIP (legacy) (Mixed + Compressed)                    | Archives
20500 | PKZIP Master Key                                       | Archives
20510 | PKZIP Master Key (Compressed)                          | Archives

Nuestro hash, generado a partir de un ZIP simple protegido con contraseña, corresponde al tipo "PKZIP (legacy)". Como puede ver en la salida, el número de modo para este es 17200. Utilizaremos este modo en el siguiente paso para lanzar nuestro ataque.

Lanzar un Ataque para Recuperar la Contraseña del ZIP

En este paso, lanzará el ataque de descifrado de contraseñas utilizando Hashcat. Realizaremos un ataque "directo" o de diccionario, donde Hashcat prueba cada contraseña de una lista dada. Ya hemos preparado una lista simple llamada wordlist.txt.

La estructura del comando para Hashcat es la siguiente:
hashcat [opciones] <archivo_hash> <archivo_lista_palabras>

Basándonos en nuestros pasos anteriores, el comando completo es:

hashcat -m 17200 -a 0 hashcat_ready.txt wordlist.txt

Analicemos el comando:

  • -m 17200: Especifica el modo de hash para PKZIP (legacy), que identificamos en el paso anterior.
  • -a 0: Especifica el modo de ataque. 0 representa un ataque Directo (de diccionario).
  • hashcat_ready.txt: El archivo que contiene nuestro hash objetivo.
  • wordlist.txt: El archivo que contiene la lista de posibles contraseñas.

Ejecute el comando. Hashcat se iniciará, inicializará su backend y comenzará el ataque.

hashcat (v6.2.6) starting

...

Session..........: hashcat
Status...........: Cracked
Hash.Name........: PKZIP (legacy)
Hash.Target......: $pkzip2$1*1*2*0*8*24*7b4f4718*0*28*0*8*24*7b4f*53a9*$/pkzip2$
Time.Started.....: ...
Time.Estimated...: 0 secs
Guess.Base.......: File (wordlist.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........:   248.2 kH/s (0.10ms) @ Accel:128 Loops:128 Thr:1
Recovered........: 1/1 (100.00%) Digests
Progress.........: 4/4 (100.00%)
Rejected.........: 0/4 (0.00%)
Restore.Point....: 3/4 (75.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidates.#1....: labex -> zzzzzzz
Hardware.Mon.#1..: Temp: 48c

$pkzip2$1*1*2*0*8*24*7b4f4718*0*28*0*8*24*7b4f*53a9*$/pkzip2$:labex

Started: ...
Stopped: ...

Hashcat encontró la contraseña muy rápidamente porque nuestra lista de palabras era pequeña. La última línea de la salida muestra el hash seguido de la contraseña recuperada: labex.

¡Felicitaciones, ha descifrado con éxito la contraseña del archivo ZIP!

Resumen

En este laboratorio, ha completado con éxito todo el flujo de trabajo para descifrar un archivo ZIP protegido con contraseña utilizando herramientas comunes de línea de comandos.

Ha aprendido a:

  1. Crear un archivo ZIP cifrado utilizando el comando zip.
  2. Extraer el hash de la contraseña del archivo ZIP utilizando zip2john.
  3. Formatear el hash extraído para hacerlo compatible con Hashcat.
  4. Identificar el modo de tipo de hash correcto para su objetivo dentro de Hashcat.
  5. Lanzar un ataque de diccionario con Hashcat para recuperar con éxito la contraseña.

Estas habilidades forman una comprensión fundamental de las técnicas de recuperación de contraseñas que son cruciales en campos de ciberseguridad como la forense digital y el hacking ético. Si bien utilizamos una contraseña simple y una lista de palabras pequeña para fines educativos, los mismos principios se aplican a escenarios del mundo real más complejos.