Подбор пароля к ZIP архиву через Hashcat

1 Подбор пароля к ZIP архиву через Hashcat
Цель: восстановить пароль архива.
Воспользуемся утилитой hashcat
для поиска пароля по словарю и по шаблону.
2 Создание тестового архива с паролем
Создадим тестовый архив с секретным файлом flag.txt
и установим пароль на архив:
# zip -e secret.zip flag.txt
Enter password:
Verify password:
adding: flag.txt (stored 0%)
Архив создан. Можем посмотреть какие есть файлы в нем:
# unzip -l secret.zip
Archive: secret.zip
Length Date Time Name
--------- ---------- ----- ----
76 2025-06-17 13:51 flag.txt
--------- -------
76 1 file
Извлечь файл flag.txt
без пароля не получается:
# unzip -p secret.zip flag.txt
[secret.zip] flag.txt password:
password incorrect--reenter:
password incorrect--reenter:
3 Получение хеша пароля
Извлекаем хеш пароля:
# zip2john secret.zip | cut -d':' -f2 > hashes.txt
ver 1.0 efh 5455 efh 7875 secret.zip/flag.txt PKZIP Encr: 2b chk, TS_chk, cmplen=88, decmplen=76, crc=7AF43AA6 ts=6E7D cs=6e7d type=0
Проверяем содержимое файла hashes.txt:
# cat hashes.txt
$pkzip$1*2*2*0*58*4c*7af43aa6*0*42*0*58*6e7d*c6a72dece19b5ba535806c44639f46c2ef9a67e612ae82cb5e48d29832e5675a9494f5686c16f42749234bbe2f0c346e5e8782c115e824893d96ac30ce5edd2c7aa7e06a764e3fae4932fd56f0dc31ea9419943f4d330913*$/pkzip$
4 Подбор пароля с помощью словаря
Определяем какой алгоритм хеширования нужно использовать:
# hashcat --identify hashes.txt
The following 2 hash-modes match the structure of your input hash:
# | Name | Category
======+======================================+==============
17225 | PKZIP (Mixed Multi-File) | Archive
17210 | PKZIP (Uncompressed) | Archive
Запускаем процедуру подбора пороля, указывая словарь:
# hashcat -m 17225 -a 0 hashes.txt ./rockyou.txt
hashcat (v6.2.6) starting
OpenCL API (OpenCL 3.0 PoCL 6.0+debian Linux, None+Asserts, RELOC, SPIR-V, LLVM 18.1.8, SLEEF, DISTRO, POCL_DEBUG) - Platform #1 [The pocl project]
====================================================================================================================================================
* Device #1: cpu, 6959/13983 MB (2048 MB allocatable), 10MCU
Minimum password length supported by kernel: 0
Maximum password length supported by kernel: 256
Hashes: 1 digests; 1 unique digests, 1 unique salts
Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates
Rules: 1
Optimizers applied:
* Not-Iterated
* Single-Hash
* Single-Salt
Watchdog: Hardware monitoring interface not found on your system.
Watchdog: Temperature abort trigger disabled.
Host memory required for this attack: 2 MB
Dictionary cache hit:
* Filename..: ./rockyou.txt
* Passwords.: 14344384
* Bytes.....: 139921497
* Keyspace..: 14344384
$pkzip$1*2*2*0*58*4c*7af43aa6*0*42*0*58*6e7d*c6a72dece19b5ba535806c44639f46c2ef9a67e612ae82cb5e48d29832e5675a9494f5686c16f42749234bbe2f0c346e5e8782c115e824893d96ac30ce5edd2c7aa7e06a764e3fae4932fd56f0dc31ea9419943f4d330913*$/pkzip$:pacman25
Session..........: hashcat
Status...........: Cracked
Hash.Mode........: 17225 (PKZIP (Mixed Multi-File))
Hash.Target......: $pkzip$1*2*2*0*58*4c*7af43aa6*0*42*0*58*6e7d*c6a72d...pkzip$
Time.Started.....: Tue Jun 17 16:53:50 2025 (1 sec)
Time.Estimated...: Tue Jun 17 16:53:51 2025 (0 secs)
Kernel.Feature...: Pure Kernel
Guess.Base.......: File (./rockyou.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........: 5240.8 kH/s (0.97ms) @ Accel:1024 Loops:1 Thr:1 Vec:4
Recovered........: 1/1 (100.00%) Digests (total), 1/1 (100.00%) Digests (new)
Progress.........: 4843520/14344384 (33.77%)
Rejected.........: 0/4843520 (0.00%)
Restore.Point....: 4833280/14344384 (33.69%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidate.Engine.: Device Generator
Candidates.#1....: paiboon2502 -> paafdo
Started: Tue Jun 17 16:53:49 2025
Stopped: Tue Jun 17 16:53:52 2025
За 3 секунды нашли нашли пароль pacman25
.
5 Подбор пароля с помощью шаблона
Если пароль отсутствует в словаре, но есть какая-то информация о формате пароля, то можно воспользоваться шаблоном.
Например, предположим, что нам известно, что пароль состоит из 6 строчных букв и 2 цифр.
Тогда шаблон будет выглядеть как ?l?l?l?l?l?l?d?d
, где ?l
- строчная буква, ?d
- цифра.
Применим шаблон для поиска пароля:
# hashcat -m 17225 -a 3 hashes.txt "?l?l?l?l?l?l?d?d"
hashcat (v6.2.6) starting
OpenCL API (OpenCL 3.0 PoCL 6.0+debian Linux, None+Asserts, RELOC, SPIR-V, LLVM 18.1.8, SLEEF, DISTRO, POCL_DEBUG) - Platform #1 [The pocl project]
====================================================================================================================================================
* Device #1: cpu, 6959/13983 MB (2048 MB allocatable), 10MCU
Minimum password length supported by kernel: 0
Maximum password length supported by kernel: 256
Hashes: 1 digests; 1 unique digests, 1 unique salts
Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates
Optimizers applied:
* Not-Iterated
* Single-Hash
* Single-Salt
* Brute-Force
Watchdog: Hardware monitoring interface not found on your system.
Watchdog: Temperature abort trigger disabled.
Host memory required for this attack: 2 MB
$pkzip$1*2*2*0*58*4c*7af43aa6*0*42*0*58*6e7d*c6a72dece19b5ba535806c44639f46c2ef9a67e612ae82cb5e48d29832e5675a9494f5686c16f42749234bbe2f0c346e5e8782c115e824893d96ac30ce5edd2c7aa7e06a764e3fae4932fd56f0dc31ea9419943f4d330913*$/pkzip$:pacman25
Session..........: hashcat
Status...........: Cracked
Hash.Mode........: 17225 (PKZIP (Mixed Multi-File))
Hash.Target......: $pkzip$1*2*2*0*58*4c*7af43aa6*0*42*0*58*6e7d*c6a72d...pkzip$
Time.Started.....: Tue Jun 17 16:57:35 2025 (4 mins, 31 secs)
Time.Estimated...: Tue Jun 17 17:02:06 2025 (0 secs)
Kernel.Feature...: Pure Kernel
Guess.Mask.......: ?l?l?l?l?l?l?d?d [8]
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........: 58531.9 kH/s (10.98ms) @ Accel:128 Loops:512 Thr:1 Vec:4
Recovered........: 1/1 (100.00%) Digests (total), 1/1 (100.00%) Digests (new)
Progress.........: 15755960320/30891577600 (51.00%)
Rejected.........: 0/15755960320 (0.00%)
Restore.Point....: 896000/1757600 (50.98%)
Restore.Sub.#1...: Salt:0 Amplifier:5632-6144 Iteration:0-512
Candidate.Engine.: Device Generator
Candidates.#1....: itshnq14 -> jebume25
Started: Tue Jun 17 16:57:33 2025
Stopped: Tue Jun 17 17:02:07 2025
Нашли пароль pacman25
за 5 минут.
Тут основная проблема - скорость. Чем меньше количество возможных комбинаций в шаблоне - тем быстрее будет поиск.
Для слишком общих шаблонов есть большой шанс не дождаться результата.
Пробуем прочитать содержимое файла flag.txt
, вводя подобранный пароль:
# unzip -p secret.zip flag.txt
[secret.zip] flag.txt password:
RED_BLUE_STRATEGY{SUPER_SECRET_FLAG} - 7c6ed1ff-de8b-4a6d-b145-6f85cfbbb6fa