РАЗБОР Pentest Статья

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

B
BKeaton Newbie · 205 сообщений
Подписаться
36,6 тыс.
Что такое 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 "
 
AI-выжимка (тезисы)
Crunch – генератор словарей паролей :: Crunch генерирует словари паролей со всеми возможными комбинациями и перестановками, с поддержкой unicode и паттернов.
crunch 3 7 abcdef :: Команда создаёт все пароли от 3 до 7 символов из набора "abcdef" и выводит их в stdout.
@ означает символы в нижнем регистре :: В паттернах crunch: @ — нижний регистр, , — верхний, % — цифры, ^ — 33 спецсимвола.
crunch 10 10 abcd987 -t abc@@@@@@@ -o /root/Desktop/file.txt :: Пример создаёт словарь фиксированной длины 10 с шаблоном abc@@@@@@@ — 823543 комбинаций.
crunch 8 8 -f charset.lst mixalpha-numeric-all-space -o wordlist.txt -t @@dog@@@ -s cbdogaaa :: Опция -s задаёт начальный блок генерации, -t — паттерн с фиксированной частью "dog".
Перебор по словарю. :: Dictionary attack быстрее перебора, но не даёт 100% гарантии; brute force даёт гарантию, но требует больших ресурсов.
опция -d для ограничения дублирования символов :: Crunch поддерживает разбивку вывода по строкам/файлам, возобновление после остановки и лимит дублей через -d.
Домен (таксономия витрины «Разборы»)
Pentest

Комментарии

25
Подскажите как сделать чтоб подобрать пароль такого формата h3adhFu7
или тебе список нужен? Проще на питоне написать через gpt даже можно. Укажи сколько символов и что может стоять на каждой позиции.
 
Доброй ночи! Хочу создать словарь из 6-ти символов, в котором сперва идут три цифры, затем три буквы, как мне это сделать со всеми возможными комбинациями? Или же мне нужно создавать много словарей с комбинациями букв для каждой группы чисел по отдельности? Спасибо за ответ!
 
Доброй ночи! Хочу создать словарь из 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
1
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 подойдет
 
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 подойдет