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

Опубликовано в: · Авторы:Восстановление пароля

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

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

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

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

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

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

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

2.hashcat

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

Основываясь на этой идее, появился hashcat. Говорят, что hashcat был создан, чтобы доказать, что взрыв hash очень прост. hashcat утверждает, что является самым быстрым в мире инструментом для взрыва хэша, и он даже поддерживает GPU и 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='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ПроизводительностьВремя выполненияЭнергопотреблениеВлияние на рабочий стол
1Низкий2 мснизкийминимальный
2Default12 мсэкономичныйзаметный
3высокий96 мсВысокийНеотвечающий
4Кошмар480 мсБезумныйБезголовый

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

NMode
0Straight
1Combination
3Brute-force
6Гибридный список слов + маска
7Гибридная маска + список слов

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

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

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

– 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 Ссылка 
  /sbin/ldconfig.real: /usr/lib32/nvidia-375/libEGL.so.1 является не символической ссылкой

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

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

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

  Началось: Ср Июл 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 {} \;  | Сортировать | uniq > Merge.dic

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

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

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