Вступление:
Позвольте мне предварить этот пост, сказав, что я никоим образом не являюсь мастером в области информационной безопасности, криптографии, программирования или в написании статей по любому из этих предметов. Я сам только начинаю изучать некоторые из этих областей, как, я уверен, и некоторые из вас, и я предполагаю, что вы, как и я, наткнулись на эти области из чистого любопытства, которое (если вы в чем-то похожи на меня) поднялось до стать потребностью знать больше, почти навязчивой идеей. Поэтому, публикуя это, я надеюсь, что это поможет преодолеть некоторые технические пробелы или, по крайней мере, даст решение конкретной проблемы, с которой вы столкнулись, или, как минимум, даст вам отправную точку в написании некоторых простых сценариев для решения основных (даже если устаревшие) проблемы . Эта статья предназначена только для образовательных целей, поскольку мы все знаем, что должны оставаться этичными как в учебе, так и в жизни, насколько это возможно.
О чем пойдет речь в этой статье.
- Создание очень простого взломщика хэшей MD5 с помощью языка программирования Python.
Чего не будет в этой статье.
- Создание виртуального окружения для нашей программы (об этом я расскажу в отдельной статье).
- Установка необходимых зависимостей для запуска нашей программы (т.е. установка зависимостей pip)
- Создание пользовательских списков слов для взлома определенных целевых хэшей (опять же, это запланированная статья в будущем)
- Установка Python IDE любого типа (подойдет любой текстовый редактор, однако в этой статье я буду использовать Pycharm CE)
В этой статье предполагается, что у вас есть базовые знания в области программирования, а также базовые настройки среды разработки Python (или, по крайней мере, знания о том, как настроить указанную среду). В этой статье рассматривается взлом хэша MD5, который, если вы читаете это, вы, скорее всего, знаете, не является сложной задачей, и алгоритм MD5 не является самым безопасным способом хеширования любого типа конфиденциальных данных, тем более что эта статья описать простые методы, которые можно использовать не только для написания взломщика MD5, но и для взлома более сложных хэшей паролей (по крайней мере, в теории!). Итак, давайте погрузимся…
Мы начнем наш скрипт Python с импорта необходимых модулей.
import hashlib
Для этого конкретного примера мы будем предельно простыми (в следующей статье мы рассмотрим превращение нашего скрипта в CLI-приложение на Python, а также измерим время, необходимое для взлома хэша или для запуска нашего списка слов).
Мы просто начинаем с импорта hashlib, который включен в стандартную библиотеку Python. Если вы раньше не работали с hashlib или хотели бы узнать о нем больше, не стесняйтесь взглянуть на документацию по адресу https://docs.python.org/3/library/hashlib.html.
Во-вторых, мы определим наш хэш, который мы хотим взломать, и список слов для использования.
import hashlib HASH = '5f4dcc3b5aa765d61d8327deb882cf99' PASSLIST = [ 'test', 'name', 'hello', 'password', 'goodbye' ]
После импорта нашего необходимого модуля Python для хеширования наших догадок и проверки на исходный хэш мы предоставим хеш MD5, который мы будем взломать, а также простой список слов Python для итерации, хеширования каждого предположения и проверки на соответствие нашему оригинальный хэш. В этом примере я использую очень простой пароль, который называется пароль, и я сгенерировал хэш MD5 онлайн через https://www.webatic.com/md5-convertor.
Далее мы напишем нашу основную функцию, в которой находится наш логин итерации.
import hashlib HASH = '5f4dcc3b5aa765d61d8327deb882cf99' PASSLIST = [ 'test', 'name', 'hello', 'password', 'goodbye' ] def main(): for word in PASSLIST: guess = hashlib.md5(word.encode('utf-8')).hexdigest() if guess.upper() == HASH or guess.lower() == HASH: print(f'[+] Password found: {word}') exit(0) else: print(f'[-] Guess: {word} incorrect...') print('Password not found in wordlist...')
Давайте пробежимся по этому очень быстрому шаг за шагом.
- Определим нашу функцию в python def main():
- Создайте наш цикл для итерации по нашему списку слов, проверяя каждое слово по нашему хэшу, сначала хешируя это слово с помощью hashlib и сравнивая его с нашим исходным хэшем для слова в PASSLIST:
- Определите нашу переменную предположения, которая является текущей итерацией нашего цикла через наш список слов, хэшированный в MD5 через hashlib
- Условный оператор, проверяющий, соответствует ли наше хешированное предположение исходному хэшу (мы используем функции Python, встроенные в функции upper() и lower() в качестве проверки работоспособности, просто чтобы убедиться, мы дважды проверяем хэш как с прописными, так и с строчными буквами)
- если у нас есть совпадение между нашей хешированной догадкой и нашим исходным хэшем, мы напечатаем сообщение об успехе, а затем закроем наш скрипт.
print('Password not found in wordlist...')
- Иначе наша догадка не совпадает, мы напечатаем сообщение о том, что конкретная догадка не удалась, и мы продолжим нашу итерацию
print(f'[-] Guess: {word} incorrect...')
- Наш последний шаг в функции main будет состоять в том, чтобы просто напечатать сообщение, если мы исчерпали наш предоставленный «словарь» без совпадения.
print('Password not found in wordlist...')
Наконец, мы вызовем нашу основную функцию в нашем скрипте.
import hashlib HASH = '5f4dcc3b5aa765d61d8327deb882cf99' PASSLIST = [ 'test', 'name', 'hello', 'password', 'goodbye' ] def main(): for word in PASSLIST: guess = hashlib.md5(word.encode('utf-8')).hexdigest() if guess.upper() == HASH or guess.lower() == HASH: print(f'[+] Password found: {word}') exit(0) else: print(f'[-] Guess: {word} incorrect... {guess}') print(f'Password not found in wordlist...') if __name__ == '__main__': main()
Если вы знакомы с Python, то этот последний фрагмент кода будет для вас естественным, если вы новичок в Python и задаетесь вопросом, почему этот фрагмент кода находится в нашем скрипте, я призываю вас провести некоторое исследование по этому вопросу, эта статья является отличным отправная точка https://medium.com/python-features/understanding-if-name-main-in-python-a37a3d4ab0c3
Если вы следовали этому руководству, ваш код должен выглядеть так же, как код выше. Когда скрипт запустится, вы должны получить что-то вроде этого в своем терминале.
[-] Guess: test incorrect... [-] Guess: name incorrect... [-] Guess: hello incorrect... [+] Password found: password
Спасибо за чтение.
Большое спасибо, что нашли время, чтобы прочитать эту статью. В этой серии будут другие шаги, чтобы показать, как превратить этот сценарий в приложение CLI, добавить дополнительные хеш-алгоритмы для взлома и в целом сделать сценарий более сложным. Следите за обновлениями!!!