Использование файлов масок .hcmask в Hashcat для максимально гибкой замены символов
Атака на основе правил (Rule-based attack) заключается гибкой генерации и фильтрации кандидатов в пароли.
Не смотря на все свои возможности, данная атака не является всемогущей. Рассмотрим следующий пример.
Имеется слово
seesaw
и нужно заменить символ s на символ $. К примеру в John the Ripper можно попытаться использовать правило ss$, но оно возвращает только $ee$aw в то время когда нужно:
seesaw $eesaw see$aw $ee$aw
Также нужно заменить другие символы по аналогичной схеме.
Данная задача подразумевает, что при выполнении замены программа должна знать о предыдущих заменах, а это входит в противоречие со способами обработки словарей в Rule-based attack, когда каждая строка обрабатывается независимо от предыдущих и последующих. Поэтому данная задача вряд ли решаема с помощью Rule-based attack.
Тем не менее, можно убедиться, что при генерации словарей на основе маски мы получаем примерно то, что нам нужно:
maskprocessor -1 s$ ?1ee?1aw seesaw see$aw $eesaw $ee$aw
Но что делать, если замену переменного количества символов, либо замену символа нужно выполнить в разных позициях нужно выполнить не в одном слове, а в целом словаре?
Эта задача вполне решаема с помощью программирования. Пример алгоритма:
- получаем количество символов в слове для замены
- если символ для замены один, то выводим два слова — одно с заменой, другое нет
- если символов для замены два, то выводим четыре слова — без замены, с заменой первого символа, с заменой второго символа, с заменой обоих символов
- если символов для замены три, то выводим восемь комбинаций - …
- и так далее
Этот алгоритм можно оформить в виде функции, аргументами которой должны быть: 1) символ который нужно заменить; 2) символ на который нужно заменить. Достаточно написать код функции один раз и использовать любое количество раз. Подобное можно реализовать даже с помощью PHP.
Но не спешите впадать в грусть — можно обойтись и без программирования. Используя такие вещи как:
1. Маски
2. Файлы с масками
Алгоритм следующий:
1. Конвертируем словарь в набор масок с нужными нам параметрами.
2. Генерируем новый словарь на основе файла масок
К примеру, имеется список слов d1.txt со следующим содержимым:
seesaw samuelsonmarian samuelspence samuelspevak samuelsrie samuelss samuelsstarr SAMUELSTERNA samuelstevens samuelsux1 samuels-x samuelt** samuelta. samueltad samueltan samueltanner samueltapia2 samueltas21 samuel+teadoro samuelteall samuelteama samuel te amo samuel,te,amo samuelteamo SAMUELTEAMO samuelteamo21 SAMUELTEAMOMUCHO samueltequiero samuelthane99
Задача заменить символ «s» на символ «$» во всех возможных комбинациях, чтобы, к примеру, из слова seesaw получилось
seesaw $eesaw see$aw $ee$aw
Начинаем с генерации файла масок. В данной команде в строках файла d1.txt находятся все символы «s», которые меняются на «?1», полученный результат сохраняется в файл masks.hcmask:
cat d1.txt | sed 's/s/\?1/g' > masks.hcmask
Как вы уже поняли, получился набор масок. К примеру, «seesaw» превратилась в «?1ee?1aw».
Формат файлов .hcmask следующий:
ПОЛЬЗОВАТЕЛЬСКИЙ_НАБОР1,ПОЛЬЗОВАТЕЛЬСКИЙ_НАБОР2,ПОЛЬЗОВАТЕЛЬСКИЙ_НАБОР3,ПОЛЬЗОВАТЕЛЬСКИЙ_НАБОР4,МАСКА
В моём простом примере я буду использовать только один пользовательский набор символов, поэтому конечный формат файла masks.hcmask будет таким:
ПОЛЬЗОВАТЕЛЬСКИЙ_НАБОР1,МАСКА
Добавление префикса к каждой строке файла можно сделать следующей командой:
sed -i -e 's/^/ПРЕФИКС/' ФАЙЛ
В моём случае пользовательский набор символов это «s$», то есть на месте «?1» нужно вставлять «s» или «$». Тогда команда следующая:
sed -i -e 's/^/s$,/' masks.hcmask
Содержимое файла masks.hcmask теперь такое:
s$,?1ee?1aw s$,?1amuel?1onmarian s$,?1amuel?1pence s$,?1amuel?1pevak s$,?1amuel?1rie s$,?1amuel?1?1 s$,?1amuel?1?1tarr s$,SAMUELSTERNA s$,?1amuel?1teven?1 s$,?1amuel?1ux1 s$,?1amuel?1-x s$,?1amuelt** s$,?1amuelta. s$,?1amueltad s$,?1amueltan s$,?1amueltanner s$,?1amueltapia2 s$,?1amuelta?121 s$,?1amuel+teadoro s$,?1amuelteall s$,?1amuelteama s$,?1amuel te amo s$,?1amuel,te,amo s$,?1amuelteamo s$,SAMUELTEAMO s$,?1amuelteamo21 s$,SAMUELTEAMOMUCHO s$,?1amueltequiero s$,?1amuelthane99
Теперь в Hashcat запускам генерацию словарей на основе файла с масками masks.hcmask:
hashcat -a 3 --stdout masks.hcmask
Мы получили нужный результат со всеми возможными вариантами замены символа в разных позициях. Начало выводимых данных:
seesaw $eesaw see$aw $ee$aw samuelsonmarian $amuelsonmarian samuel$onmarian $amuel$onmarian samuelspence $amuelspence samuel$pence $amuel$pence samuelspevak $amuelspevak samuel$pevak $amuel$pevak samuelsrie $amuelsrie samuel$rie $amuel$rie samuelss $amuelss samuel$$ $amuel$$ samuels$ $amuels$ samuel$s $amuel$s samuelsstarr $amuelsstarr samuel$$tarr $amuel$$tarr samuels$tarr $amuels$tarr samuel$starr $amuel$starr ……………………. ……………………. …………………….
За раз можно использовать до четырёх пользовательских наборов, то есть заменять подобным образом до четырёх символов. Если нужно заменить больше символов, то действия по подобному алгоритму можно повторять столько раз, сколько это потребуется.
Связанные статьи:
- Продвинутые техники создания словарей (99%)
- Генерация словарей по любым параметрам с pydictor (96.6%)
- Виды атак Hashcat (74.1%)
- Как создать словари, соответствующие определённым политикам надёжности паролей (с помощью Атаки на основе правил) (73.1%)
- Полное руководство по John the Ripper. Ч.5: атака на основе правил (64%)
- Инструкция по использованию Router Scan by Stas’M. Часть первая: Опции и анонимность сканирования (RANDOM - 1.1%)