Хеш-функция — это собирательное название одного типа функций. Входными данными этого типа функции являются произвольные двоичные данные, а выходными данными являются двоичные данные фиксированной длины. Этот тип функции имеет следующие характеристики:
Однонаправленность: выходные данные легко и быстро рассчитываются из входных данных, но обратный вывод входных данных из выходных данных математически неосуществим.
Ограничение столкновения: чрезвычайно сложно найти два разных входа с одинаковым выходом.
Функции, удовлетворяющие этим характеристикам, могут называться хэш-функциями. Определенные данные используются в качестве входных данных хэш-функции и вычисляются выходные данные. Этот выходной результат принято называть хэш-значением данных.
Одной из основных функций хэш-функции является безопасное хранение пароля. Вместо того, чтобы напрямую сохранять пароль (то есть не сохранять пароль в открытом тексте), она сохраняет значение хэш-функции пароля. Во время проверки вам нужно только снова вычислить введенный пароль. Значение хэш-функции можно сравнить со значением хэш-функции сохраненного пароля, чтобы узнать, верен ли пароль. Из-за однонаправленности функции хэш-функции и характеристик ограничений столкновения, даже если злоумышленнику будет сложно узнать сам пароль, даже если он получит значение хэш-функции пароля.
Злоумышленник получил значение хэша пароля, неужели нет возможности узнать сам пароль? Конечно, нет. Хотя непосредственный вычисление пароля по значению хэша пароля математически неосуществимо, мы знаем, что функция хэша проста и быстро вычисляет выходные данные из входных данных. В худшем случае вы можете попробовать. Пароли, которые могут установить люди, тоже такие. Если вы попробуете их один за другим, вы все равно можете попробовать их, если вам повезет. Операция, которая постоянно пытается получить входные данные, соответствующие значению хэша, называется взрывом.
Основываясь на этой идее, появился 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 для взрыва различных хэшей.
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 мс | низкий | минимальный |
| 2 | Default | 12 мс | экономичный | заметный |
| 3 | высокий | 96 мс | Высокий | Неотвечающий |
| 4 | Кошмар | 480 мс | Безумный | Безголовый |
Параметр -a используется для указания режима атаки. Значение 0 прямое и непрерывное, то есть используется словарь паролей для взрыва. Существует пять значений -a, как показано в таблице ниже:
| N | Mode |
|---|---|
| 0 | Straight |
| 1 | Combination |
| 3 | Brute-force |
| 6 | Гибридный список слов + маска |
| 7 | Гибридная маска + список слов |
-m используется для указания хэша для взрыва Хеш-функция значения, 0 означает, что хеш-функция является MD5, а другие значения показаны в следующей таблице:
| N | Name | Category |
|---|---|---|
| 0 | MD5 | Raw Hash |
| 300 | MySQL4.1/MySQL5 | Сервер базы данных |
| 1000 | NTLM | Операционные системы |
| 1800 | sha512crypt $6$, SHA512 (Unix) | Операционные системы |
| 2611 | vBulletin < 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 есть три значения хэша и их исходные значения, как показано на рисунке ниже:
Значение хэша пароля для входа в 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».
Прежде всего, у вас должен быть компьютер под управлением системы 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
Видно, что взрыв прошел успешно.
Сначала вам нужен 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
Видно, что взрыв прошел успешно.
Discuz! Это хорошо известная программа форума php в Китае и широко используется. Теперь давайте взорвем Discuz! Хеш-значение пароля пользователя. Сначала нужно найти значение хэша, где его найти? От Discuz, конечно! в базе данных.
Дискуз доступен! Где база данных? Вот как я решил это, скачайте последнюю версию Discuz с его официального сайта! Исходный код, запустите установку и получите Discuz! База данных
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
Видно, что взрывные работы прошли успешно.
До сих пор мы используем небольшой словарь всего из 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 г, но такой большой словарь очень неудобно сохранять и переносить, разве нет другого способа? Конечно, есть, помните режим атаки? Мы использовали режим «прямой». Далее давайте рассмотрим несколько других режимов.
Чтобы использовать hashcat для взрыва хэша, первым делом нужно найти правильный хэш. Разные системы и разное программное обеспечение имеют разные места хранения хэша, и вам необходимо точно найти значение хэша. приходить; Второе — правильно определить тип хэша, определить, поддерживает ли hashcat этот тип хэша, и выбрать правильный параметр -m, иначе успех практически невозможен; В-третьих, словарь паролей должен быть лучше. В конечном итоге, может ли взрыв быть успешным, зависит от словаря. Хотя чем больше словарь паролей, тем лучше, все равно лучше быть больше. hashcat также известен своей скоростью. Большие словари не являются проблемой для hashcat. Вот лучший словарь: Сборник словарей предыдущих утечек + часто используемых слабых паролей. 7Z, пароль распаковки: anywlan. Кроме того, если вы собрали много небольших словарей, вы можете объединить, отсортировать и удалить дублирование небольших словарей, чтобы получить большой словарь для облегчения взрыва hashcat. Если небольшие словари находятся в одном каталоге, вы можете сделать это с помощью одной команды:
cat * | sort | uniq > Merge.dic
Что, если небольшие словари организованы по категориям и распределены по многоуровневым каталогам? Использовать только команду cat, очевидно, недостаточно, но на самом деле достаточно всего одной команды. Если предположить, что маленькие словари хранятся в каталоге MyDictionary, команду можно записать так:
find ./MyDictionary -type f -exec cat {} \; | Сортировать | uniq > Merge.dic