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

Оглавление

1. Лучшая программа для генерации словарей

2. Инструкция по pydictor

3. Словари, содержащие определённые символы

4. Словарь из пользовательских наборов символов

5. Добавление строк

6. Словарь, полученный с помощью перестановки и комбинаций

7. Фильтрация слов соответствующих определённым условиям

8. Генерация словарей по маске

9. Пользовательские наборы символов и маски в pydictor

10. Конец первой части


Лучшая программа для генерации словарей

Эта инструкция посвящена программе 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 следующий: имеются методы генерации словарей с помощью которых создаются списки слов. Одновременно с выбором метода генерации, можно выбрать функцию по модификации словаря или фильтрации, чтобы сгенерированные словари соответствовали определённым условиям.

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

Тип Метод генерации словарей Идентификатор Описание Поддерживаемые функции (расшифровка ниже)
Ядро base C1 Словарь на основе выбранных групп символов F1 F2 F3 F4
Ядро char C2 Словарь на основе пользовательского набора символов F1 F2 F3 F4
Ядро chunk C3 Словарь на основе перестановки и комбинирования ВСЕ
Ядро conf C4 Словарь по правилам из указанного конфигурационного файла ВСЕ
Ядро pattern C5 Быстро генерируемый словарь на основе шаблона F2 F3 F4
Ядро extend C6 Расширенный словарь на основе правил ВСЕ
Ядро sedb C7 Словарь на основе социальной инженерии ВСЕ
Инструмент combiner T1 Инструмент для комбинирования файлов в указанной директории  
Инструмент comparer T2 Инструмент для сравнений и поиска различий в содержимом файлов ВСЕ
Инструмент counter T3 Инструмент подсчёта частоты слов ВСЕ
Инструмент handler T4 Инструмент обработки входного файла ВСЕ
Инструмент uniqbiner T5 Инструмент для комбинирования и уникализации файлов в директории ВСЕ
Инструмент uniqifer T6 Инструмент уникализации входного файла ВСЕ
Инструмент hybrider T7 Инструмент для объединения слов из нескольких словарей F1 F2 F3 F4
Плагин birthday P1 Список слов по ключевым словам дня рождения, строется на основе введённой даты и времени ВСЕ
Плагин ftp P2 Создание паролей FTP по ключевым словам ВСЕ
Плагин pid4 P3 Словарь с 4 последними символами (китайской) ID карты ВСЕ
Плагин pid6 P4 Словарь с 6 последними символами (китайской) ID карты ВСЕ
Плагин pid8 P5 Словарь с 8 последними символами (китайской) ID карты ВСЕ
Плагин scratch P6 Список слов на основе ключевых слов с веб-страниц ВСЕ

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

Функция Код Описание
len F1 Диапазон длины
head F2 Добавить префикс (строку в начало слова)
tail F3 Добавить суффикс (строку в конец слова)
encode F4 Кодировать все сгенерированные слова
occur F5 Фильтр по максимальной частоте встречаемости букв, цифр, специальных символов
types F6 Фильтр по минимальной частоте встречаемости букв, цифр, специальных символов
regex F7 Фильтр по регулярному выражению
level F8 Устанавливает уровень правил словаря
leet F9 Включает режим 1337
repeat F10 Фильтр по числу идущих подряд букв, чисел, специальных символов

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

Опции pydictor вы можете посмотреть на этой странице: https://kali.tools/?p=6342

В них легко запутаться, так как вместе перемешаны команды по выбору метода генерации и функции фильтрации. Ещё некоторые опции начинаются с одного дефиса, некоторые с двух — какой-либо логики почему так сделано я не увидел. Принимая эти неудобства, давайте рассмотрим примеры генерации словарей с 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.txt
tail 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, состоящих из символов «asdf123._@ »:

python3 pydictor.py -char 'asdf123._@ ' --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 'asdf123._@ ') будут составлены слова длиной от 1 до 3 символов (--len 1 3), в конец каждого слова будет добавлена строка «@site.com» (--tail @site.com):

python3 pydictor.py -char 'asdf123._@ ' --len 1 3 --tail @site.com

Словарь, полученный с помощью перестановки и комбинаций

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

Чтобы стало ясно, что именно происходит, посмотрим на результат работы следующей команды:

python3 pydictor.py -chunk Строка1 Строка2 Строка3 Строка4

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

Думаю, суть понятна, в следующей команде из шести фрагментов разной длины генерируются слова, к которым затем в начале и конце добавляются строки:

python3 pydictor.py -chunk abc 123 '!@#' @ . _ ' ' --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.bz2
bunzip2 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 можно указать путь до файла, в который записан шаблон, а также можно указать строку шаблона (фактически, маску), по которой будет сгенерирован словарь.

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

  1. префикс,
  2. набор символов,
  3. диапазон длины,
  4. кодирование,
  5. суффикс.

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

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

В ней:

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

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

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

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

создаст следующий список:

0Password00
0Password01
0Password02
0Password03
0Password04
0Password05
0Password06
0Password07
0Password08
0Password09
0Password10
0Password11
………………….
………………….
………………….

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

Пользовательские наборы символов и маски в 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».

Конец первой части

Мы рассмотрели основы использования pydictor, а инструкция получилась довольно объёмная, поэтому с другими возможностями и инструментами этой программы мы познакомимся в следующей части.

Рекомендуется Вам:

Добавить комментарий

Ваш адрес email не будет опубликован.