Как использовать программное обеспечение hashcat для взрыва различных хешей

Ноль, базовые знания

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

Хеш-функция — это собирательное название одного типа функций. Входными данными этого типа функции являются произвольные двоичные данные, а выходными данными являются двоичные данные фиксированной длины. Этот тип функции имеет следующие характеристики:

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

  • Ограничение столкновения: чрезвычайно сложно найти два разных входа с одинаковым выходом.

Функции, удовлетворяющие этим характеристикам, можно назвать хеш-функцией. Определенные данные используются в качестве входных данных хэш-функции и вычисляются выходные данные. Этот выходной результат принято называть хэш-значением данных. Основная функция хэш-функции

заключается в безопасном хранении пароля. Вместо того, чтобы сохранять пароль напрямую (то есть не сохранять пароль открытого текста), она сохраняет значение хэш-функции пароля. Во время проверки вам нужно только снова вычислить введенный пароль. Значение хэш-функции сохраненного пароля можно сравнить со значением хэш-функции сохраненного пароля, чтобы узнать, верен ли пароль. Из-за однонаправленности функции хэш-функции и характеристик ограничений столкновения, даже если злоумышленнику будет сложно узнать сам пароль, даже если он получит значение хэш-функции пароля.

2.hashcat

Злоумышленник получил значение хэша пароля, неужели нет возможности узнать сам пароль? Конечно, нет. Хотя непосредственный вычисление пароля по значению хэша пароля математически неосуществимо, мы знаем, что функция хэша проста и быстро вычисляет выходные данные из входных данных. В худшем случае вы можете попробовать. Пароли, которые могут установить люди, тоже такие. Если вы попробуете их один за другим, вы все равно можете попробовать их, если вам повезет. Операция, которая постоянно пытается получить входные данные, соответствующие значению хэша, называется взрывом.

Основываясь на этой идее, появился hashcat. Говорят, что hashcat был создан, чтобы доказать, что взрыв хэша очень прост. hashcat утверждает, что является самым быстрым в мире инструментом для взрыва хэша, и он даже поддерживает GPU и 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='path to hashcat64.bin '

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

Хорошо, теперь вы можете начать использовать hashcat для взрыва различных хэшей.

1. Взрыв 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 msLowMinimal
2Default12 msEconomicNoticeable
3High96 msHighUnresponsive
4Nightmare480 msInsaneHeadless

Параметр -a используется для указания режима атаки, значение 0 прямое и непрерывное, то есть взрыв с помощью словаря паролей. Существует пять значений -a, как показано в таблице ниже:

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.5Forums, CMS, E-Commerce, Frameworks

Эта таблица слишком длинная. Я покажу только несколько хэш-функций, рассматриваемых в этой статье. Вы можете увидеть их все с помощью параметра – 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 link

Но, похоже, это ни на что не влияет, просто проигнорируйте это. После их установки снова нажмите 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 356ceae0c89fb6b6b 
  hashcat -w 3 -a 0 -m 1000 --remove -o win7.out win7.hash wordlist.dic

Через некоторое время выполнение завершено, проверьте файл win7.out и обнаружите, что взрыв прошел успешно. Пароль для входа в hashcat пользователя: rush2112:

  werner@Yasser:~/hashcat$ cat win7.out 
  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$», начинающийся с

, означает, что тип используемой хэш-функции является 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, разные значения хэша все еще могут быть построены и успешно проверены. В этот момент мой идентификатор используется как солевое значение для сложного хэширования пароля. Так что. . Роль значения соли заключается в уменьшении потерь, вызванных утечкой базы данных. Если у вас очень хороший 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:

 {

}

Через некоторое время взрыв завершен, посмотрите результаты:

  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; 

Сохранить значение хэша и значение соли в файл:

     echo   69bcba126b93c6f397983629a0f70553: c13fd9   >   discuz.hash 

Значение хэша и значение соли находятся в одной строке и разделены на «:». Наконец, используйте следующую команду для взрыва хэша пароля входа в 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!!!» нет в словаре паролей. Кажется, мне нужно подготовить словарь паролей на 100 г, но такой большой словарь очень неудобно сохранять и переносить, разве нет другого способа? Конечно, есть, помните режим атаки? Мы использовали режим «прямой». Далее давайте рассмотрим несколько других режимов.

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

Последние статьи

Верхняя статья

  • Сосредоточьтесь на Word, Excel, PPT, PDF, RAR, ZIP, 7Z, сжатых пакетах, разблокировке и расшифровке зашифрованных файлов Office
  • Мы предоставляем пользователям высококачественное восстановление пароля сжатого пакета файлов, разблокировку PDF и восстановление пароля Word
  • Авторские права © Мастер восстановления пароля документа Платформа онлайн-дешифрования