Хеш-функция — это собирательное название одного типа функций. Входными данными этого типа функции являются произвольные двоичные данные, а выходными данными являются двоичные данные фиксированной длины. Этот тип функции имеет следующие характеристики:
Однонаправленность: легко и быстро вычислять выходные данные из входных данных, но обратно выводить входные данные из выходных данных. математически невозможно
Ограничение столкновения: чрезвычайно сложно найти два разных входа с одинаковым выходом.
Функции, удовлетворяющие этим характеристикам, можно назвать хеш-функцией. Определенные данные используются в качестве входных данных хэш-функции и вычисляются выходные данные. Этот выходной результат принято называть хэш-значением данных. Основная функция хэш-функции
заключается в безопасном хранении пароля. Вместо того, чтобы сохранять пароль напрямую (то есть не сохранять пароль открытого текста), она сохраняет значение хэш-функции пароля. Во время проверки вам нужно только снова вычислить введенный пароль. Значение хэш-функции сохраненного пароля можно сравнить со значением хэш-функции сохраненного пароля, чтобы узнать, верен ли пароль. Из-за однонаправленности функции хэш-функции и характеристик ограничений столкновения, даже если злоумышленнику будет сложно узнать сам пароль, даже если он получит значение хэш-функции пароля.
Злоумышленник получил значение хэша пароля, неужели нет возможности узнать сам пароль? Конечно, нет. Хотя непосредственный вычисление пароля по значению хэша пароля математически неосуществимо, мы знаем, что функция хэша проста и быстро вычисляет выходные данные из входных данных. В худшем случае вы можете попробовать. Пароли, которые могут установить люди, тоже такие. Если вы попробуете их один за другим, вы все равно можете попробовать их, если вам повезет. Операция, которая постоянно пытается получить входные данные, соответствующие значению хэша, называется взрывом.
Основываясь на этой идее, появился 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 для взрыва различных хэшей.
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 | Low | 2 ms | Low | Minimal |
| 2 | Default | 12 ms | Economic | Noticeable |
| 3 | High | 96 ms | High | Unresponsive |
| 4 | Nightmare | 480 ms | Insane | Headless |
Параметр -a используется для указания режима атаки, значение 0 прямое и непрерывное, то есть взрыв с помощью словаря паролей. Существует пять значений -a, как показано в таблице ниже:
| N | Mode |
|---|---|
| 0 | Straight |
| 1 | Combination |
| 3 | Brute-force |
| 6 | Hybrid Wordlist + Mask |
| 7 | Hybrid Mask + Wordlist |
-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 | Forums, 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 есть три значения хэша и их исходные значения, как показано на рисунке ниже:
Значение хэша пароля входа в 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 356ceae0c89fb6b6bhashcat -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! База данных
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