Визначення типів хешей за допомогою скрипта hash-Identifier для розшифровки паролів

Визначення типів хешей за допомогою скрипта hash-Identifier для розшифровки паролів

Коли ви маєте справу з невідомим хешем, перший крок – коректна ідентифікація типу.

Визначення типів хешей за допомогою скрипта hash-Identifier для розшифровки паролів

Автор: Kody

Хеші зазвичай використовуються для зберігання конфіденційної інформації, як, наприклад, облікових записів, які не повинні знаходитися у відкритому вигляді. За допомогою утиліт зразок Hashcat ми можемо зламати ці хеші однак тільки у випадку, якщо знаємо алгоритм генерації. Використовуючи інструменти навроде скрипта hash-identifier, можна легко визначити тип будь-яких хешей, щоб потім вказати правильний режим при роботі з Hashcat.

Крім злому хешей hash-identifier також корисний для ідентифікації алгоритму, що використовується при видачі контрольної суми для завантаження файлів. Крім того, цей скрипт допомагає визначити, до якого з додатком відноситься хешований файл або значення (наприклад, SQL базі чи якогось іншого формату, специфічному для конкретного постачальника).

Що таке хеш і як розшифрувати пароль?

Як було сказано раніше, паролі, які добуваються з бази даних або комп’ютера, зазвичай зберігаються у вигляді хешей, а не у відкритому вигляді. Функція хешування перетворює паролі в хаотичний набір символів та чисел, які не повинні бути оборотні назад до пароль.

Однак два або більше однакових пароля, при використанні однієї і тієї ж функції, будуть мати один і той же хеш. Відповідно, за допомогою цієї функції можна отримати набір хешей для списку паролів, а потім використовувати цей перелік для виявлення відповідного пароля. Подібним чином працює безліч утиліт для злому.

Хоча зберігання пароля у вигляді хеша краще, ніж у відкритому вигляді, ймовірність злому все одно залишається, якщо у зловмисника хороший набір правил або словника, які можна використовувати в Hashcat або іншій подібній програмі.

https://www.youtube.com/watch?v=aC7Pjjr6NcM&feature=emb_title

Якщо ви багато працюєте з хэшами, то легко побачите різницю між різними і часто використовуваними типами.

Наприклад, чи зможете ви на око визначити, до якого типу відносяться суми, зазначені нижче?

8743b52063cd84097a65d1633f5c74f5 b89eaac7e61417341b710b727768294d0e6a277b 

Хоча ви могли бачити і той і інший хеш раніше, відповідь на питання, який хеш MD5, а який – SHA1, не настільки очевидний. Ще більша плутанина може виникнути зі схожими типами хешей, що відносяться до різних режимів в Hashcat. У випадку з хэшами, наведеними вище, цей факт має надзвичайно важливе значення.

При використанні Hashcat для злому цього хеша ми повинні встановити опцію –m з метою роботи в потрібному режимі. Для злому хеша MD5 ми б вказали режим 0.

~$ sudo hashcat -m 0 -a 0 8743b52063cd84097a65d1633f5c74f5 example.dict --force hashcat (v4.0.1) starting... OpenCL Platform #1: The pocl project ==================================== * Device #1: pthread-Intel(R) Core(TM)2 Duo CPU E7500 @ 2.93 GHz, 1024/3639 MB allocatable, 2MCU 8743b52063cd84097a65d1633f5c74f5:hashcat 

У підсумку, встановивши потрібний алгоритм і використовуючи хороший словник, після розшифрування хеш-ми отримали слово «hashcat».

Які хеші підтримуються?

На даний момент Hashcat в змозі розшифрувати велику кількість хешей. В репозиторії на GitHub для утиліти hash-identifier список підтримуваних хешей дуже значний:

ADLER-32 CRC-16 CRC-16-CCITT CRC-32 CRC-32B DES (Unix) Domain Cached Credentials FCS-16 GHash-32-3 GHash-32-5 GOST R 34.11-94 Haval-128 Haval-160 Haval-192 110080 Haval-224 114080 Haval-256 Lineage II C4 MD2 MD4 MD5 MD5 ($pass.$salt) - Joomla MD5 (APR) MD5 (Half) MD5 (HMAC(WordPress)) MD5 (Middle) MD5 (phpBB3) MD5 (Unix) MD5 (WordPress) MySQL MySQL 160bit - SHA-1(SHA-1($pass)) MySQL5 - SHA-1(SHA-1($pass)) NTLM RAdmin v2.x RipeMD-128 RipeMD-160 RipeMD-256 RipeMD-320 SAM - (LM_hash:NT_hash) SHA-1 SHA-1 (Django) SHA-1 (MaNGOS) SHA-224 SHA-256 SHA-256 (Django) SHA-384 SHA-384 (Django) SHA-512 SNEFRU-128 SNEFRU-256 Tiger-128 Tiger-160 Tiger-192 XOR-32 Whirlpool 

та інші…

Що знадобиться

Для початку потрібно встановити Python3 на вашому комп’ютері (є версії для різних платформ). Крім того, вам знадобиться утиліта Hashcat, яку можна завантажити, використовуючи команду apt install hashcat, після оновлення системи за допомогою команд apt update і apt upgrade.

Якщо ви хочете створити ваші власні хеши для тестового злому, то можете скористатися командою у форматі echon PLAINTEXT | (HASHTYPE)sum. Наприклад, при створенні SHA1 хеш для слова «nullbyte» я запустив наступну команду:

~$ echo -n nullbyte | sha1sum 32c0ced56f1fe08583bdb079d85a35a81995018c -

Крок 1. Завантаження і установка Hash-Identifier

Встановити скрипт, написаний на Python, – дуже просто. Відкрийте термінал і виконайте наступну команду:

~$ git clone https://github.com/blackploit/hash-identifier.git Cloning into 'hash-identifier'... remote: Enumerating objects: 21, done. remote: Total 21 (delta 0), reused 0 (delta 0), pack-reused 21 Unpacking objects: 100% (21/21), done. 

Потім подивіться вміст директорії hash-identifier:

~$ cd hash-identifier ~/hash-identifier$ ls hash-id.py README.md screenshots

Ви повинні знайти файл hashid.py, який можна запустити за допомогою команди нижче:

~/hash-identifier$ python3 hash-id.py ######################################################################### # __ __ __ ______ _____ # # /\ \/\ \ /\ \ /\__ _\ /\ _ `\ # # \ \ \_\ \ __ ____ \ \ \___ \/_/\ \/ \ \ \/\ \ # # \ \ _ \ /'__`\ / ,__\ \ \ _ `\ \ \ \ \ \ \ \ \ # # \ \ \ \ \/\ \_\ \_/\__, `\ \ \ \ \ \ \_\ \__ \ \ \_\ \ # # \ \_\ \_\ \___ \_\/\____/ \ \_\ \_\ /\_____\ \ \____/ # # \/_/\/_/\/__/\/_/\/___/ \/_/\/_/ \/_____/ \/___/ v1.2 # # By Zion3R # # www.Blackploit.com # # Root@Blackploit.com # ######################################################################### -------------------------------------------------- HASH: 

Крок 2. Ідентифікація невідомих хешей

В якості пробного підходу за допомогою hash-identifier спробуємо пізнати наступні п’ять невідомих хешей:

Hash 1: 7196759210defdc0 Hash 2: 1bbb234c81ef04a1c2f441253952a556276669d7fc9d1ee765bd4b18f796699d (256) Hash 3: 32c0ced56f1fe08583bdb079d85a35a81995018c (1) Hash 4: 753b27807b690ef889a259f3b219e024bf5c6c33c8d56116943d9285a0b55b2050981f29e6fafa660428c48d7db3c4bd2e8dd48f87c8e90bde5e0c82ed23be10 (512) Hash 5: 5f804b61f8dcf70044ad8c1385e946a8 (md5)

Для початку в командному рядку вводимо перший рядок і швидко отримуємо результат, що швидше за все маємо справу з хешем, використовуваним в MySQL, який спробуємо зламати трохи пізніше.

HASH: 7196759210defdc0 Possible Hashs: [+] MySQL [+] MD5(Middle) Least Possible Hashs: [+] MD5(Half)

Другий хеш, показаний нижче, розпізнається як SHA256. Інший ймовірний варіант – Haval256.

HASH: 1bbb234c81ef04a1c2f441253952a556276669d7fc9d1ee765bd4b18f796699d Possible Hashs: [+] SHA-256 [+] Haval-256 Least Possible Hashs: [+] GOST R 34.11-94 [+] RipeMD-256 [+] SNEFRU-256 [+] SHA-256(HMAC) [+] Haval-256(HMAC) [+] RipeMD-256(HMAC) [+] SNEFRU-256(HMAC) [+] SHA-256(md5($pass)) [+] SHA-256(sha1($pass))

Третій хеш розпізнається як SHA1:

HASH: 32c0ced56f1fe08583bdb079d85a35a81995018c Possible Hashs: [+] SHA-1 [+] MySQL5 - SHA-1(SHA-1($pass)) Least Possible Hashs: [+] Tiger-160 [+] Haval-160 [+] RipeMD-160 [+] SHA-1(HMAC) [+] Tiger-160(HMAC) [+] RipeMD-160(HMAC) [+] Haval-160(HMAC) [+] SHA-1(MaNGOS) [+] SHA-1(MaNGOS2) [+] sha1($pass.$salt) [+] sha1($salt.$pass) [+] sha1($salt.md5($pass)) [+] sha1($salt.md5($pass).$salt) [+] sha1($salt.sha1($pass)) [+] sha1($salt.sha1($salt.sha1($pass))) [+] sha1($username.$pass) [+] sha1($username.$pass.$salt) [+] sha1(md5($pass)) [+] sha1(md5($pass).$salt) [+] sha1(md5(sha1($pass))) [+] sha1(sha1($pass)) [+] sha1(sha1($pass).$salt) [+] sha1(sha1($pass).substr($pass,0,3)) [+] sha1(sha1($salt.$pass)) [+] sha1(sha1(sha1($pass))) [+] sha1(strtolower($username).$pass) 

Четвертий хеш розпізнається як SHA512:

HASH: 753b27807b690ef889a259f3b219e024bf5c6c33c8d56116943d9285a0b55b2050981f29e6fafa660428c48d7db3c4bd2e8dd48f87c8e90bde5e0c82ed23be10 Possible Hashs: [+] SHA-512 [+] Whirlpool Least Possible Hashs: [+] SHA-512(HMAC) [+] Whirlpool(HMAC) 

Нарешті, п’ятий і останній хеш розпізнається як MD5:

HASH: 5f804b61f8dcf70044ad8c1385e946a8 Possible Hashs: [+] MD5 [+] Domain Cached Credentials - MD4(MD4(($pass)).(strtolower($username))) Least Possible Hashs: [+] RAdmin v2.x [+] NTLM [+] MD4 [+] MD2 [+] MD5(HMAC) [+] MD4(HMAC) [+] MD2(HMAC) [+] MD5(HMAC(WordPress)) [+] Haval-128 [+] Haval-128(HMAC) [+] RipeMD-128 [+] RipeMD-128(HMAC) [+] SNEFRU-128 [+] SNEFRU-128(HMAC) [+] Tiger-128 [+] Tiger-128(HMAC) [+] md5($pass.$salt) [+] md5($salt.$pass) [+] md5($salt.$pass.$salt) [+] md5($salt.$pass.$username) [+] md5($salt.md5($pass)) [+] md5($salt.md5($pass)) [+] md5($salt.md5($pass.$salt)) [+] md5($salt.md5($pass.$salt)) [+] md5($salt.md5($salt.$pass)) [+] md5($salt.md5(md5($pass).$salt)) [+] md5($username.0.$pass) [+] md5($username.LF.$pass) [+] md5($username.md5($pass).$salt) [+] md5(md5($pass)) [+] md5(md5($pass).$salt) [+] md5(md5($pass).md5($salt)) [+] md5(md5($salt).$pass) [+] md5(md5($salt).md5($pass)) [+] md5(md5($username.$pass).$salt) [+] md5(md5(md5($pass))) [+] md5(md5(md5(md5($pass)))) [+] md5(md5(md5(md5(md5($pass))))) [+] md5(sha1($pass)) [+] md5(sha1(md5($pass))) [+] md5(sha1(md5(sha1($pass)))) [+] md5(strtoupper(md5($pass))) 

Все пройшло без особливих проблем. Наступний крок – пошук потрібного режиму, відповідного виявленого типу, який буде вказуватися в Hashcat під час злому.

Крок 3. Підбір режиму в Hashcat

При пошуку потрібного режиму ми можемо поглянути на величезний список хешей, підтримуваних в Hashcat. Скорочений варіант з найбільш популярними типами наведено нижче:

Hash-Mode Hash-Name Example 0 MD5 8743b52063cd84097a65d1633f5c74f5 10 md5($pass.$salt) 01dfae6e5d4d90d9892622325959afbe:7050461 20 md5($salt.$pass) f0fda58630310a6dd91a7d8f0a4ceda2:4225637426 30 md5(utf16le($pass).$salt) b31d032cfdcf47a399990a71e43c5d2a:144816 40 md5($salt.utf16le($pass)) d63d0e21fdc05f618d55ef306c54af82:13288442151473 50 HMAC-MD5 (key = $pass) fc741db0a2968c39d9c2a5cc75b05370:1234 60 HMAC-MD5 (key = $salt) bfd280436f45fa38eaacac3b00518f29:1234 100 SHA1 b89eaac7e61417341b710b727768294d0e6a277b 110 sha1($pass.$salt) 2fc5a684737ce1bf7b3b239df432416e0dd07357:2014 120 sha1($salt.$pass) cac35ec206d868b7d7cb0b55f31d9425b075082b:5363620024 130 sha1(utf16le($pass).$salt) c57f6ac1b71f45a07dbd91a59fa47c23abcd87c2:631225 140 sha1($salt.utf16le($pass)) 5db61e4cd8776c7969cfd62456da639a4c87683a:8763434884872 150 HMAC-SHA1 (key = $pass) c898896f3f70f61bc3fb19bef222aa860e5ea717:1234 160 HMAC-SHA1 (key = $salt) d89c92b4400b15c39e462a8caa939ab40c3aeeea:1234 200 MySQL323 1EAFFED54F552AA5 300 MySQL4.1/MySQL5 fcf7c1b8749cf99d88e5f34271d636178fb5d130

У списку вище є два приклади, які можуть відповідати першому хешу (7196759210defdc0), розглянутому нами в попередньому кроці. На перший погляд, режим 200 «MySQL323» найбільш відповідає. Підтвердити гіпотезу можна за допомогою перевірки тестового хеша в hash-identifier.

HASH: 1EAFFED54F552AA5 Possible Hashs: [+] MySQL [+] MD5(Middle) Least Possible Hashs: [+] MD5(Half) 

Точний збіг з потрібним хешем:

HASH: 7196759210defdc0 Possible Hashs: [+] MySQL [+] MD5(Middle) Least Possible Hashs: [+] MD5(Half) 

Якщо ми спробуємо інший тип (300), то побачимо, що результати не збігаються.

HASH: fcf7c1b8749cf99d88e5f34271d636178fb5d130 Possible Hashs: [+] SHA-1 [+] MySQL5 - SHA-1(SHA-1($pass)) Least Possible Hashs: [+] Tiger-160 [+] Haval-160 [+] RipeMD-160 [+] SHA-1(HMAC) [+] Tiger-160(HMAC) [+] RipeMD-160(HMAC) [+] Haval-160(HMAC) [+] SHA-1(MaNGOS) [+] SHA-1(MaNGOS2) [+] sha1($pass.$salt) [+] sha1($salt.$pass) [+] sha1($salt.md5($pass)) [+] sha1($salt.md5($pass).$salt) [+] sha1($salt.sha1($pass)) [+] sha1($salt.sha1($salt.sha1($pass))) [+] sha1($username.$pass) [+] sha1($username.$pass.$salt) [+] sha1(md5($pass)) [+] sha1(md5($pass).$salt) [+] sha1(md5(sha1($pass))) [+] sha1(sha1($pass)) [+] sha1(sha1($pass).$salt) [+] sha1(sha1($pass).substr($pass,0,3)) [+] sha1(sha1($salt.$pass)) [+] sha1(sha1(sha1($pass))) [+] sha1(strtolower($username).$pass)

Відповідно, ще раз переконуємося, що режим 200 обраний правильно.

Крок 4. Розшифрування хеш за допомогою Hashcat

Після ідентифікації типу хеша і підбору потрібно режиму можна приступати до розшифровки пароля в Hashcat. Спочатку потрібно створити словник з паролями, який буде використовуватися в Hashcat для атаки на хеш. У мережі є багато доступних списків, наприклад, RockYou, але в нашому випадку ми будемо створювати тестовий словник example.dict з кількома паролями.

Якщо ви все ще перебуваєте всередині скрипта hash-identifier, натисніть CtrlC, а потім відкрийте файл у текстовому редакторі nano, виконавши наступну команду:

~/hash-identifier$ nano example.dict

Після додавання декількох передбачуваних паролів, один з яких – «hashcat», натискаємо CtrlX для виходу з редактора і вводимо Y, щоб зберегти зміни у файлі. Тепер ми можемо використовувати цей файл в якості словника разом з раніше обраним режимом для злому хеша. Базова команда виглядає приблизно так:

sudo hashcat -m MODE_NUMBER -a 0 HASH_VALUE example.dict

Замість значення HASH_VALUE вказуємо хеш 7196759210defdc0, замість MODE_NUMBER – підібраний раніше режим 200. Результат роботи показаний нижче. Якщо у вас стара система, як в моєму випадку – потрібно вказати параметр force.

~/hash-identifier$ sudo hashcat -200 m-a 0 7196759210defdc0 example.dict --force hashcat (v5.1.0) starting... OpenCL Platform #1: The pocl project ==================================== * Device #1: pthread-Intel(R) Core(TM)2 Duo CPU E7500 @ 2.93 GHz, 1024/3639 MB allocatable, 2MCU /usr/share/hashcat/OpenCL/m00200_a0-optimized.cl: Pure OpenCL kernel not found, falling back to optimized OpenCL kernel Hashes: 1 digests; 1 unique digests, 1 unique salts Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates Rules: 1 Applicable optimizers: * Optimized-Kernel * Zero-Byte * Not-Повторного * Single-Hash * Single-Salt Password minimum length: 0 Password maximum length: 31 Watchdog: Hardware monitoring interface not found on your system. Watchdog: Temperature abort trigger disabled. Watchdog: Temperature retain trigger disabled. * Device #1: build_opts '-I /usr/share/hashcat/OpenCL -D VENDOR_ID=64 -D CUDA_ARCH=0 -D AMD_ROCM=0 -D VECT_SIZE=4 -D DEVICE_TYPE=2 -D DGST_R0=0 -D DGST_R1=1 -D DGST_R2=2 -D DGST_R3=3 -D DGST_ELEM=4 -D KERN_TYPE=200 -D _unroll' * Device #1: Kernel m00200_a0-optimized.44d10a8c.kernel not found in cache! Building may take a while... Dictionary cache hit: * Filename..: example.dict * Passwords.: 17 * Bytes.....: 76 * Keyspace..: 17 - Device #1: autotuned kernel-accel to 1024 - Device #1: autotuned kernel-loops to 1 [s]tatus [p]ause [r]esume [b]ypass [c]heckpoint [q]uit => The wordlist or mask that you are using is too small. This means that hashcat cannot use the full parallel power of your device(s). Unless you supply more work, your cracking speed will drop. For tips on supplying more work, see: https://hashcat.net/faq/morework Approaching final keyspace - workload adjusted. 7196759210defdc0:hashcat Session..........: hashcat Status...........: Cracked Hash.Type........: MySQL323 Hash.Target......: 7196759210defdc0 Time.Started.....: Mon Dec 9 17:00:25 2019 (0 secs) Time.Estimated...: Mon Dec 9 17:00:25 2019 (0 secs) Guess.Base.......: File (example.dict) Guess.Queue......: 1/1 (100.00%) Speed.Dev.#1.....: 0 H/s (0.03 ms) Відновлені........: 1/1 (100.00%) Digests, 1/1 (100.00%) Salts Progress.........: 17/17 (100.00%) Rejected.........: 0/17 (0.00%) Restore.Point....: 0/17 (0.00%) Candidates.#1....: wow -> again HWMon.Dev.#1.....: N/A Started: Mon Dec 9 17:00:17 2019 Stopped: Mon Dec 9 17:00:27 2019 

В результаті ми отримали 7196759210defdc0:hashcat і змогли розшифрувати хеш допомогою порівняння з елементами словника з файлу example.dict.

Висновок

Коли ви маєте справу з невідомим хешем, перший крок – коректна ідентифікація типу. Хоча скрипт hash-identifier – не ідеальний, але дозволяє без особливих проблем впізнати найбільш поширені хеші і відрізнити різні типи хешей, які виглядають однаково, але вимагають різних режим роботи в Hashcat. Навіть якщо hash-identifier не впевнений, з яким типом ви маєте справу, порівняння з результатами прикладів з сайту Hashcat, може допомогти в ідентифікації.

Сподіваюся, це керівництво, присвячене розпізнання невідомих хешей, вам сподобалося.

Джерело

Поділитися
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
Реклама

117

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Схожі записи

Почніть набирати текст зверху та натисніть "Enter" для пошуку. Натисніть ESC для відміни.

Повернутись вверх