Вступление:

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

О чем пойдет речь в этой статье.

  • Создание очень простого взломщика хэшей 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, добавить дополнительные хеш-алгоритмы для взлома и в целом сделать сценарий более сложным. Следите за обновлениями!!!