Создание и нормализация словарей. Выбираем лучшее, убираем лишнее

Новости информационной безопасности




Создание и нормализация словарей. Выбираем лучшее, убираем лишнее

bdaa95bb0cc8454b824e65ffe7086105.jpg

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

Инструменты

crunch

Пожалуй, один из самых известных инструментов для быстрого создания словарей. Он по умолчанию входит в популярный дистрибутив для проведения пентеста Kali Linux.

Инструмент работает в нескольких режимах:

Создание словаря, состоящего из перечисленных символов, например чисел

crunch 4 5 1234567890 -o all_numbers_from_4_to_5.txt

7b9fa7fe08e649a6a41d7894f3b43bf8.PNG

Создается словарь длиной от четырех до пяти цифр.

Создание словаря по шаблону

crunch 10 10 qwe RTY 123 \#\@ -t P^@@,ord%% -o Password_template.txt

160310d237554c8590538e375753e9ce.PNG

Сперва указывается длина пароля — 10 символов. Затем перечисляются наборы символов: буквы в нижнем регистре, буквы в верхнем регистре, цифры и спецсимволы. Ключ -t задает шаблон, где

И третий режим работы crunch — перестановки.

crunch 1 1 -p Alex Company Position

83ea071a82e247a7b7e1cfdee137ebc5.PNG

Словарь состоит из всех возможных комбинаций слов Alex, Company и Position.

Подробнее изучить инструмент можно через стандартные man страницы, они достаточно подробные.

maskprocessor

Иногда требуется указать не только наборы под конкретный тип символов, а вообще свой набор, включающий и буквы, и цифры, и спецсимволы. В этом случае можно воспользоваться утилитой maskprocessor от брутфорсера hashcat. Скачать ее можно с официального гитхаба hashcat.

Вы можете задать до четырех собственных наборов символов и использовать готовые наборы

?l = abcdefghijklmnopqrstuvwxyz
?u = ABCDEFGHIJKLMNOPQRSTUVWXYZ
?d = 0123456789
?s =  !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
?a = ?l?u?d?s
?b = 0x00 - 0xff

Пример использования
mp64.bin -1 Pp -2 \@\#\$ ?1assw?2r?d

3fa01692b5fc48a5aaf9995dcf8c4406.PNG

Или можно задать набор из цифр, но добавить к нему еще несколько спецсимволов так

mp64.bin -1 Qq -2 ?d\@\#\$ ?1werty_12?2

Получаем такой результат

215a5e498d164f02b1eb57e4a2cb75d1.PNG

John the Ripper

Популярный брутфорсер John the Ripper (JTR) тоже позволяет генерировать словари на основе правил. Делается это при помощи ключа --rules, а сами правила описываются в файле john.conf

Вот так выглядит стандартное правило, используемое для взлома NTLM хэша

[List.Rules:NT]
:
-c T0Q
-c T1QT[z0]
-c T2QT[z0]T[z1]
-c T3QT[z0]T[z1]T[z2]
-c T4QT[z0]T[z1]T[z2]T[z3]
-c T5QT[z0]T[z1]T[z2]T[z3]T[z4]
-c T6QT[z0]T[z1]T[z2]T[z3]T[z4]T[z5]
-c T7QT[z0]T[z1]T[z2]T[z3]T[z4]T[z5]T[z6]
-c T8QT[z0]T[z1]T[z2]T[z3]T[z4]T[z5]T[z6]T[z7]
-c T9QT[z0]T[z1]T[z2]T[z3]T[z4]T[z5]T[z6]T[z7]T[z8]
-c TAQT[z0]T[z1]T[z2]T[z3]T[z4]T[z5]T[z6]T[z7]T[z8]T[z9]
-c TBQT[z0]T[z1]T[z2]T[z3]T[z4]T[z5]T[z6]T[z7]T[z8]T[z9]T[zA]
-c TCQT[z0]T[z1]T[z2]T[z3]T[z4]T[z5]T[z6]T[z7]T[z8]T[z9]T[zA]T[zB]
-c TDQT[z0]T[z1]T[z2]T[z3]T[z4]T[z5]T[z6]T[z7]T[z8]T[z9]T[zA]T[zB]T[zC]

В первой строчке сказано, что нужно изменить регистр символа на нулевой позиции (T0), символ Q позволяет не допустить дубликатов в результирующем словаре. Во второй строке символ на первой позиции меняет свой регистр, затем скобки задают препроцессор, чтобы были сгенерированы пароли и с измененным нулевым символом и так далее.

Предположим, вы успешно провели брутфорс LM хэша и получили значение QWERTY123, так как для LM регистр не важен.
Но для авторизации вам нужно провести брутфорс NTLM хэша, где регистр имеет значение. Воспользовавшись правилом, описанным выше, можно получить следующий словарь

john -w:QWERTY123.dict --stdout --rules:NT

8431bcece12246169e9ae98d006e1319.PNG

JTR по умолчанию содержит множество готовых правил, но можно написать и свои, либо взять за основу уже написанное и скорректировать под текущую ситуацию.
Подробно про синтаксис правил можно почитать здесь.

hashcat-tools

Еще одним полезным инструментом является набор утилит от популярного брутфорсера hashcat.

Скачать их можно с официального сайта.

Рассмотрим некоторые их них. Описания всех утилит на английском языке можно найти тут.

combinanor.bin — позволяет генерировать словарь из слов, входящих в два других словаря.

87b0f031dc8f4bcfb94e21ea760d655c.PNG

combinanor3.bin делает то же самое, но на вход принимает три файла, вместо двух.

combipow.bin — создает все возможные комбинации из слов, перечисленных в файле (похоже на ключ -p в crunch)

3bc3421f679547f99475ead853017cff.PNG

cutb.bin — обрезает слова в словаре до указанной длины. Можно указывать смещение (offset)

792e71f480734700a39e22663f4f615f.PNG

expander.bin — получает на ввод слова, разбирает их на символы, комбинирует и отправляет в STDOUT

95e76ee1db7e423a98af08452c739dd8.PNG

permute.bin — создает словарь, который используется hashcat при атаке типа Permutation attack. Перед использованием словарь нужно пропустить через утилиту prepare.

gate.bin — разбивает словарь на несколько частей для параллельной обработки несколькими ядрами или несколькими машинами. В примере ниже мы разбиваем стандартный словарь JTR на две части. В первую часть попадают слова под номером 0, 2, 4, 6,…. Во вторую 1, 3, 5, 7,…

74fbdf3161a54192ae3417b573a98dad.PNG

len.bin — оставляет в словаре только слова определенной длины от min до max

ead510379a164cd3927572a79f80d79f.PNG

mli2.bin — объединяет два словаря.

req-include.bin — крайне полезный инструмент, который убирает из словаря все, что не подходит под заданные правила. Например, вы знаете, что по парольной политике в пароле обязательно присутствует буква в верхнем регистре, цифра и спецсимвол.

3a0de75e838a491785b8e04d1aa9a04c.PNG

Число выбрано исходя из таблицы

af07398575c347dd9d32c4ab5d3ae5b6.PNG

Если таким образом нормализовать известный словарь rockyou, то можно сократить его размер в 270 раз! и не тратить ресурсы на заведомо ложные комбинации.

2f5084602b704027b32ef79688b74558.PNG

req-exclude.bin делает то же самое, что req-include, но с точностью до наоборот.

rli.bin — эта утилита удаляет значения из первого словаря, если они встречаются во втором. Полезно использовать, если вы создаете один словарь из нескольких.

Когда под рукой нет утилит

Может оказаться так, что воспользоваться набором hashcat-utils или crunch нет возможности, а нужно срочно создать словарь или нормализовать его. Некоторые алгоритмы довольно сложны в реализации, но базовые операции можно выполнить просто в командной строке.

Простой словарь с датами можно создать серией подобных команд

echo 0{1..9}0{1..9}19{60..99} | tr ' ' '\n' >> dates

63213b92ae9f450a86c01285ee6a1cf1.PNG

Если нужно разбить словарь на части для параллельной обработки, можно воспользоваться командой split

split -d -l 1000 password.lst splitted_

b656422eaf064cb3868f92e2dc1e3eb3.PNG

Быстро объединить два словаря можно так

cat dict1 dict2 > combined_dict

05aff1785c8f4074b852084b1fb2a5c1.PNG

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

sed 's/^./\u&/' dict_file
sed 's/.$/\u&/' dict_file

Для перевода регистра в нижний нужно заметить «u» на «l»

Дописать что-то в начало каждого слова из словаря можно так

sed 's/^./word/' dict_file

А так можно дописать слово в конец
sed 's/.$/word/' dict_file

Следующей командой можно добавить в начало число от 0 до 99 к каждому слову в словаре
for i in $(cat dict_file) ; do seq -f %02.0f$i 0 99 ; done > numbers_dict_file

Можно очистить словарь от значений, в которых не присутствует хотя бы 2 числа так
nawk 'gsub("[0-9]","&",$0)==2' password.lst

Получаем

23776537f4ec46228468a420751ec3b9.PNG

Это лишь некоторые примеры. Можно писать более сложные обработки на Python и других скриптовых языках. Но всегда нужно помнить, что создание качественного словаря и его нормализация под целевой протокол — важный этап при проведении тестирования на проникновение.

Дата: 2017-09-13 10:37:08

Источник: https://habrahabr.ru/post/337718/

информационная безопасность,блог компании pentestit,wordlist,pentest,создание словарей,maskprocessor,crunch,john the ripper