Як використовувати програмне забезпечення 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 і побачте:

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

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

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

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

1. Blasting MD5

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

  import hashlib. 
  Паролі = ['123123', 'bond007', 'xxxxxx', '*H@&(NT*@BR#^'] 
  для пароля в паролі: 
    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 використовується для визначення режиму роботи. Існує чотири типи, як показано в таблиці нижче:

NПродуктивністьЧас виконанняСпоживання енергіїВплив на робочий стіл
1Low2 мснизькиймінімальний
2Default12 мсекономічнийпомітний
3високий96 мсВисокийНе реагує
4Кошмар480 мсБожевільнийБезголовий

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

.
NMode
0Straight
1Combination
3Brute-force
6Hybrid Wordlist + Mask
7Hybrid Mask + Wordlist

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

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

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

– 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, 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 356CEAE0C89FB65ED6D6AA7A445C4CE5 < 
  356ceae0c89fb65ed6d6aa7a445c4ce5:rush2112

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

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

  sudo apt-get install virtualbox-fuse

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

Після завершення встановлення з'явиться команда 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

Я виявив, що монтування цілого диска не вдалося, і вміст у 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$» на початку

означає, що тип використовуваної хеш-функції є SHA512, за винятком «$6$», у linux «$1$» відноситься до MD5, а «$2a$». відноситься до Blowfish, "$2y$" відноситься до Blowfish (правильна обробка 8-бітних символів), "$5$" Відноситься до SHA256, докладніше див. у 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

По-перше, ви повинні мати 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 Хеш:

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

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

  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

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

  Початок: Ср Лип 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 {} \;  | Сортувати | uniq > Merge.dic

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

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

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