Статья Crunch — генератор паролей: основы использования и практические примеры

Что такое Crunch
Crunch – генератор словарей паролей, в которых можно определить стандартную или заданную кодировку. Crunch может произвести все возможные комбинации и перестановки.

Особенности:
  • crunch генерирует списки слов (WordList) как методом комбинации, так и методом перестановки
  • он может разбить вывод по количеству строк или размеру файла
  • поддерживается возобновление процесса после остановки
  • образец (паттерн) поддерживает числа и символы
  • образец поддерживает по отдельности символы верхнего и нижнего регистра
  • работая с несколькими файлами, выводит отчёт о статусе
  • новая опция -l для буквальной поддержки, @,% ^
  • новая опция -d для ограничения дублирования символов, смотрите man-файл для деталей
  • поддержка unicode
В методах взламывания пароля, WordList (список слов) – один из самых важных файлов. В этом списке созданы все возможные комбинации пароля.

Методы взламывания пароля бывают:

1. Dictionary attack

Перебор по словарю. Словари содержат наиболее часто используемые пароли. Плюсами данной атаки является повышение шанса подобрать пароль при значительной экономии времени. Минус — не даёт 100% уверенности в подборе пароля.

2. Brute Force Attack

Плюс — если перебрать все возможные комбинации, то можно говорить 100% уверенности о взломе пароля. Минус — необходимость большого количества ресурсов (вычислительных мощностей и времени).

3. Hybrid Attack

Работа ведётся по словарю, но добавляются некоторые числа и символы к словам.

4. Syllable Attack

Это – комбинация brute force attack и dictionary attack.

5. Rule-Based Attack

Нападение, основанное на правилах. Используется, когда нападавший получает некоторую информацию о пароле.


Использование crunch
Простой пример использования:
crunch <минимальная-длина> <максимальная-длина> [набор символов]

Например:
Код:
crunch 3 7 abcdef

Этот пример создаст все пароли от 3 до 7 символов, содержащих символы "abcdef" в качестве набора символов и выведет всё это в стандартный вывод.

Ещё один пример:
crunch <минимальная-длинна> <максимальная длина> [-f <путь до charset.lst> имя-набора-символов] [-o wordlist.txt или START] [-t [FIXED]@@@@] [-s startblock]
  • @ означает символы в нижнем регистре
  • , означает символы в верхнем регистре
  • % означает цифры
  • ^ означает разные символы, общим количеством 33. Вы можете посмотреть их командой:
Код:
crunch 1 1 -t ^


Как создать словарь в crunch
Перейдите в Приложения > Kali Linux > Password Attacks > Offline Attacks > crunch

Или введите в Терминале:
Код:
crunch

Правила для создания словаря.

crunch <min> <max> <charset> -t <pattern> – o <filename.lst>

Где,
  • min = минимальное количество символов в паролях словаря
  • max = максимальное количество символов в паролях словаря
  • charset = символы, которые хотите добавить в пароли в словаре. Например: abcd или 123455
  • pattern = образец пароля. Например хотите создать словарь вида 98*******, т.е. первые две цифры будут статические и последние цифры – переменными.
Например, я хочу создать словарь из минимум 10 цифр, максимум 10 цифр, с символами abcd987 и образцом abc@@@@@@@ с последующим сохранением файла словаря на рабочем столе.

Вводим в терминале:
Код:
crunch 10 10 abcd987 -t abc@@@@@@@ -o /root/Desktop/file.txt

это создаст 823543 комбинаций пароля.

29586


Примеры использования crunch

Пример 1
Код:
crunch 1 8
crunch отобразит список слов, который начинается с a и заканчивается на zzzzzzzz

Пример 2
Код:
crunch 1 6 abcdefg
crunch отобразит список слов, в паролях которого используется набор abcdefg который начинается на a и заканчивается gggggg

Пример 3
Код:
crunch 1 6 abcdefg
В конце строки есть символ пробела. Чтобы crunch мог использовать пробел, вам нужно экранировать его, поставив перед ним символ . В этом примере вы можете также использовать кавычки вокруг букв тогда вам не нужен , например “abcdefg “. Crunch отобразит список слов, использующих набор символов abcdefg , который начинается на a, а заканчивается на шесть пробелов.

Пример 4
Код:
crunch 1 8 -f charset.lst mixalpha-numeric-all-space -o wordlist.txt
crunch будет использовать набор символов mixalpha-numeric-all-space из charset.lst и выведет сгенерированные пароли в файл с названием wordlist.txt. Этот файл начнётся с a и закончится на ” “

[B]Пример 5[/B]
[CODE]crunch 8 8 -f charset.lst mixalpha-numeric-all-space -o wordlist.txt -t @@dog@@@ -s cbdogaaa
crunch сгенерирует восьмисимвольный список слов, используя набор символов mixalpha-number-all-space character set из charset.lst и запишет список паролей в файл wordlist.txt. Файл начнётся с cbdogaaa и закончится на " dog "
 

noskov3

Well-known member
20.07.2020
65
0
BIT
472
Доброй ночи! Хочу создать словарь из 6-ти символов, в котором сперва идут три цифры, затем три буквы, как мне это сделать со всеми возможными комбинациями? Или же мне нужно создавать много словарей с комбинациями букв для каждой группы чисел по отдельности? Спасибо за ответ!
 

Местный

Grey Team
23.04.2023
265
119
BIT
537
Доброй ночи! Хочу создать словарь из 6-ти символов, в котором сперва идут три цифры, затем три буквы, как мне это сделать со всеми возможными комбинациями? Или же мне нужно создавать много словарей с комбинациями букв для каждой группы чисел по отдельности? Спасибо за ответ!
GPT такое решает легко. А так у тебя будет 140 миллионов комбинаций, если ты собрался на первые три места ставить от 0 до 9 цифры, а на 4-6 a-z или A-Z 26 букв*2(смена регистра, может же быть строчная или прописная буква) и того
10*10*10*52*52*52 = 140 миллионов комбинаций. Ты уверен, что это надо тебе?
import string

def generate_all_passwords():
"""
Генерирует все возможные пароли по шаблону digit,digit,digit,[a-z],[a-z],[a-z],
где [a-z] включает в себя все буквы английского алфавита (верхний и нижний регистр).
"""
for digit1 in string.digits:
for digit2 in string.digits:
for digit3 in string.digits:
for letter1 in string.ascii_letters:
for letter2 in string.ascii_letters:
for letter3 in string.ascii_letters:
password = f'{digit1}{digit2}{digit3}{letter1}{letter2}{letter3}'
yield password

# Пример использования
for password in generate_all_passwords():
print(password)


Объяснение:

- Скрипт использует вложенные циклы for для перебора всех возможных вариантов для каждой позиции в пароле.
- yield password вместо return password используется для создания генератора, который возвращает пароли по одному, а не все сразу. Это позволяет избежать хранения всех паролей в памяти, что особенно важно при большом количестве комбинаций.

Важно:

- Этот скрипт будет генерировать *все* возможные пароли по заданному шаблону.
- Число комбинаций очень велико (1000 * 52 * 52 * 52 = 140,608,000), поэтому процесс генерации может занять очень много времени.
- Убедитесь, что у вас достаточно ресурсов (времени, памяти) для выполнения этого скрипта.

Альтернатива:

Если вам не нужно генерировать все комбинации, а просто получить случайный набор паролей, то используйте исходный скрипт с random.choice, но измените количество итераций цикла for в соответствии с количеством паролей, которые вы хотите получить.

3,792/12,000
 
  • Нравится
Реакции: noskov3

noskov3

Well-known member
20.07.2020
65
0
BIT
472
GPT такое решает легко. А так у тебя будет 140 миллионов комбинаций, если ты собрался на первые три места ставить от 0 до 9 цифры, а на 4-6 a-z или A-Z 26 букв*2(смена регистра, может же быть строчная или прописная буква) и того
10*10*10*52*52*52 = 140 миллионов комбинаций. Ты уверен, что это надо тебе?
import string

def generate_all_passwords():
"""
Генерирует все возможные пароли по шаблону digit,digit,digit,[a-z],[a-z],[a-z],
где [a-z] включает в себя все буквы английского алфавита (верхний и нижний регистр).
"""
for digit1 in string.digits:
for digit2 in string.digits:
for digit3 in string.digits:
for letter1 in string.ascii_letters:
for letter2 in string.ascii_letters:
for letter3 in string.ascii_letters:
password = f'{digit1}{digit2}{digit3}{letter1}{letter2}{letter3}'
yield password

# Пример использования
for password in generate_all_passwords():
print(password)


Объяснение:

- Скрипт использует вложенные циклы for для перебора всех возможных вариантов для каждой позиции в пароле.
- yield password вместо return password используется для создания генератора, который возвращает пароли по одному, а не все сразу. Это позволяет избежать хранения всех паролей в памяти, что особенно важно при большом количестве комбинаций.

Важно:

- Этот скрипт будет генерировать *все* возможные пароли по заданному шаблону.
- Число комбинаций очень велико (1000 * 52 * 52 * 52 = 140,608,000), поэтому процесс генерации может занять очень много времени.
- Убедитесь, что у вас достаточно ресурсов (времени, памяти) для выполнения этого скрипта.

Альтернатива:

Если вам не нужно генерировать все комбинации, а просто получить случайный набор паролей, то используйте исходный скрипт с random.choice, но измените количество итераций цикла for в соответствии с количеством паролей, которые вы хотите получить.

3,792/12,000
Спасибо, совсем забыл отметить что все буквенные варианты нужны только в нижнем регистре, поэтому вариантов будет в разы меньше. так что я думаю Crunch подойдет
 

noskov3

Well-known member
20.07.2020
65
0
BIT
472
GPT такое решает легко. А так у тебя будет 140 миллионов комбинаций, если ты собрался на первые три места ставить от 0 до 9 цифры, а на 4-6 a-z или A-Z 26 букв*2(смена регистра, может же быть строчная или прописная буква) и того
10*10*10*52*52*52 = 140 миллионов комбинаций. Ты уверен, что это надо тебе?
import string

def generate_all_passwords():
"""
Генерирует все возможные пароли по шаблону digit,digit,digit,[a-z],[a-z],[a-z],
где [a-z] включает в себя все буквы английского алфавита (верхний и нижний регистр).
"""
for digit1 in string.digits:
for digit2 in string.digits:
for digit3 in string.digits:
for letter1 in string.ascii_letters:
for letter2 in string.ascii_letters:
for letter3 in string.ascii_letters:
password = f'{digit1}{digit2}{digit3}{letter1}{letter2}{letter3}'
yield password

# Пример использования
for password in generate_all_passwords():
print(password)


Объяснение:

- Скрипт использует вложенные циклы for для перебора всех возможных вариантов для каждой позиции в пароле.
- yield password вместо return password используется для создания генератора, который возвращает пароли по одному, а не все сразу. Это позволяет избежать хранения всех паролей в памяти, что особенно важно при большом количестве комбинаций.

Важно:

- Этот скрипт будет генерировать *все* возможные пароли по заданному шаблону.
- Число комбинаций очень велико (1000 * 52 * 52 * 52 = 140,608,000), поэтому процесс генерации может занять очень много времени.
- Убедитесь, что у вас достаточно ресурсов (времени, памяти) для выполнения этого скрипта.

Альтернатива:

Если вам не нужно генерировать все комбинации, а просто получить случайный набор паролей, то используйте исходный скрипт с random.choice, но измените количество итераций цикла for в соответствии с количеством паролей, которые вы хотите получить.

3,792/12,000
Спасибо, совсем забыл отметить что все буквенные варианты нужны только в нижнем регистре, поэтому вариантов будет в разы меньше. так что я думаю Crunch подойдет
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!