Генерация словарей по любым параметрам с pydictor

TG_hack_[ DR.Bro ]

Бот форума
Регистрация
26.02.21
Сообщения
43
Реакции
22
Кредиты
0 ₽
Баллы
18
Эта инструкция посвящена программе pydictor. Утилита pydictor — это мощнейший генератор словарей, который, пожалуй, умеет всё, что можно сделать с помощью других известных инструментов для генерации словарей, и имеет свои собственные уникальные функции. У программы много возможностей, но не очень хорошо с документацией — при подготовке данной инструкции, я основывался на переводе китайской документации, устаревшей английской документации, изучении API программы, таблицах с некой информацией от автора, которые мне удалось расшифровать лишь частично, а также недокументированных примеров использования программы, наподобие таких:
Код:
Usage : --level [level]Example: --level 4 level >= 4 will be work in /funcfg/extend.conf

Надеюсь, вы оцените мои усилия ))

Как говорит сам автор программы (а возможно это просто какая-то китайская мудрость): «Destination is just a point of departure. It's your show time». Поэтому давайте уже начнём знакомиться с pydictor.
Инструкция по pydictor

Главный принцип работы pydictor следующий: имеются методы генерации словарей с помощью которых создаются списки слов. Одновременно с выбором метода генерации, можно выбрать функцию по модификации словаря или фильтрации, чтобы сгенерированные словари соответствовали определённым условиям.

Методы генерации словарей следующие:


Функции следующие:


В одной команде можно выбрать только один метод генерации. Что касается функций, то можно их не использовать, использовать одну или сразу несколько — в зависимости от ваших потребностей.

Опции pydictor вы можете посмотреть на этой странице: pydictor - Инструменты Kali Linux

В них легко запутаться, так как вместе перемешаны команды по выбору метода генерации и функции фильтрации. Ещё некоторые опции начинаются с одного дефиса, некоторые с двух — какой-либо логики почему так сделано я не увидел. Принимая эти неудобства, давайте рассмотрим примеры генерации словарей с pydictor.
Словари, содержащие определённые символы

Начнём с генерации списков слов, состоящих из определённых символов с указанием длины слов. Это немного напоминает генерацию словарей на основе масок, хотя и отличается от неё.

С помощью опции -base указываются наборы символов, которые должны включать сгенерированные слова, вы можете выбрать из:
Код:
dцифра[0 - 9]Lмаленькая буква[a - z]cбольшая буква[A - Z]dLСмесь d и L[0-9 a-z]dcСмесь d и c[0-9 A-Z]LcСмесь L и c[a-z A-Z]dLcСмесь d, L и dL[0-9 a-z A-Z]

С помощью опции «--len МИНИМУМ МАКСИМУМ» указывается диапазон длины. Значениями по умолчанию являются: min=0 и max=4.

Например, следующая команда сгенерирует список слов, состоящие из маленьких букв (-base L) длиной от двух до трёх символов (--len 2 3):
Код:
python3 pydictor.py -base L --len 2 3

Обратите внимание на строки:
Код:
[+] A total of :18252 lines[+] Store in:/home/mial/bin/pydictor/results/base_120010.txt[+] Cost:0.0663 seconds

    • A total of :18252 lines — означает, что всего было сгенерировано 18252 слов.
    • Store in :/home/mial/bin/pydictor/results/base_120010.txt — означает, что словарь был сохранён в файле base_120010.txt по указанному пути
    • Cost :0.0663 seconds — показывает затраченное на генерацию словаря время

Посмотрим на начало и конец словаря:
Код:
head results/base_120010.txttail results/base_120010.txt


С помощью опции -o, --output вы можете указать путь и имя файла, куда должен быть сохранён словарь:
Код:
python3 pydictor.py -base L --len 2 3 --output ~/dic.txt

Генерация слов длиной от 1 до 3 символов (--len 1 3) из цифр, больших и маленький букв (-base dLc) с сохранением их в указанный файл (-o /awesome/pwd):
Код:
python3 pydictor.py -base dLc --len 1 3 -o /awesome/pwd
Словарь из пользовательских наборов символов

Пользовательские наборы символов указываются опцией -char. Не забывайте помещать строку с символами в кавычки, если в этом наборе имеется пробел и другие специальные символы.

Следующая команда создаст слова длиной от 1 до 3, состоящих из символов «[email protected] »:
Код:
python3 pydictor.py -char '[email protected] ' --len 1 3
Добавление строк

Имеются две опции для добавления строк:
Код:
--head ПРЕФИКС Добавляет строку в начало каждого слова--tail СУФФИКС Добавляет строку в конец каждого слова

В аналогичных программах, например, Maskprocessor и crunch, в таких опциях нет потребности — достаточно просто в маске записать буквальные символы. Но pydictor более гибкая программа, которая может генерировать словари, в том числе, не на основе масок, а, например, комбинированием слов из разных словарей или из данных о «жертве». Поскольку в этих примерах маски не используются, то на помощь приходят опции --head и --tail.

Следующая команда создаст список слов, состоящих только из цифр (-base d), длиной четыре символа (--len 4 4), перед каждой строкой будет добавлено слово Pa5sw0rd (--head Pa5sw0rd) и словарь будет сохранён в файл D:\exists\or\not\dict.txt (--output D:\exists\or\not\dict.txt):
Код:
python3 pydictor.py -base d --len 4 4 --head Pa5sw0rd --output D:\exists\or\not\dict.txt

Пример команды, в которой из пользовательского набора символов (-char '[email protected] ') будут составлены слова длиной от 1 до 3 символов (--len 1 3), в конец каждого слова будет добавлена строка «@site.com» (--tail @site.com):
Код:
python3 pydictor.py -char '[email protected] ' --len 1 3 --tail @site.com
Словарь, полученный с помощью перестановки и комбинаций

С помощью опции -chunk можно выполнить действия напоминающие Комбинаторную атаку. Но комбинаторная атака в Hashcat может работать с двумя или тремя словарями. А в pydictor можно объединять и комбинировать любое количество фрагментов строк.

Чтобы стало ясно, что именно происходит, посмотрим на результат работы следующей команды:
Код:
python3 pydictor.py -chunk Строка1 Строка2 Строка3 Строка4


То есть аргументы опции -chunk объединяются во всех возможных комбинациях, каждая строка используется один раз.

Думаю, суть понятна, в следующей команде из шести фрагментов разной длины генерируются слова, к которым затем в начале и конце добавляются строки:
Код:
python3 pydictor.py -chunk abc 123 '[email protected]#' @ . _ ' ' --head a --tail @pass
Фильтрация слов соответствующих определённым условиям

  • В pydictor можно фильтровать или создавать списки слов удовлетворяющие условиям:
    • минимальное или максимальное количество символов определённой группы (цифра, буква, специальный)
    • минимальное и максимальное число последовательных повторений символов определённой группы (цифра, буква, специальный)

Для этого в pydictor имеются следующие опции:
Код:
--occur БУКВА ЦИФРА СПЕЦИАЛЬНЫЙФильтр по максимальной частоте встречаемости букв, цифр, специальных символов. По умолчанию: БУКВА "<=99" ЦИФРА "<=99" СПЕЦИАЛЬНЫЙ "<=99"--types БУКВА ЦИФРА СПЕЦИАЛЬНЫЙФильтр по минимальной частоте встречаемости букв, цифр, специальных символов. По умолчанию: БУКВА ">=0"ЦИФРА ">=0"СПЕЦИАЛЬНЫЙ ">=0"--repeat БУКВА ЦИФРА СПЕЦИАЛЬНЫЙФильтр по количествую идущих подряд букв, цифр, специальных символов. По умолчанию: БУКВА ">=0"ЦИФРА ">=0"СПЕЦИАЛЬНЫЙ ">=0"

Рассматриваемые опции также можно применять с инструментами для обработки словарей (они будут рассмотрены ниже) при объединении словарей, очистки и прочих действиях.

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

  • С этими опциями можно использовать операторы сравнения:
    • >= означает больше или равно
    • > означает больше
    • == означает равно
    • <= означает меньше или равно
    • < означает меньше

  • В разделе «Как создать словари, соответствующие определённым политикам надёжности паролей» показаны принципы генерации словарей, соответствующие определённым критериям. Если коротко, то суть в следующем:
    • вначале создаётся словарь, включающий все возможные варианты
    • затем, используя Атаку на основе правил, отфильтровываются только подходящие кандидаты в пароли
    • в реальной жизни этим никто не занимается, так как размер словаря слишком большой

Поэтому рассмотрим пример по фильтрации слов, соответствующих определённым условиям, из готового словаря.

Скачаем и распакуем словарь:
Код:
wget -U 'Not a foe' https://kali.tools/files/passwords/leaked_passwords/rockyou.txt.bz2bunzip2 rockyou.txt.bz2

Если вы в Kali Linux, то там словарь уже имеется, достаточно его распаковать:
Код:
cat /usr/share/wordlists/rockyou.txt.gz | gunzip > ~/rockyou.txt

Смотрите также: Списки слов (словари)

Очистим словарь от нечитаемых символов:
Код:
iconv -f utf-8 -t utf-8 -c ~/rockyou.txt > ~/rockyou_clean.txt

Подробности о проблеме, которую решает предыдущая команда, вы найдёте в статье «Как из текстового файла найти и удалить символы, отличные от UTF-8».

Следующая команда возьмёт в качестве исходного файла ~/rockyou_clean.txt, и удалит все повторяющиеся слова (-tool uniqifer ~/rockyou_clean.txt), затем она отфильтрует список слов, при этом в каждом слове должно быть три или более буквы, более двух цифры и ноль специальных символов (--occur ">=3" ">2" "==0"), полученный результат должен быть сохранён в указанный файл (--output ~/uniq.txt):
Код:
python3 pydictor.py -tool uniqifer ~/rockyou_clean.txt --occur ">=3" ">2" "==0" --output ~/uniq.txt


Следующая команда сохранит только слова, в которых 8 или менее букв, 4 или менее цифр и 0 специальных символов:
Код:
python3 pydictor.py -tool uniqifer ~/rockyou_clean.txt --types "<=8" "<=4" "==0" -o ~/uniq.txt

Эта команда сохранит только слова, в которых буквы повторяют 3 или менее, раз, а цифры повторяются 3 или более раз:
Код:
python3 pydictor.py -tool uniqifer ~/rockyou_clean.txt --repeat "<=3" ">=3" "==0" -o ~/uniq.txt

Примечание: на момент написания, последняя команда не работает с Python 3, но отлично работает в Python 2. Я уже открыл тикет. Если когда вы читаете, проблема ещё не исправлена, то просто используйте Python 2 для данной команды:
Код:
python2 pydictor.py -tool uniqifer ~/rockyou_clean.txt --repeat "<=3" ">=3" "==0" -o ~/uniq.txt
Генерация словарей по маске

  • Имеется сразу несколько опций, для эмуляции Атаки по маске:
    • --pattern
    • --regex (работает не со всеми методами генерации словарей)
    • --conf

Все они документированы примерно никак, и их работа отличается от интуитивно ожидаемого поведения.

Опция --conf позволяет использовать файл в который записан шаблон слов для генерации. Можно подумать, что опция --pattern позволяет указывать этот же самый шаблон, который в файле с --conf. Но это не так! Формат у них разный!!!

С опцией --conf можно указать путь до файла, в который записан шаблон, а также можно указать строку шаблона (фактически, маску), по которой будет сгенерирован словарь.

  • Один символ представляет конструкция, состоящая из пяти элементов:
  • префикс,
  • набор символов,
  • диапазон длины,
  • кодирование,
  • суффикс.

Из них можно пропустить префикс и суффикс, а остальные три являются обязательными.

Допустим, мы хотим сгенерировать список слов, состоящий из трёх цифр (маска ?d?d?d), тогда команда следующая (примечание: движок сайта не может осилить и правильно показать строки < none >, поэтому некоторые команды приведены картинками):


  • В ней:
    • [0-9] — диапазон символов
    • {3,3} — количество символов из этого диапазона
    • <none> — не использовать кодирование к данному символу

Теперь, допустим, мы хотим пароли, в которых первой идёт цифра, затем маленькая буква, затем две цифры (маска ?d?l?d?d), тогда конструкция следующая:


Кажется сложным? Не спешите расстраиваться. Когда вы поймёте, сколько гибкости в этом синтаксисе, вы это оцените.

Если нужно указать буквальные символы, то для них не требуется особого синтаксиса, например, команда:


создаст следующий список:
Код:
0Password000Password010Password020Password030Password040Password050Password060Password070Password080Password090Password100Password11………………….………………….………………….

В показанной команде буквальная строка становится префиксом или суффиксом одного из элементов.
Пользовательские наборы символов и маски в pydictor

  • В предыдущих примерах мы использовали такие диапазоны как [0-9] (все цифры) и [a-z] (все маленькие буквы). Но можно указать любые диапазоны, например:
    • [1-5] — цифры от 1 до 5
    • [a-g] — маленькие буквы от a до g
    • [a,d,q,r,s] — только буквы a, d, q, r, s
    • [a-g,I,M-O,1-4] — диапазон маленьких букв от a до g, большая буква I, и диапазон больших букв от M до O, а также цифры от 1 до 4.

Посмотрите на следующий пример:


В нём в диапазон включены не отдельные символы, а строки bob, b0b и BOB. То есть первая часть генерируемых слов будет включать одну из этих строк, затем будет четыре цифры, а в конце будет строка «@passw0rd».

Источник
 
Верх Низ