Як використовувати програмне забезпечення hashcat для вибуху різних хешів

нуль, базові знання

1. Хеш-функція

Хеш-функція — це загальна назва для класу функцій. Вхідними даними цього типу функції є довільні двійкові дані, а вихідними даними є двійкові дані фіксованої довжини, цей тип функції має такі характеристики:

  • Односторонність: вихід простий і швидкий для обчислення з вхідних даних, але математично неможливо вивести вхід з вихідних даних

  • Обмеження зіткнення: надзвичайно важко знайти два різні входи з однаковим виходом

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

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

2.hashcat

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

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


hashcat не тільки швидкий, але й професійно підтримує понад двісті хеш-функцій. Використовуйте команду:

hashcat --help

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

hashcat встановлений за замовчуванням у Kali і може використовуватися безпосередньо.Але мій Kali встановлений у VirtualBox, і я завжди відчуваю, що віртуальні можливості повільніші, тому я хочу використовувати hashcat на фізичному хості. Спочатку перейдіть на офіційний веб-сайт hashchat, щоб завантажити hashcat. На даний момент остання версія v3.5.0, випущена 05.04.2017. З дати оновлення видно, що hashchat сповнений життєвих сил. Це усуває проблеми з компіляцією та завантажує двійковий пакет безпосередньо. Він становить лише 2,7 МБ, що дуже мало порівняно з іграми, які часто коштують десятки ГБ.

Після завершення завантаження розпакуйте hashcat і побачите:

Такі файли, як 32-розрядні та 64-розрядні файли для виконуваних файлів у linux і windows, просто виберіть один із них відповідно до ситуації вашого комп'ютера. Я вибрав hashcat64.bin. Для краси додайте рядок до файлу ~/.bashrc:

alias hashcat='шлях до hashcat64.bin '

Після збереження знову відкрийте віртуальний термінал, щоб файл ~/.bashrc набрав чинності. Таким чином, незалежно від того, де ви знаходитесь, ви можете безпосередньо ввести команду hashcat, не перемикаючи каталоги або вводячи потворний "64.bin", як показано на малюнку нижче.

Гаразд, тепер ви можете почати використовувати hashcat для вибуху різних хешів.

1. Вибуховий md5

md5 має бути однією з найвідоміших і найпоширеніших хеш-функцій. Спочатку використовуйте Python, щоб згенерувати кілька значень md5 для вибуху:

  import hashlib. 
  Паролі = ['123123', 'bond007', 'xxxxxx', '*H@&(NT*@BR#^'] 
  for password in passwords: 
    md5 = hashlib.md5() 
    md5.update(пароль) 
    print md5.hexdigest()

Наведений вище код обчислює хеш-значення чотирьох рядків відповідно:

  4297f44b13955235245b2497399d7a93 
  cbdb7e2b1ed566ceb796af2df07205a3 
  dad3a37aa9d50688b5157698acfd7aee 
  d77db958c179bbffae04b2b908b75c26

Збережіть вихідний результат у файлі md5.hash, одне значення hahs за рядок. Потім використовуйте hashcat, щоб видалити ці значення хеша:

  hashcat -w 3 -a 0 -m 0 --remove -o md5.out md5.hash wordlist.dic

Параметр -w використовується для визначення режимів роботи, їх чотири, як показано в таблиці нижче:

NPerformanceRuntimePower ConsumptionDesktop Impact
1Low2 msLowMinimal
2Default12 msекономічнийпомітний
3High96 msHighUnresponsive
4Nightmare480 msInsaneHeadless

Параметр -a використовується для визначення режиму атаки. Значення 0 пряме та безперервне, тобто використовується словник паролів для вибуху. Значення -a Існує п'ять типів, як показано в таблиці нижче:

NMode
0Straight
1комбінація
3груба сила
6Гібридний список слів + маска
7Hybrid Mask + Wordlist

-m Хеш-функція, яка використовується для визначення хеш-значення, яке потрібно вибухнути, 0 означає, що хеш-функція є md5, інші Значення наведено в таблиці нижче:

NNameCategory
0MD5Raw Hash
300MySQL4.1/MySQL5Сервер бази даних
1000NTLMОпераційні системи
1800sha512crypt $6$, SHA512 (Unix)Операційні системи
2611vBulletin < v3.8.5Форуми, CMS, електронна комерція, фреймворки

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

– remove полягає в тому, що якщо певне значення хеша успішно знищено, значення буде видалено з md5.hash.

За параметром -o слідує ім'я файлу, яке вказує місце збереження результатів вибухових робіт. Останні два параметри

, md5.hash і wordlist.dic, є значеннями хеша та словниками паролів, які потрібно вибухнути відповідно. Значення хеша та словники паролів є одним рядком. Вміст у md5.hash обчислено за допомогою Python. Якщо у вас під рукою немає відповідного словника паролів, ви можете скористатися командою:

  wget -O wordlist.dic https://samsclass.info/123/proj10/500_passwords.txt

下载一个。现在完事具备,按下回车,结果华丽地报错:(

  clGetPlatformIDs(): CL_PLATFORM_NOT_FOUND_KHR

Ймовірно, не вистачає якогось робочого середовища, тому встановіть його. Всього я встановив такі речі:

  sudo apt-get install gcc make p7zip-full git lsb-core 
  wget http://registrationcenter-download.intel.com/akdlm/irc_nas/9019/opencl_runtime_16.1.1_x64_ubuntu_6.4.0.25.tgz 
  tar -xvf opencl_runtime_16.1.1_x64_ubuntu_6.4.0.25.tgz 
  cd opencl_runtime_16.1.1_x64_ubuntu_6.4.0.25 
  sudo ./install.sh

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

  /sbin/ldconfig.real: /usr/lib/nvidia-375/libEGL.so.1 is not a symbolic link 
  /sbin/ldconfig.real: /usr/lib32/nvidia-375/libEGL.so.1 is not a symbolic  посилання 

Але, здається, це ні на що не впливає, тому просто ігноруйте його. Встановивши їх, я знову натиснув Enter і запустив команду, яка спочатку повідомила про помилку. Я виявив, що знову не повідомлялося про помилку, і виконання було завершено миттєво. Після виконання команди перевірте вміст файлів md5.hash і md5.out і виявите, що в md5.hash залишився лише один хеш. Три хеші, які були успішно вибухані, були перенесені у файл md5.out. У md5.out є три значення хеша та його вихідне значення, як показано на малюнку нижче:

2. Вибухнути хеш пароля для входу в Windows 7

Значення хеша пароля для входу в Windows зберігається у файлі SAM, який є абревіатурою «security account manager». Зазвичай він розташований за адресою

  C:\Windows\system32\config\SAM

Файл SAM захищений Windows і не може бути прочитаний безпосередньо за допомогою таких інструментів, як SAMInside. Знайдіть віртуальну машину Windows 7, створіть нового користувача-адміністратора під назвою hashcat і встановіть пароль, завантажте та розпакуйте SAMInside у Windows 7 і запустіть його з правами адміністратора, а потім натисніть File->Import Local Users vis Scheduler, як показано на малюнку нижче: SAMInside може «не відповісти» після

, але це не має значення, терпляче зачекайте кілька секунд, SAMInside виправдає очікування та прочитає потрібний хеш, як показано на малюнку нижче:

Виберіть користувача «hashcat», пароль якого ми хочемо вибухнути, натисніть Ctrl+5, щоб скопіювати NT-hash, а потім поверніться до Ubuntu, де встановлено hashcat, використовуйте таку команду, щоб зберегти скопійоване значення хеша у файл win7.hash:

  echo 356ceae0c89fbb19} 
  356ceae0c89fb65ed6d6aa7a445c4ce5:rush2112

Як отримати файл SAM, будь ласка, зверніться до «Як експортувати хеш-серію Windows 1». Нижче наведено запис про мій процес читання файлу SAM у віртуальній машині Windows 7.

Якщо це фізична машина, запустіть машину за допомогою Win PE і прочитайте файл SAM на диску. Моя віртуальна машина, і ви можете прочитати файли на віртуальному диску, встановивши файл віртуального диска у файлову систему. Віртуальна машина, яку я використовую, - це VirtualBox, і це можна зробити за допомогою команди vdfuse. Якщо у вас немає vdfuse, вам потрібно спочатку встановити virtualbox-fuse:

  sudo apt-get install virtualbox-fuse

Ви також можете завантажити virtualbox -Встановіть інсталяційний пакет запобіжника самостійно.

Після завершення встановлення з'явиться команда vdfuse, і ви можете почати відображення та монтування віртуального диска:

  mkdir -p ~/vmdisk 
  sudo vdfuse -t vmdk -f Win7Pro32.vmdk ~/vmdisk/

Після виконання цього кроку перегляньте каталог ~/vmdisk, який містить три файли: EntireDisk, Partition1 і Partition2, створіть новий каталог:

  mkdir -p ~/vmdisk_en 
  mkdir -p ~/vmdisk_1 
  mkdir -p ~/vmdisk_2

Використовуйте команду mount, щоб змонтувати три файли EntireDisk, Partition1 і Partition2 відповідно:

  sudo mount ~/vmdisk/EntireDisk   ~/vmdisk_en 
  sudo mount ~/vmdisk/Partition1   ~/vmdisk_1 
  sudo mount ~/vmdisk/Partition2   ~/vmdisk_2

виявлено, що не вдалося монтувати EntireDisk, і вміст у Partition1 не те, що я хотів, у Partition2 є файли з віртуальної машини Windows 7, саме те, що я хотів. Скопіюйте наш цільовий файл SAM з vmdisk_fs:

  cp ~/vmdisk_2/Windows/System32/config/SAM ./

До речі, також скопіюйте системний файл:

  cp ~/vmdisk_2/Windows/System32/config/SYSTEM ./

Перевірте вміст файлу SAM, як показано на малюнку нижче, це не звичайний текстовий файл, це справді стиль Windows,

Ну, хоча файл SAM був успішно відкритий, ми все ще не отримали хеш, що нам робити далі? Вміст файлу SAM можна аналізувати лише за допомогою інструментів. Додайте файл sam і системний файл у Kali і запустіть команду:

  samdump2 -o sam.hash SYSTEM sam

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

   Ім'я користувача: RID: LM-hash value: NTLM-hash value 

Зауважте, що цей формат є вихідним форматом команди samdump2, а не «форматом хеш-пароля в Windows».

3. Вибухнути хеш пароля для входу в linux

По-перше, ви повинні мати комп'ютер, на якому працює система linux. Це легко сказати, віртуальна машина буде достатньою. Потім виконайте таку команду, щоб додати нового користувача та встановити пароль для наших цілей вибуху:

  sudo adduser justforfun

Значення хеша пароля входу користувача в linux зберігається у файлі /etc/shadow (примітка: не /etc/passwd). Використовуйте таку команду, щоб переглянути значення хеша пароля входу нового користувача:

test@test-VirtualBox:~$ sudo tail -n 1 /etc/shadow 
justforfun:$6$0fokwg59$6hpMS5dM9wDT/42DDoSD0i0g/wHab50Xs9iEvVLC3V20yf1kRmXZHGXCM0Efv6XU69hdgMZ4FwaMzso4hQaGQ0:17373:0:99999:7:::

Команда tail використовується для читання останніх кількох рядків файлу, за замовчуванням 10 рядків, вкажіть кількість рядків за допомогою параметра -n. Користувач, якого ми щойно створили, природно, знаходиться в останньому рядку, тому він читається за допомогою tail -n 1. Результатом читання є дані, розділені на ":". Перша частина - це ім'я користувача "justforfun", а друга частина - це хеш-значення пароля. Зосереджуємося на другій частині. «$6$», що починається з

, означає, що тип використовуваної хеш-функції є SHA-512. На додаток до «$6$», у linux «$1$» відноситься до MD5, а «$2a$». відноситься до Blowfish, "$2y$" відноситься до Blowfish (правильна обробка 8-бітних символів), "$5$" Відноситься до SHA-256, докладніше див. у Wikipedia:passwd. Крім того, файл /etc/login.defs також описує алгоритм хешування.

Частина "0fokwg59" від початку "$6$" до наступного "$" є сіллю. Що таке сіль? Baidu знає, що відповідь CNB2009 на запитання « Що таке значення солі md5 » проста і легка для розуміння:

Простіше кажучи, це спосіб зробити той самий пароль з різними значеннями хеша, тобто засолення. Сам MD5 є незворотним, але наразі в Інтернеті є багато баз даних, які підтримують зворотний запит. Якщо база даних пароля користувача випадково витікає, хакер може отримати пароль користувача за допомогою зворотного запиту або отримати хеш-код, який частіше з'являється в базі даних. (тобто використовується багатьма людьми) для злому (оскільки це зазвичай слабкий пароль). Значення солі — це додаткове випадкове значення, додане під час процесу хешування пароля. Наприклад, мій ідентифікатор — 123456, а пароль — 123456. Коли він зберігається в базі даних, ви можете обробити рядок «123456/123456/123456 Таким чином, коли є ще один дурний пароль 123456, різні значення хеша все ще можуть бути побудовані та успішно перевірені. У цей час мій ідентифікатор використовується як значення солі для складного хешування пароля. Так що. . Роль значення солі полягає в тому, щоб зменшити втрати, спричинені витоком бази даних. Якщо ваш RP дуже хороший і ви правильно вгадуєте мій пароль 123456, я не можу вас зупинити

Ця відповідь стосується md5, і те саме стосується інших хеш-функцій. Частина після сілі - це значення хеша. Тепер скопіюйте всю другу частину у файл linux.hash. Вміст linux.hash має бути таким:

 $6$0fokwg59$6hpMS5dM9wDT/42DDoSD0i0g/wHab50Xs9iEvVLC3V20yf1kRmXZHGXCM0Efv6XU69hdgMZ4FwaMzso4hQaGQ0

Потім використовуйте таку команду, щоб вибухнути хеш пароля входу в linux:

  hashcat -w 3 -a 0 -m 1800 --remove -o linux.out linux.hash wordlist.dic

Через деякий час вибух завершено, перегляньте результати:

werner@Yasser:~/hashcat$ cat linux.out 
$6$0fokwg59$6hpMS5dM9wDT/42DDoSD0i0g/wHab50Xs9iEvVLC3V20yf1kRmXZHGXCM0Efv6XU69hdgMZ4FwaMzso4hQaGQ0:4321

Видно, що вибух пройшов успішно.

4. Вибух пароля для входу Mysql hash

По-перше, ви повинні мати Mysql. Трапляється, що він є в моїй віртуальній машині. Baidu знає, що хеш-значення пароля для входу Mysql зберігається у файлі user.MYD. Де файл user.MYD? Я теж не знаю, тому просто шукаю:

  test@test-VirtualBox:~$ sudo find / -name user.MYD 
  /var/lib/mysql/mysql/user.MYD

знайдено в /var/lib/mysql/mysql/user.MYD, перегляньте вміст файлу:

  sudo cat /var/lib/mysql/mysql/user.MYD

Це не звичайний текстовий файл, але все одно видно, що значення хеша пароля входу root користувача:

  6B825255FB466413D6B1B724644E23428C94BBCB

Збережіть це значення у файлі mysql.hash, використовуйте таку команду, щоб вибухнути хеш пароля входу mysql:

 {

}

Через деякий час вибухові роботи завершені, перегляньте результати:

  werner@Yasser:~/hashcat$ cat mysql.out 
  6b825255fb466413d6b1b724644e23428c94bbcb:viper

Видно, що вибух пройшов успішно.

5. Вибуховий дискуз! Пароль форуму

Discuz! Це відома програма форуму php у Китаї і широко використовується. Тепер давайте підірвемо Discuz! Хеш-значення пароля користувача. Спочатку потрібно знайти значення хеша. Де його знайти? Звичайно, від Discuz! в базі даних.

можна обговорити! Де база даних? Ось як я вирішив це, завантаживши останню версію Discuz з його офіційного сайту! Вихідний код, запустіть і встановіть, і ви отримаєте Discuz! База даних :smile:

Discuz! Ім'я бази даних за замовчуванням ultrax, а таблиця pre_ucenter_members зберігає хеш-значення пароля для входу. "pre_" є префіксом за замовчуванням, який можна змінити під час встановлення, але "ucenter_members" не зміниться. Використовуйте такий оператор sql, щоб запитати значення хеша пароля для входу:

  select password,salt from pre_ucenter_members; 

Збережіть значення hash і salt у файл:

  echo 69bcba126b93c6f397983629a0f70553:c13fd9 > discuz.hash

Значення hash і salt знаходяться в одному рядку, розділені на ":". Нарешті, використовуйте таку команду, щоб вибухнути хеш пароля входу Discuz:

  hashcat -w 3 -a 0 -m 2611 --remove -o discuz.out discuz.hash wordlist.dic

Через деякий час вибухові роботи завершені, перегляньте результати:

  werner@Yasser:~/hashcat$ cat discuz.out 
  69bcba126b93c6f397983629a0f70553:c13fd9:winter

Видно, що вибухові роботи пройшли успішно.

6. Тест великого словника

Наразі ми використовуємо невеликий словник лише з 500 слів, і це займає лише мить, щоб успішно вибухнути різні хеші. Це не дивно? Це тому, що я навмисно встановив слабкий пароль у словнику, щоб практикувати використання hashcat, інакше це не змусить людей почуватися погано, якщо вони не зможуть його вибухнути. На практиці неможливо мати таку удачу. Давайте випадково обчислимо значення md5 менш слабкого пароля, використовуємо великий словник, щоб вибухнути, з одного боку, спробуйте удачу, а з іншого боку, подивіться, наскільки швидко може бути hashcat.

Спочатку обчисліть значення md5:

  import hashlib 
  md5 = hashlib.md5() 
  md5.update("werner123456!!!") 
  print md5.hexdigest()

Вихід:

  b17133f9abff287ed0546c1af2b171f7

Потім виберіть Словник розміром 10,5G, що містить 940 мільйонів паролів, і почніть вибух:

  hashcat -w 3 -a 0 -m 0 --remove -o big.out b17133f9abff287ed0546c1af2b171f7 big.dic

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

  Started: Wed Jul 26 22:55:27 2017 
  Stopped: Wed Jul 26 23:02:28 2017

Виявилося, що це зайняло лише 7 хвилин! Я думав, що це займе 7 годин, що в 60 разів швидше, ніж я очікував! Шкода, що значення хеша не було успішно вибухнуто. Здається, що "werner123456!!!" немає в словнику паролів. Здається, мені потрібно підготувати словник паролів на 100G, але такий великий словник дуже незручно зберігати і переносити, чи немає іншого способу? Звичайно, пам'ятаєте режим атаки? Ми використовували режим "Прямий". Далі, давайте вивчимо кілька інших режимів.

7. Резюме

Використовуючи hashcat для вибуху хеша, перше, що потрібно зробити, це знайти правильний хеш. Різні системи та різне програмне забезпечення мають різні місця зберігання хеша, і значення хеша потрібно точно знайти; По-друге, правильно визначити тип хеша, визначити, чи підтримує hashcat цей хеш, і вибрати правильний параметр -m, інакше майже неможливо досягти успіху; По-третє, словник паролів має бути кращим, чи можна його успішно вибухнути, залежить від словника. Незважаючи на те, що чим більший словник паролів, тим краще, все одно краще бути більшим. hashcat також відомий своєю швидкістю. Великі словники не є проблемою для hashcat. Ось кращий словник: Попередні ворота витоку + колекція словників часто використовуваних слабких паролів. 7Z, пароль для декомпресії: anywlan. Крім того, якщо ви зібрали багато невеликих словників, ви можете об'єднати, сортувати та дедублікувати невеликі словники, щоб отримати великий словник для полегшення вибуху hashcat. Якщо невеликі словники знаходяться в одному каталозі, ви можете зробити це за допомогою однієї команди:

    cat * | sort | uniq > Merge.dic

Що, якщо невеликі словники організовані за категоріями та розподілені в багаторівневих каталогах? Використання лише команди cat, очевидно, недостатньо, але насправді потрібна лише одна команда. Якщо припустити, що всі маленькі словники зберігаються в каталозі MyDictionary, команду можна записати так:

    find ./MyDictionary -type f -exec cat {} \;  | sort | uniq > Merge.dic

Попередня стаття:Які типи зашифрованих файлів може розшифрувати майстер відновлення пароля документа? Нижче наведено файли формату, які підтримують зломання
Наступна стаття:hashcat Кілька режимів атак hashcat

Останні статті

Закріплена стаття

  • Focus on Word, Excel, PPT, PDF, RAR, ZIP, 7Z, Compressed File, Office Encrypted File Unlock Decryption
  • We provide users with high-quality file compression password recovery, PDF unlocking, and Word password recovery services.
  • Copyright © Document Password Recovery Master Online Decryption Platform