Содержание

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

Цель: восстановить пароль архива.
Воспользуемся утилитой hashcat для поиска пароля по словарю и по шаблону.

Создадим тестовый архив с секретным файлом 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:

Извлекаем хеш пароля:

# 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$

Определяем какой алгоритм хеширования нужно использовать:

# 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.

Если пароль отсутствует в словаре, но есть какая-то информация о формате пароля, то можно воспользоваться шаблоном.

Например, предположим, что нам известно, что пароль состоит из 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