Просунуті техніки створення словників

4 травня 2023 1 хвилина Автор: Cyber Witcher

Цифровий словник від А до Я

Однією з найкорисніших програм на ПК та смартфоні у моєму розумінні є електронний словник. У ті давні часи, коли я навчав іноземної мови, кожне слово доводилося шукати у паперовому словнику. Цю тривіальну операцію я проробляв сотні разів, а деякі шкідливі слова доводилося дивитися знову і знову, тому що я встигав забути їхнє значення. Як це було прикро! Чи справа зараз, вжух і переклад перед очима на екрані монітора. Історія пошуку, на випадок, якщо слово, яке шукається, не перейшло з області короткочасної пам’яті в довгострокову. На відміну від альпінізму при оцифровці словника найважчий крок, не останній, а перший. Раджу зберігати все в простих текстових файлах, так як просунутий пошук та виправлення помилок, розстановка тегів, перетворення сортування та інші операції з текстовим масивом неймовірно здійснювати з бінарним фалом. На цих кроках важливо визначитися зі структурою словникових статей. На цих кроках важливо визначитися зі структурою словникових статей.

У найпростішому випадку буде всього два поля: ключ і значення. Цього достатньо, але якщо потрібне підсвічування різних елементів статей, тоді потрібно всі такі елементи певним чином маркувати. Будуть розглянуті не лише вже знайомі нам інструменти, а й кілька нових. Для деяких завдань ми будемо використовувати не лише спеціалізовані інструменти – деякі дії простіше зробити за допомогою стандартних утиліт Linux чи власних скриптів. Оскільки тут не описуватимуться основи генерації словників, то почнемо з переліку джерел, де ви можете прочитати ці основи. Рекомендується прочитати їх, якщо ви ще цього не зробили.

Атака на основі правил

Атака на основі правил – змінює існуючий словник за вказаним набором правил. Якщо за допомогою атаки на основі правил ви хочете змінити поведінку маски, спочатку потрібно створити словник по масці, а потім працювати з ним. Найпростіший спосіб – використовувати програму з графічним інтерфейсом Mentalist. Атака на основі правил John the Ripper набагато потужніша ніж у hashcat, для даної атаки з цих двох програм рекомендую вибирати саме John.

Генерація словників на основі інформації про людину

Якщо пароль складено на основі даних користувача, наприклад, комбінація імені, прізвища, дати народження, імен дітей, номера телефону, цих же даних найближчих родичів, то такий пароль можна вважати слабким. Розглянуті вище інструменти не дуже підходять для складання подібних словників, заснованих на інформації про користувача – хіба що комбінаторна атака в Hashcat, але вона за раз приймає тільки 2 словника. Саме цю проблему вирішує утиліта CUPP.

Встановлення CUPP у Kali Linux

Встановлення CUPP у BlackArch

Запустіть програму в інтерактивному режимі та введіть відомі дані користувача:

Приклад згенерованих паролів:

Якщо вам потрібен переклад запитань, то ви знайдете його на сторінці картки програми.

Складання списків слів та списків імен користувачів на основі вмісту веб-сайту

Познайомимося із ще одним інструментом – CeWL. Ця програма обходить вказаний сайт (можна вказати глибину обходу) і всі знайдені на сторінках сайту слова сортують у порядку їх використання. Навіщо потрібний такий словник? Автор пропонує використати його для брут-форсу. До того ж, програма вміє шукати e-mail адреси, а також отримувати імена творців офісних документів – підтримуються файли Word та PDF. Ці дані можна використовувати для створення списку імен користувачів. Ще в комплекті з програмою йде утиліта FAB, яка витягує з уже завантажених документів Word і PDF імена авторів – їх також можна використовувати як імена користувачів для брут-форсу.

Встановлення CeWL в Kali Linux

Встановлення  в BlackArch

Запуск збору слів зі сторінок сайту https://site.ru, використовуючи лише сторінки, посилання на які будуть знайдені на вказаній адресі (-d 1), для складання словника, який буде збережено у файлі dic.txt (-w dic.txt ):

Запуск збору слів зі сторінок сайту https://site.ru, використовуючи сторінки, посилання на які будуть знайдені на вказаній адресі, а також на завантажених сторінках (-d 2), для складання словника, який буде збережений у вказаний файл (-w dic.txt), при цьому для кожного слова буде показана частота, з якою він зустрічається (-c), також буде складено список знайдених email адрес (-e), які зберігатимуться у вказаний файл (-email_file emails.txt) і буде створено список на основі інформації знайденої в метатегах документів (-a), цей список буде збережений у вказаний файл (-meta_file meta.txt):

Запуск FAB, при якому будуть перевірені всі документи *.doc у директорії /home/mial/Downloads/, з метаінформації цих документів буде вилучено поле, що містить ім’я автора документа, дані будуть виведені на екран:

Як створити словник по масці зі змінною довжиною

Розглянемо генерацію списків слів різної довжини з прикладу Hashcat і maskprocessor. Для того, щоб генерувалися паролі різної довжини, є такі опції:

Опція -i є необов’язковою. Якщо вона використовується, це означає, що довжина кандидатів у паролі не повинна бути фіксованою, вона повинна збільшуватися за кількістю символів. Опція –increment-min також є необов’язковою. Вона визначає мінімальну довжину кандидатів у паролі. Якщо використовується опція -i, то значенням –increment-min за замовчуванням є 1. І опція –increment-max є необов’язковою. Вона визначає максимальну довжину кандидатів у паролі. Якщо вказано опцію -i, але пропущено опцію –increment-max, то її значенням за умовчанням є довжина маски.

Правила використання опцій збільшення маски:

  • перед використанням –increment-min та і –increment-max необхідно вказати опцію -i

  • значення опції –increment-min може бути меншим або рівним значенню опції –increment-max, але не може перевищувати його

  • довжина маски може бути більшою за кількістю символів або рівною числу символів, встановленою опцією –increment-max, АЛЕ довжина маски не може бути меншою за довжину символів, встановленої –increment-max.

Отже, команда запуску для генерації паролів, які мають довжину від шести до десяти символів:

У maskprocessor є наступна опція збільшення:

Наступна команда складе словник із чисел від 1 до 9999:

Коли про пароль нічого не відомо (всі символи)

Якщо потрібно запустити повний перебір, коли в паролі можуть бути великі та маленькі латинські літери, а також цифри та довжина пароля від 1 до 12, потрібно використовувати наступні опції та маску:

Щоб вивести всіх кандидатів у паролі або зберегти їх у словнику:

Якщо потрібно запустити повний перебір, коли в паролі можуть бути великі та маленькі латинські літери, цифри, а також символи !”#$%&'()*+,-./:;<=>?@[]^_` {|}~ та довжина пароля від 1 до 12, то потрібно використовувати наступні опції та маску:

Щоб вивести всіх кандидатів у паролі або зберегти їх у словнику:

Створення словників, у яких обов’язково використовується символи та рядки

У коментарях до статей про генерацію паролів по масках іноді запитують, а як створити словник, що містить певні символи або слова, причому вони можуть бути будь-де. Насправді саме маски для цього підходять погано. Завдання можна вирішити за допомогою Атаки на основі правил, особливо якщо йдеться про окремі символи або групи символів – вище вже дано посилання на вирішення подібних випадків. Але якщо йдеться про рядки, то Атака на основі правил стає або занадто складною та заплутаною через необхідність створювати велику кількість правил, або навіть просто неможливою. Розглянемо кілька прикладів.

Припустимо, відомо, що в паролі, що складається з будь-яких символів (великі та маленькі літери, а також цифри), обов’язково є слово “Alexey”, яке може бути в будь-якому місці пароля і в будь-якому регістрі. Для вирішення цього завдання замість того, щоб створювати шалену кількість правил, можна створити словник з усіма варіантами і просто відфільтрувати слова, в яких є рядок, наприклад:

На мою думку, це оптимальне рішення. Воно також підходить, якщо ви не хочете створювати словник, а хочете використовувати атаку по масці – багато програм для брут-форсу здатні приймати кандидати в паролі зі стандартного введення. Ще один варіант – слово, що шукається, може бути в будь-якому регістрі, але точно розташоване на початку пароля:

До речі, останній приклад не особливо вдалий – оскільки нам відомо, що спочатку можливі тільки 2 символи – “A” або “a”, то краще використовувати набір символів, що включають ці два символи. Аналогічно і для інших – хоча б чотирьох відомих символів (за кількістю можливих наборів користувача). Як створити словник, який обов’язково містить символи “e”, “g”, “D” і “t”? Для цього використовуйте команду виду:

У ній ви можете додавати ланцюжок з grep та відфільтровувати паролі з будь-якою кількістю необхідних символів. Як створити словник, у якому паролі в будь-якому місці та в будь-якому регістрі містять слово Alexey або слово MiAl? Використовуйте команду виду:

Кількість рядків, що шукаються, може бути будь-яким:

Приклад команди, що створює словник, в якому кандидати в паролі складаються тільки з цифр, але в паролі обов’язково має бути послідовність «12345», розташована в будь-якому місці:

Думаю, ідея понятна – замість того, щоб спробувати створити неможливу маску, створити все можливе і відфільтрувати те, що нам потрібно.

Як створювати комбіновані словники

Комбінованими словниками зазвичай називають словники, що включають одночасно ім’я користувача та пароль, розділені певним символом (зазвичай двокрапка або символ табуляції). Але в даному випадку я маю на увазі словники, складені зі слів різних словників, шляхом об’єднання. Але й до «нормальних» комбінованих словників ми ще повернемось. Суть у тому, що до кожного слова з першого словника додається кожне слово з другого словника.

Словарь 1 (dict1.txt)

Словарь 2 (dict2.txt)

Запуск комбінаторної атаки (-a 1):

Висновок:

Мені чомусь здавалося, що слова повинні об’єднатися ще й у зворотному порядку (тобто першим йде слово з другого словника), але, як ви можете переконатися, це не відбувається. Тому для отримання описаного ефекту потрібно запустити атаку ще раз, помінявши словники місцями:

Як комбінувати більше двох словників

Далі показаний приклад комбінації трьох словників – суть у тому, що кожне нове отримане слово складається за одним словом з кожного з трьох словників:

Як комбінувати подібним чином 4 та більше словників? Мені важко уявити, що це може стати в нагоді в реальній ситуації, але для цього швидше за все доведеться писати свій скрипт для автоматизації показаного вище алгоритму. Якщо ви знаєте програми, які вміють це робити, пишіть у коментарях. І… тут я згадав про програму combinator3. Вона постачається у пакеті hashcat-utils. Ця команда використовується для комбінації трьох словників (для комбінації двох словників використовуйте combinator). Використання:

Ця програма вміє комбінувати по 3 зазначених словника, але знову ж таки – якщо словник йде третім, то слова з нього завжди будуть наприкінці. Щоб отримати всі можливі комбінації з трьох слів у будь-якому порядку, потрібно використовувати наступні команди:

Як створити всі можливі комбінації для короткого списку рядків

Утиліта combipow створює всі “унікальні комбінації” із короткого списку введення. Ця програма також включена до hashcat-utils. Використання:

Приклад вмісту словника з ім’ям wordlist:

Запуск combipow з цим словником:

Дасть наступні результати:

Введіть текст заголовка

Програма PrinceProcessor реалізує алгоритм PRINCE. Докладніше про цей алгоритм ви можете дізнатися на сторінці картки програми. Там же описано суть роботи програми та її опції. Приклади використання PrinceProcessor. Щоб створити всі можливі ланцюги із вмісту файлу dict1.txt:

Використовуючи слова із зазначеного словника (dict1.txt) скласти ланцюга мінімальної довжиною 2 елемента (-elem-cnt-min=2) і максимальною довжиною 2 елемента (-elem-cnt-max=2), тобто в кожному ланцюгу буде тільки по 2 слова:

Гібридна атака – об’єднання комбінаторної атаки та атаки по масці

Ця атака поєднує атаку за словником та атаку по масці – вона приймає на вході словник та маску та видає гібридний пароль. Якщо ваш example.dict містить:

Опції:

Генерують наступні кандидати у паролі:

Це працює і у протилежний бік! Опції:

Генерують наступні кандидати у паролі:

Всі можливості гібридної атаки можна реалізувати за допомогою Атакі на основі правил – тому якщо вона вам подобається більше, то використовуйте її.

Як створити комбінований словник, що містить ім’я користувача та пароль, розділені символом

Тепер повертаємося до комбінованих словників, що містять одночасно ім’я користувача та пароль. Як приклад подивіться фрагмент словника (файл auth_basic.txt) програми Router Scan by Stas’M – у ньому облікові дані розділені символом табуляції:

А це приклад комбінованого словника, в якому ім’я користувача та пароль розділені двокрапкою:

Для створення комбінованого словника використовуйте команду виду:

У цій команді:

  • users.txt та passwords.txt – словники, з яких будуть взяті імена користувачів та паролі та будуть складені всі можливі комбінації.

  • РОЗДІЛЬНИК – символ, яким будуть розділені логін і пароль

Наприклад, у наступній команді роздільником є двокрапка:

Якщо як роздільник потрібно вставити символ табуляції, то натисніть Ctrl-v + Tab:

До речі, якщо ви спробуєте розібратися у наведеній вище команді hashcat, то з’ясуйте, що одночасно використовується Комбінаторна атака та додано правило з Атаки на основі правил. Розглянемо окремий випадок: як створити файл парний словник логінів та паролем такого типу: логін завжди постійний, потім табуляція та пароль.

Звичайно, як перший словник можна створити файл з одним текстовим полем – логіном. Але є й інший варіант за допомогою найпотужнішої команди sed:

У цій команді:

  • superadmin — рядок, який потрібно вставити перед кожним паролем

  • t — символ табуляції, який розділятиме логін і пароль

  • pass.txt — звідки зчитувати паролі

  • login_pass.txt — новий файл, куди буде збережено паролі

Якщо не хочете створювати новий файл, а хочете змінити наявний, то заберіть перенаправлення та додайте опцію -i:

Як витягти імена користувачів та паролі з комбінованого словника у звичайні словники

Якщо з комбінованого словника нам потрібно вийняти лише імена користувачів та/або тільки паролі. Для цього ми скористаємося (теж потужною) програмою awk.

Для вилучення імен користувачів:

Для отримання паролів:

В цих командах:

  • РОЗДІЛЮВАЧ – це символ, який розділяє логіни та паролі. Якщо вам потрібно вказати символ табуляції, то запишіть«t».

  • СЛОВНИК.txt – комбінований словник з якого ми отримуємо списки слів

В принципі, команди тільки різняться в $1 (перше поле до роздільника) та $2 (друге поле після роздільника).

Як за допомогою Hashcat можна згенерувати словник хешей MD5 всіх шестизначних чисел від 000000 до 999999

Hashcat може робити райдужні таблиці, але тільки для Wi-Fi. Зате за допомогою PHP це завдання можна вирішити кілька рядків:

Час виконання – 1-4 секунди. За цей час будуть згенеровані всі хеші md5 для рядків 000000…999999. Збережіть наведений вище код файлу md5-rb-gen.php, запускати так:

Щоб зберегти отримані хеші у файл:

Цікаве спостереження про швидкість досягнення завдання. Наступні дві команди роблять те саме:

Але на середньому комп’ютері виконання команд триватиме до години. PHP виявився швидше, ніж нативні Linux команди.

Подвоєння слів

Як створити словник 12 символьних слів, що складаються лише з десяткових цифр (?d) формату abcdefabcdef, тобто шестизначне число написане двічі? Можна використовувати Атаку на основі правил, а можна написати невеликий скрипт Bash (усі слова в файлі user.txt пишуться по 2 рази):

Стосовно нашого завдання — подвоєння шестизначних чисел можна використовувати наступну команду, яка згенерує числа з шести цифр і двічі запише кожне число:

Як створити словник зі списком дат

Як створити список дат за шаблоном ДД-ММ-РРРР, тобто відповідний масці ?d?d-?d?d-?d?d?d?d але щоб перебір був не в діапазоні 00-99, а 01-31, 01-12 та 1900-2021 відповідно? Такі словники вміє створювати програму pydictor.

Але ще простіше словник зробити так (він буде збережений у файл dates.txt):

Якщо хочете обійтися без створення словника, то передавайте виведення попередніх команд на стандартне введення hashcat:

Як розбити словники, що генеруються, на частини

Чи можна якось в maskprocessor розділити словник, що виходить генерується, на кілька частин? Наприклад, частинами 1Гб. Так, можна розділити висновок маскпроцесора, а також готові словники на частини. У Linux для цього зручно скористатися утилітою split, наприклад:

Інші статті по темі
Знайшли помилку?
Якщо ви знайшли помилку, зробіть скріншот і надішліть його боту.