И что-то с памятью моей стало... Тут помню, а тут.., - ничего не помню. Забыл пароли от вай-вая и коды запуска ядерных ракет не помню, а ядерный пепел то нужно запустить по-графику.., - срочно нужны словари для подбора паролей!
АХТУНГ! Сразу отметим, что целью данного материала не является членовредительство или несанкционированное вмешательство в работу компьютерных систем! Материал носит исключительно общеобразовательный, познавательный характер и может быть использован только для борьбы с собственной амнезией!
Однако.., списки паролей - это Вам здесь не тут...
Какие бывают пароли
Качать списки паролей в Интернетах совсем не вариант потому, что там дохренище всякого лишнего мусора, полнейшего бреда, лабуды и лажи, весят они в упакованном виде десятки-сотни ГБ, а в распакованном виде и того поди в разы более того - результат перебора по таким спискам паролей одинаков с тем, как сцать против ветра.
Запускать тупой brute force в надежде вспомнить пароль как бы тоже не вариант, ведь в ожидании результата можно состариться и нахрен крякнуть.
Но, чтобы получились хорошие и правильные, лаконичные и меткие словари паролей, нужно в полном объёме понимать какими бывают часто используемые пароли и из чего они состоят:
Требования к паролю для вай-вай роутера
When you log in wireless router, need to input this password (password is different from your wireless network password)
You can change login password on this page.
The password can't be empty and must contain at most 32 characters.
The password contains0-9 a-z A-Z ! # $ * + , - . % : = ? @ [ ] ^ _ { | } ~
- с пробелами обычно не допускаются, пробелы отбрасываем сразу, а также исключаем:
` & ( ) / \ " ' ;
; - обычно в нижнем регистре (password), но верхний (PASSwOrD) также может быть;
- минимальной длины 4-6 в редких случаях, для вай-вай роутеров и пр. 8-10 и более символов;
- только из цифр (1234567890);
- даты в различном формате (Ymd / dmY / 2034-01-01) с разными разделителями (-.,) и без них;
- буквенно-цифровые (admin123)
- из латинских символов в английском произношении/смысле (admin, administrator, server, hosting, filesystem, etc);
- из латинских символов в русском/украинском произношении/смысле (vasya, peremoga);
- из латинских символов в русском/украинском произношении/смысле с транслитерацией в разных (ГОСТ 7.79-2000, загранпаспорт, водительское удостоверение, банковская карта Яндекс.Денег, Народная Карта Яндекса; Госдепартамент США; Для поисковых систем; ...) форматах по таким буквам как: е ё ж й х ц ч ш щ ъ ы э ю я;
- e - e/ye
- ё - yo/e/ye/jo
- ж - zh/j
- й - j/i/y
- х - kh/x/h
- ц - c/ts
- ч - ch
- щ - shch/sch/sc
- ъ - " (кавычка)/'' (два апострофа)/`` (два грависа)/ie/y/не пишется
- ы - y/y` (y с грависом)/i
- ь - ' (апостроф)/` (гравис)/не пишется
- э - e/eh/e` (e с грависом)
- ю - yu/iu/ju
- я - ya/ia/ja
- транслитерация раком, по-русским буквам при английской раскладке клавиатуры (з@еб@ли вы меня = pft,fkbdsvtyz).
С паролями только из цифр и датами всё относительно просто и понятно.
В случае с транслитом - здесь одними программами (ака crunch cupp3 diceware), тем более онлайн-сервисами (translit-online.ru / ukrlit.org/transliteratsiia) не обойдёшься! Тут нужно самостоятельно делать спец.баш-скрипт(ы) для транслитерации каждого слова во всевозможных его мутациях.
Ещё в транслите для паролей букву О можно чередовать с цифрой 0 (kosmos / k0sm0s, paasword / passw0rd), а мягкий и твёрдый знаки латинской b и без неё (solb / sol).
Для мутации каждой буквы слова в разные регистры (word lowercase uppercase mutation) также потребуется писать отдельный код или попробовать нарыть в Интернетах - если это возможно.
Вобщем.., есть над чем поработать, и чтобы Вспомнить всё
, нам хорошенько нужно подумать...
Передайте Мюллеру, что я всё вспомнил!
(с) Штирлиц
Вспомогательное ПО
Потому, как парсинг больших объёмов данных может занимать приличное время и объём ресурсов.., - нам пригодятся:
ionice -c 3 nice -n 19 CMD cgexec -g blkio,cpu:limit1 CMD
Где CMD запускаемая команда. ionice
и nice
всегда готовы к работе, а cgexec
ещё нужно приготовить и выходит за рамки данного материала...
Также могут быть полезны:
- crunch - tool for creating wordlist
- cupp - generate dictionaries for attacks from personal data
- cupp3 - generate dictionaries for attacks from personal data version for python3
- diceware - Create memorizable passphrases from wordlists and various sources of randomness
Но, эти проги пригодятся разве только для генерирования цифровых паролей и паролей типа admin123, admin112, admin122, - для трансформации уже имеющихся слов и уж тем более для транслитерации они безполезны.
Цифровые пароли
Для создания словарей по всем возможным комбинациям из 8-10 цифр, нам потребуется:
- минимум 120 ГБ свободного места на диске;
- crunch - tool for creating wordlist.
Как увеличивается число комбинаций и потребность в дисковом пространстве смотрите сами:
$ crunch 4 4 1234567890 -o 4.txt Crunch will now generate the following amount of data: 50000 bytes 0 MB 0 GB 0 TB 0 PB Crunch will now generate the following number of lines: 10000 $ crunch 5 5 1234567890 -o 5.txt Crunch will now generate the following amount of data: 600000 bytes 0 MB 0 GB 0 TB 0 PB Crunch will now generate the following number of lines: 100000 $ crunch 6 6 1234567890 -o 6.txt Crunch will now generate the following amount of data: 7000000 bytes 6 MB 0 GB 0 TB 0 PB Crunch will now generate the following number of lines: 1000000 $ ionice -c 3 nice -n 19 crunch 7 7 1234567890 -o 7.txt Crunch will now generate the following amount of data: 80000000 bytes 76 MB 0 GB 0 TB 0 PB Crunch will now generate the following number of lines: 10000000 $ ionice -c 3 nice -n 19 crunch 8 8 1234567890 -o 8.txt Crunch will now generate the following amount of data: 900000000 bytes 858 MB 0 GB 0 TB 0 PB Crunch will now generate the following number of lines: 100000000
Проверяем, присутствует ли случайное число из 8 цифр среди полученного результата:
cat 8.txt | grep 13579246 cat 8.txt | grep 13579240
Все комбинации из 8 цифр заняли без малого 1 ГБ, а вот на всевозможные пароли из 9 цифр нам уже потребуется 10 ГБ свободного места:
$ crunch 9 9 1234567890 -o 9.txt Crunch will now generate the following amount of data: 10000000000 bytes 9536 MB 9 GB 0 TB 0 PB Crunch will now generate the following number of lines: 1000000000
Но, наверное будет лучше результат поделить на куски по 1 ГБ и сделать это в отдельном каталоге:
mkdir -p 9 && cd 9 crunch 9 9 1234567890 -o 9.txt -b 1gib you must use -o START if you specify a count crunch 9 9 1234567890 -o START -b 1gib Crunch will now generate the following amount of data: 10000000000 bytes 9536 MB 9 GB 0 TB 0 PB Crunch will now generate the following number of lines: 1000000000 crunch: 1% completed generating output ... crunch: 9% completed generating output crunch: 10% completed generating output crunch: 10% completed generating output ...111111111-218485292.txt - 1024MB... crunch: 11% completed generating output
Получился набор из 10 файлов с диапазонами:
tree . ├── 077478749-000000000.txt ├── 111111111-218485292.txt ├── 218485293-325859474.txt ├── 325859475-433233656.txt ├── 433233657-530507838.txt ├── 530507839-647981010.txt ├── 647981021-755356102.txt ├── 755356103-862720384.txt ├── 862720385-969004566.txt └── 969004567-077478748.txt
По времени заняло в среднем 2-3 мин на 1 файл = около 30 мин
На все цифровые варианты из 10-и знаков потребуется уже целых 105 ГБ и около 5-и часов по времени (начало в 18:05, завершение в 22:20)!
mkdir -p 10 && cd 10 crunch 10 10 1234567890 -o START -b 1gib Crunch will now generate the following amount of data: 110000000000 bytes 104904 MB 102 GB 0 TB 0 PB Crunch will now generate the following number of lines: 10000000000 tree . ├── 0067626197-0000000000.txt ├── 0188000150-0286722052.txt ├── 0286722053-0384335945.txt ├── 0384335946-0481948838.txt ├── 0481948839-0579561731.txt ├── 0579561732-0677174624.txt ├── 0677174625-0774787517.txt ├── 0774787518-0872390300.txt ├── 0872390411-0969013203.txt ├── 0969013204-0067626196.txt ├── 1087239041-2184852933.txt ├── 1108723904-1206336896.txt ├── 1111111111-1108723903.txt ├── 1206336897-1303949789.txt ├── 1303949780-1401562682.txt ├── 1401562683-1599175575.txt ├── 1599175576-1696788468.txt ├── 1696788469-1794301361.txt ├── 1794301362-1891014254.txt ├── 1891014255-1989627147.txt ├── 1989627148-1087239030.txt ├── 2063368971-3150981863.txt ├── 2184852934-2282465826.txt ├── 2282465827-2379078719.txt ├── 2379078710-2477691612.txt ├── 2477691613-2575204405.txt ├── 2575204406-2672917398.txt ├── 2672917399-2760520291.txt ├── 2760520292-2868143184.txt ├── 2868143185-2965755077.txt ├── 2965755078-2063368960.txt ├── 3039497801-4136000793.txt ├── 3150981864-3258594756.txt ├── 3258594757-3356107649.txt ├── 3356107640-3453810542.txt ├── 3453810543-3551433435.txt ├── 3551433436-3648046328.txt ├── 3648046329-3746659221.txt ├── 3746659222-3844272114.txt ├── 3844272115-3941884907.txt ├── 3941884908-3039497890.txt ├── 4015626831-5113239723.txt ├── 4136000794-4234723686.txt ├── 4234723687-4332336579.txt ├── 4332336570-4429949472.txt ├── 4429949473-4527562365.txt ├── 4527562366-4625175258.txt ├── 4625175259-4722788151.txt ├── 4722788152-4810390044.txt ├── 4810390045-4917013937.txt ├── 4917013938-4015626820.txt ├── 5089368654-6186981546.txt ├── 5100852617-5208465409.txt ├── 5113239724-5100852616.txt ├── 5208465400-5305078302.txt ├── 5305078303-5403691295.txt ├── 5403691296-5501204188.txt ├── 5501204189-5698916081.txt ├── 5698916082-5796529974.txt ├── 5796529975-5894142867.txt ├── 5894142868-5991755750.txt ├── 5991755761-5089368653.txt ├── 6065497584-7162000476.txt ├── 6186981547-6284594439.txt ├── 6284594430-6382107332.txt ├── 6382107333-6479810225.txt ├── 6479810226-6577433118.txt ├── 6577433119-6674045011.txt ├── 6674045012-6772658804.txt ├── 6772658805-6860271797.txt ├── 6860271798-6967884680.txt ├── 6967884691-6065497583.txt ├── 7041626514-8139239306.txt ├── 7162000477-7250723369.txt ├── 7250723360-7358336262.txt ├── 7358336263-7455949155.txt ├── 7455949156-7553561048.txt ├── 7553561049-7651174941.txt ├── 7651174942-7748787834.txt ├── 7748787835-7846390727.txt ├── 7846390728-7943013610.txt ├── 7943013621-7041626513.txt ├── 8017755444-9115368336.txt ├── 8139239307-8236852299.txt ├── 8236852290-8334465192.txt ├── 8334465193-8431077085.txt ├── 8431077086-8529680978.txt ├── 8529680979-8627203871.txt ├── 8627203872-8724916764.txt ├── 8724916765-8822529657.txt ├── 8822529658-8910142540.txt ├── 8910142551-8017755443.txt ├── 9091497267-0188000159.txt ├── 9115368337-9212981229.txt ├── 9200594123-9308106015.txt ├── 9212981220-9200594122.txt ├── 9308106016-9405819808.txt ├── 9405819809-9503432701.txt ├── 9503432702-9690045694.txt ├── 9690045695-9798658587.txt ├── 9798658588-9896271470.txt ├── 9896271481-9993884373.txt └── 9993884374-9091497266.txt
Можно перелопатить варианты:
- из 8 цифр (1 ГБ) - за 1-2 дня;
- из 9 цифр (10 ГБ) - за 10-12 дней;
- из 10 цифр (105 ГБ) - месяца 3;
- и т.д...
Разумеется скорость получения результата зависит от мощности оборудования.., и учитывая тот факт, что амнезия может накрыть в самый не подходящий момент, а суперкомпьютера под мышкой может не быть в наличии, то - нужно в самую первую очередь делать менее ресурсоёмкие и смысловые словари.
Например, более экономный и частоиспользуемый вариант с перестановкой знаков местами типа "123, 321, 231" без их повтора "111, 112, 113, ..." - например полезно при переборе по дате рождения:
$ crunch 8 8 -o 8_p.txt -p 1234567890 Crunch will now generate approximately the following amount of data: 39916800 bytes 38 MB 0 GB 0 TB 0 PB Crunch will now generate the following number of lines: 3628800 crunch: 100% completed generating output
38 MB как никак не 1 ГБ тупого перебора всех комбинаций из 8-ми цифр.
Однако, ожидаемый результат вместо 8-ми, получился длиной в 10 цифр, потому, что при указании опции -p
длина min and max length игнорируется:
man crunch ... -p charset OR -p word1 word2 ... Tells crunch to generate words that don't have repeating characters. By default crunch will generate a wordlist size of #of_chars_in_charset ^ max_length. This option will instead gener‐ ate #of_chars_in_charset!. The ! stands for factorial. For example say the charset is abc and max length is 4.. Crunch will by default generate 3^4 = 81 words. This option will instead generate 3! = 3x2x1 = 6 words (abc, acb, bac, bca, cab, cba). THIS MUST BE THE LAST OPTION! This option CANNOT be used with -s and it ignores min and max length however you must still specify two numbers.
Тогда пойдём другим путём:
mv 8_p.txt 10_p.txt crunch 8 8 -o 8_p1.txt -p 12345678 crunch 8 8 -o 8_p2.txt -p 12345670 crunch 8 8 -o 8_p3.txt -p 12345690 crunch 8 8 -o 8_p4.txt -p 12345890 crunch 8 8 -o 8_p5.txt -p 12347890 crunch 8 8 -o 8_p6.txt -p 12367890 crunch 8 8 -o 8_p7.txt -p 12567890 crunch 8 8 -o 8_p8.txt -p 14567890 crunch 8 8 -o 8_p9.txt -p 23456789 crunch 8 8 -o 8_p0.txt -p 23456780 cat 8_p*.txt >> tmp && rm -rf 8_p*.txt && cat tmp | \ sort -u > 8_p.txt && rm -rf tmp crunch 9 9 -o 9_p1.txt -p 123456789 crunch 9 9 -o 9_p2.txt -p 123456780 crunch 9 9 -o 9_p3.txt -p 123456790 crunch 9 9 -o 9_p4.txt -p 123456890 crunch 9 9 -o 9_p5.txt -p 123457890 crunch 9 9 -o 9_p6.txt -p 123467890 crunch 9 9 -o 9_p7.txt -p 123567890 crunch 9 9 -o 9_p8.txt -p 124567890 crunch 9 9 -o 9_p9.txt -p 134567890 crunch 9 9 -o 9_p0.txt -p 234567890 cat 9_p*.txt >> tmp && rm -rf 9_p*.txt && cat tmp | \ sort -u > 9_p.txt && rm -rf tmp cat *_p.txt >> tmp && | cat tmp | sort -u > 8-10_p.txt && rm -rf tmp
Файлы с перестановкой цифр местами без их повторения (типа 11123456, 11113456, ...) от 8 до 10 получилсь размером:
tree -h . ├── [ 38M] 10_p.txt ├── [ 76M] 8-10_p.txt ├── [3.5M] 8_p.txt └── [ 35M] 9_p.txt
По цифровым паролям от 4 до 10 закончили, от 10 и выше то уже космос...
Полный набор всевозможных варинтов цифровых паролей весит:
- от 4 до 7 цифр = 83,6 МиБ
- от 8 до 10 цифр = 112,6 ГиБ
Варианты с перестановкой (без повторения) занимают:
- от 8 до 10 цифр = 152,3 МиБ.
В финальном варианте все комманды можно будет запихнуть в один баш-скрипт и создавать такие списки цифровых паролей по месту их надобности, чтобы не тратить десятки и сотни гигабайт Интернет-трафика если он платный например.
Пароли в виде дат
Чтобы чем-то управлять, нужно иметь как никак точный плян... Ну, скажем лет на тысячу!
(с) Воланд.
Предположим, что владелец пароля в его качестве выбрал какую-то дату, и это магёт быть не обязательно дата рождения, а например дата какого-то древнего истерического исторического или грядущего в будущем события.
С таким расчётом нам нужны словари с датами в пределах +- одной тысячи лет, сложить в один файл или поделить на куски по 100 лет.
Сделать такой список можно прямо в коммандной строке bash:
man date ... Convert seconds since the epoch (1970-01-01 UTC) to a date start_date="1000-01-01" \ end_date="2070-01-01" \ seq $(date --date "$start_date" +%s) 86400 $(date --date "$end_date" +%s) | \ sed -n -E -e 's/(.*)/date --date @& +"%Y-%m-%d"/ep' date: неверная дата «2070-01-01»
date: неверная дата «2070-01-01» - это Проблема 2038 года на 32х-битных машинах.
В таком случае, или делать ход козлом или запустить ту же команду на виртуальной 64-битной машине...
uname -a Linux localhost 4.19.0-25-amd64 #1 SMP Debian 4.19.289-2 (2023-08-08) x86_64 GNU/Linux mkdir -p date && cd date seq $(date --date "$start_date" +%s) 86400 $(date --date "$end_date" +%s) | \ sed -n -E -e 's/(.*)/date --date @& +"%Y-%m-%d"/ep' > date.txt
В полученном результате меняя сепаратор -
на любой другой допустимый в паролях спецсимвол ! # $ * + , - . % : = ? @ [ ] ^ _ { | } ~
каждый сохраняем в отдельном файле, не забыв в конце переименовать date.txt в 1000-2070_ymd1.txt
cat date.txt | sed 's/-//g' > 1000-2070_ymd0.txt cat date.txt | sed 's/-/./g' > 1000-2070_ymd2.txt cat date.txt | sed 's/-/,/g' > 1000-2070_ymd3.txt cat date.txt | sed 's/-/~/g' > 1000-2070_ymd4.txt cat date.txt | sed 's/-/!/g' > 1000-2070_ymd5.txt cat date.txt | sed 's/-/@/g' > 1000-2070_ymd6.txt cat date.txt | sed 's/-/#/g' > 1000-2070_ymd7.txt cat date.txt | sed 's/-/$/g' > 1000-2070_ymd8.txt cat date.txt | sed 's/-/%/g' > 1000-2070_ymd9.txt cat date.txt | sed 's/-/^/g' > 1000-2070_ymd10.txt cat date.txt | sed 's/-/:/g' > 1000-2070_ymd11.txt cat date.txt | sed 's/-/*/g' > 1000-2070_ymd12.txt cat date.txt | sed 's/-/[/g' > 1000-2070_ymd13.txt cat date.txt | sed 's/-/]/g' > 1000-2070_ymd14.txt cat date.txt | sed 's/-/_/g' > 1000-2070_ymd15.txt cat date.txt | sed 's/-/+/g' > 1000-2070_ymd16.txt cat date.txt | sed 's/-/=/g' > 1000-2070_ymd17.txt cat date.txt | sed 's/-/|/g' > 1000-2070_ymd18.txt cat date.txt | sed 's/-/{/g' > 1000-2070_ymd19.txt cat date.txt | sed 's/-/}/g' > 1000-2070_ymd20.txt cat date.txt | sed 's/-/?/g' > 1000-2070_ymd21.txt mv date.txt 1000-2070_ymd1.txt
- 1000-2070_ymd0.txt - даты без разделителя;
- 1000-2070_ymd1.txt - изначальный файл дат с разделителем
-
.
Все файлы можно объединить в один, скажем 1000-2070_ymd.txt.
Аналогично делаем даты в формате dmY.
Можно также учесть, что каждая цифра даты в пароле может быть разделена спецсимволом, например для 2038-01-19: 2-0-3-8-0-1-1-9 Чтобы использовать такие даты можно трансформировать файл 1000-2070_ymd0.txt с датами без разделителя.
Словарная БД
Продолжение следует...
P.S. У кого-то по вордлистам есть какие-то соображения, дополнения, предложения? Пишите в комментарии, интересно будет узнать.