Descifrar contraseñas de archivos ZIP con John the Ripper

HydraBeginner
Practicar Ahora

Introducción

En esta práctica de laboratorio, aprenderás a descifrar un archivo ZIP protegido por contraseña utilizando John the Ripper, una de las herramientas de recuperación de contraseñas más populares y potentes. Este ejercicio te guiará a través de los pasos fundamentales de un proceso de descifrado de contraseñas, desde la configuración de las herramientas necesarias hasta la verificación de la contraseña obtenida. Al finalizar esta sesión, comprenderás cómo se extraen los hashes de las contraseñas y cómo se utilizan en ataques de diccionario y de fuerza bruta, lo que resalta la importancia de utilizar contraseñas robustas para la protección de archivos.

Esta es una Práctica Guiada, 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 esta es una práctica de nivel principiante con una tasa de finalización del 95%. Ha recibido una tasa de valoraciones positivas del 100% por parte de los alumnos.

Instalar las herramientas necesarias

Antes de comenzar a descifrar contraseñas, necesitamos instalar el software necesario. En este paso, instalarás John the Ripper (JtR), la herramienta principal de esta práctica, y la utilidad zip, que usaremos para crear nuestro archivo de prueba. Utilizaremos el gestor de paquetes apt, que es el estándar para sistemas basados en Debian como Ubuntu.

Primero, instala las dependencias requeridas y la utilidad zip ejecutando los siguientes comandos en tu terminal. La bandera -y confirma automáticamente la instalación.

sudo apt update
sudo apt install -y git build-essential libssl-dev zlib1g-dev zip
sudo apt install -y yasm pkg-config libgmp-dev libpcap-dev libbz2-dev

El paquete estándar de john en los repositorios de apt no incluye la utilidad zip2john que necesitamos. Por lo tanto, clonaremos y compilaremos John the Ripper desde el repositorio oficial para obtener el conjunto completo de herramientas.

cd ~/project
git clone --depth 1 https://github.com/openwall/john -b bleeding-jumbo john
cd john/src
./configure && make -s clean && make -sj4

Advertencia: El proceso de compilación puede tardar entre 3 y 5 minutos. Por favor, ten paciencia.

Una vez finalizada la compilación, crea alias para las herramientas de John the Ripper para que puedas usarlas desde cualquier ubicación:

echo 'alias john="$HOME/project/john/run/john"' >> ~/.zshrc
echo 'alias zip2john="$HOME/project/john/run/zip2john"' >> ~/.zshrc
source ~/.zshrc

Ahora verifica que tanto john como zip2john funcionan correctamente desde cualquier directorio:

john

Deberías ver una salida similar a la siguiente, lo que indica que John the Ripper se ha instalado correctamente:

John the Ripper 1.9.0-jumbo-1+bleeding-7a8c81abd9 2025-08-23 23:43:48 +0200 OMP [linux-gnu 64-bit x86_64 AVX-512 AC]
Copyright (c) 1996-2025 by Solar Designer and others
Homepage: https://www.openwall.com/john/

Usage: john [OPTIONS] [PASSWORD-FILES]

Use --help to list all available options.

Verifica también que zip2john esté disponible:

zip2john

Esto debería mostrar la información de uso de la utilidad zip2john.

Ahora puedes regresar a tu directorio de proyecto para el resto de la práctica:

cd ~/project

Con las herramientas necesarias instaladas, ya estás listo para crear un archivo protegido por contraseña para nuestro ejercicio de descifrado.

Crear un archivo ZIP protegido por contraseña

Para practicar el descifrado de contraseñas, primero necesitamos un objetivo. En este paso, crearás un archivo de texto simple y luego lo comprimirás en un archivo ZIP protegido por contraseña. Esto simulará un escenario del mundo real donde los archivos confidenciales se aseguran con una clave.

Primero, asegúrate de estar en el directorio del proyecto. Tu terminal ya debería estar en este directorio por defecto.

cd ~/project

A continuación, crea un archivo de texto simple llamado secret.txt. Este archivo se colocará dentro de nuestro archivo ZIP protegido.

echo "my secret data" > secret.txt

Ahora, utiliza el comando zip con la bandera -e (para cifrado) para crear un archivo protegido llamado secret.zip que contenga secret.txt.

zip -e secret.zip secret.txt

Después de ejecutar el comando, se te pedirá que introduzcas y luego verifiques una contraseña. Para esta práctica, utiliza la contraseña débil password123. Esto hará que el proceso de descifrado sea más rápido para fines de demostración.

Nota: Al escribir la contraseña, no verás ningún carácter en la pantalla; esta es una función de seguridad normal, no un error del sistema. Simplemente escribe la contraseña y presiona Enter.

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

Finalmente, puedes listar los archivos en el directorio para confirmar que se ha creado secret.zip.

ls -l

Deberías ver secret.txt y secret.zip en la salida.

total 8
-rw-rw-r-- 1 labex labex  15 Aug 29 09:57 secret.txt
-rw-rw-r-- 1 labex labex 213 Aug 29 09:57 secret.zip

Has creado con éxito un archivo ZIP protegido por contraseña, que servirá como nuestro objetivo en los siguientes pasos.

Extraer el hash del archivo ZIP

John the Ripper no trabaja directamente sobre el archivo ZIP. En su lugar, trabaja sobre el hash de la contraseña del archivo. Un hash es una cadena única de caracteres que representa la contraseña. En este paso, utilizarás una utilidad incluida en John the Ripper llamada zip2john para extraer este hash.

Ejecuta el comando zip2john sobre tu archivo secret.zip. Redirigiremos la salida utilizando el operador > para guardar el hash en un nuevo archivo llamado zip_hash.txt:

zip2john secret.zip > zip_hash.txt

Al ejecutar este comando, verás una salida detallada en la terminal que muestra información sobre la estructura del archivo ZIP:

ver 1.0 efh 5455 efh 7875 secret.zip/secret.txt PKZIP Encr: 2b chk, TS_chk, cmplen=27, decmplen=15, crc=AF1563E8 ts=4F26 cs=4f26 type=0

Esta información muestra detalles sobre el archivo cifrado, incluyendo los parámetros de compresión y cifrado.

Para ver cómo es el hash extraído, utiliza el comando cat para mostrar el contenido de zip_hash.txt:

cat zip_hash.txt

La salida será una sola línea de texto similar a esta:

secret.zip/secret.txt:$pkzip$1*2*2*0*1b*f*af1563e8*0*44*0*1b*4f26*50dbe9bcf15eafdb00ef774e1eaffef116bf5e0597fa55bb8b364c*$/pkzip$:secret.txt:secret.zip::secret.zip

La cadena del hash incluye el nombre del archivo original, el tipo de cifrado ($pkzip$) y los datos cifrados. Con este archivo de hash creado, ya estás listo para usar John the Ripper para descifrar la contraseña.

Descifrar la contraseña

Ahora que tienes el hash de la contraseña, puedes usar John the Ripper para descifrarlo. JtR utilizará su configuración predeterminada, que incluye un diccionario de contraseñas comunes y reglas para encontrar una coincidencia para el hash.

Para iniciar el proceso de descifrado, simplemente ejecuta el comando john y proporciona tu archivo de hash, zip_hash.txt, como entrada:

john zip_hash.txt

Como usamos una contraseña muy débil, John the Ripper debería descifrarla rápidamente. La salida mostrará el progreso y el resultado. John probará diferentes modos de ataque: primero el modo "single" (individual) y luego el modo de lista de palabras (wordlist):

Using default input encoding: UTF-8
Loaded 1 password hash (PKZIP [32/64])
Will run 4 OpenMP threads
Note: Passwords longer than 21 [worst case UTF-8] to 63 [ASCII] rejected
Proceeding with single, rules:Single
Press 'q' or Ctrl-C to abort, 'h' for help, almost any other key for status
Almost done: Processing the remaining buffered candidate passwords, if any.
0g 0:00:00:00 DONE 1/3 (2025-08-29 10:24) 0g/s 2619Kp/s 2619Kc/s 2619KC/s Txtsecret1900..Tzip1900
Proceeding with wordlist:/home/labex/project/john/run/password.lst
Enabling duplicate candidate password suppressor using 256 MiB
password123      (secret.zip/secret.txt)
1g 0:00:00:00 DONE 2/3 (2025-08-29 10:24) 8.333g/s 286541p/s 286541c/s 286541C/s 123456..nelly1
Use the "--show" option to display all of the cracked passwords reliably
Session completed

La línea password123 (secret.zip/secret.txt) indica que la contraseña ha sido descifrada con éxito. Observa que John primero intenta el modo "single" (que no encontró la contraseña) y luego pasa al modo de lista de palabras, donde encuentra la contraseña correctamente.

Una vez que una contraseña ha sido descifrada, John la almacena en un archivo. Para ver cualquier contraseña descifrada de un archivo de hash determinado, puedes usar la opción --show.

john --show zip_hash.txt

Este comando mostrará la contraseña descifrada en un formato claro, vinculándola al archivo de origen.

secret.zip/secret.txt:password123:secret.txt:secret.zip::secret.zip

1 password hash cracked, 0 left

Has utilizado con éxito John the Ripper para recuperar la contraseña a partir del hash del archivo ZIP. El paso final es verificar que esta contraseña funciona.

Verificar el acceso con la contraseña descifrada

El último paso de este proceso es confirmar que la contraseña que descifraste es correcta. Lo harás utilizando la contraseña para extraer el contenido del archivo secret.zip. Este paso valida el resultado de tu esfuerzo de descifrado.

Utiliza el comando unzip para extraer el archivo.

unzip secret.zip

El comando te pedirá la contraseña. Introduce password123, que es la contraseña que John the Ripper recuperó.

Archive:  secret.zip
[secret.zip] secret.txt password:
replace secret.txt? [y]es, [n]o, [A]ll, [N]one, [r]ename: yes
 extracting: secret.txt

Es posible que veas un aviso preguntando si deseas reemplazar el archivo secret.txt existente (si ya existe del Paso 2). Escribe yes para confirmar el reemplazo. Si la contraseña es correcta, el comando unzip extraerá secret.txt en tu directorio actual sin errores.

Para completar la verificación, muestra el contenido del archivo extraído para asegurarte de que los datos están intactos.

cat secret.txt

La salida debería coincidir con el texto original que creamos en el Paso 2.

my secret data

Al extraer con éxito el archivo y ver su contenido original, has confirmado que la contraseña recuperada por John the Ripper es correcta. Esto completa el ciclo completo de creación de un archivo protegido, descifrado de su contraseña y verificación del resultado.

Resumen

En esta práctica de laboratorio, has adquirido experiencia práctica en el descifrado de contraseñas utilizando John the Ripper. Aprendiste a instalar las herramientas necesarias, crear un archivo ZIP protegido por contraseña y extraer su hash de contraseña mediante zip2john. Luego, utilizaste con éxito John the Ripper para descifrar la contraseña a partir del hash y, finalmente, verificaste la contraseña obtenida usándola para acceder al archivo protegido. Este ejercicio demuestra una técnica fundamental en las pruebas de seguridad y subraya la vulnerabilidad de las contraseñas débiles.