| # | Mode |
|---|---|
| 0 | Straight |
| 1 | Combination |
| 3 | Brute-force |
| 6 | Гібридний список слів + маска |
| 7 | Hybrid Mask + Wordlist |
Цей режим атаки також відомий як «словникова атака». Немає чого сказати, просто враховуючи словник, hashcat читає вміст словника рядок за рядком, обчислює значення хеша кожного рядка та порівнює його з цільовим значенням хеша.
Приклад:
hashcat -a 0 -m 400 example400.hash example.dict
Baidu сказав мені, що комбінація — це іменник, що означає: «комбінація; консорціум; комбінація пароля; комбінезон». Цей режим атаки насправді дуже простий, тобто поєднує вміст двох словників паролів. Використання цього режиму атаки вимагає вказання двох словників паролів. Припустімо, що у нас є два словники паролів dict1.txt і dict2.txt, зміст яких:
полювання Кітті Веселка
і
Париж rock
Тоді команда:
hashcat -m 0 -a 1 hash.txt dict1.txt dict2.txt
Словник, який насправді спробував:
huntingparis Хантингрок КіттіПарис кітірок Веселка Париж rainbowrock
Слова в dict1.txt ліворуч, а слова в dict2.txt праворуч, загалом 3×2=6.
Параметри, пов'язані з цим шаблоном:
-j, --rule-left Правило після -k, --rule-right
-j діє ліворуч, а правило після -k діє праворуч, наприклад, додавання параметра -j '$-', тоді фактичний словник спроби:
hunting-paris мисливська скеля Кітті-Париж Кітті-рок rain-bowparis rain-bowrock
Додати параметр -j '^!', Тоді фактичний словник, який я спробував:
! ПолюванняПариж ! Мисливська скеля ! КіттіПариж ! Кіттірок ! Веселка Париж ! rainbowrock
Додайте параметр -k '^>', тоді фактичний словник, який ви спробуєте:
hunting>paris Полювання>Скеля Кітті>Париж Кітті>Рок дощ>bowparis Яке правило rain>bowrock
? Вживання «$» і «^» схоже на регулярні вирази, тож чи є вони регулярними? Насправді ні, правила hashcat реалізовані самостійно, що є ще однією великою частиною вмісту, див. Rule-based Attack
, щоб спробувати даний набір символів. різні комбінації. Згідно з офіційною вікі hashcat, цей метод застарів і повністю замінений Mask-Attack, тому дослідження не проводяться
Це відносно новий метод атаки. Приклад:
hashcat -a 3 -m 0 md5.hash ? л? л? л? л? l
Хоча згідно з таблицею «Режими атаки» -A 3 відповідає грубій силі, насправді -A 3 використовує маскову атаку. Маскову атаку можна розглядати як розширену грубу силу. Параметр
-m використовується для визначення типу функції хеш. Значення md5 зберігається у файлі md5.hash. Ключовим є останній рядок "? l? l? l? l? l? l? l", який називається маскою.
Маска — це рядок, який складається з кількох заповнювачів. "?l" — це заповнювач, де "?" — це ключове слово, яке використовується для зміни наступного "l". ?u", "?d", "?h", "?h", "?s", "?a" і "?b", представлений набором символів, як показано в таблиці нижче.
| ? | Charset |
|---|---|
| l | abcdefghijklmnopqrstuvwxyz |
| u | ABCDEFGHIJKLMNOPQRSTUVWXYZ |
| d | 0123456789 |
| h | 0123456789abcdef |
| h | 0123456789ABCDEF |
| s | ! "#$%&'()*+,-./:;<=>?@[\]^_`~{|} |
| a | ? л? У? Д? s |
| b | 0 – 0xff |
Таким чином ми розуміємо, "?l ?l" насправді еквівалентний словнику паролів:
aaaaa ААААБ ... zzzzz
Так само "?l?u?d" еквівалентно словнику пароля:
aA0 АА 1 ... bA0 ... zZ9
Набір символів у таблиці вище вбудований у hashcat. Ми також можемо вказати набір символів самостійно:
--custom-charset1 = набір символів 1 --custom-charset2=набір символів 2 --custom-charset3=набір символів 3 --custom-charset4=набір символів 4
параметр –custom-charsetN можна скоротити як -N, наприклад –custom-charset1 можна скоротити як -1. Набір символів, вказаний за допомогою -N, вказується в масці у вигляді заповнювача "?N", наприклад:
-1 abc123 ? 1? 1? 1
еквівалентно словнику пароля:
aaa ААБ ... АА 3 ... Окрім рядка, що представляє набір символів, 333
-N також може бути файлом, що закінчується на .hcchr, де зберігається набір символів. hashcat постачається з багатьма файлами .hcchr у каталозі charsets/інсталяційного пакета.
Колекція символів, представлена заповнювачем "??", є самим "?". Крім того, коли інші символи використовуються як заповнювачі, вони представляють сам символ. Наприклад, "?lwerner?d" еквівалентно словнику пароля:
awerner0 Авернер 1 ... zwerner9
З наведеними вище знаннями легко зрозуміти маску. Маска складається з кількох заповнювачів, кожен з яких є набором символів, а маска - це комбінація наборів символів-заповнювачів. Кількість заповнювачів дорівнює довжині пароля. Які переваги такого дизайну порівняно з простим набором символів і довжиною пароля?
Припустімо, що ми знаємо, що чиїсь пароль складається з 7 цифр, перша цифра — велика літера, наступні 3 цифри — малі літери, а останні 3 цифри — цифри. Якщо це традиційний грубий злом, потрібні набори символів A-Z, A-Z і 0-9, загалом 62 символи. Вам потрібно спробувати до 62^7=3 521 614 606 208 разів, що є рівнем трильйонів. Використовуючи маску для опису цього пароля, це "\u\l\l\l\d\d\d", який легко обчислити (26^4)×(10^3)=456 976 000 можливостей, що становить 100 мільйонів, що на 4 порядки менше, ніж у попередньому методі.
Щоб зробити крок назад, навіть якщо ми не знаємо розподілу паролів, за допомогою маски легко імітувати ефект традиційного насильницького злому.
Тепер проблема полягає в тому, що маска виправлена, скільки заповнювачів записано мертво, і що нам робити, якщо ми не знаємо довжини пароля. Це нормально, якщо пароль занадто довгий, якщо пароль когось має лише 3 цифри, а ми маємо 4 заповнювачі, і ми не можемо їх розгадати, чи не буде це великою втратою? Чи потрібно писати всі маски різної довжини, починаючи з 1? Як це клопітно.
Є два рішення: використовувати файл маски, записати кілька масок в один файл, а потім вказати цей файл у командному рядку. Зауважте, що файл маски повинен закінчуватися на .hcmask.
Наприклад, вміст test.hcmask:
? л ? л? л ? л? л? л ? л? л? л? l
використовує файл за допомогою такої команди:
hashcat -m 0 -a 3 --show md5.hash test.hcmask
Інше рішення полягає в тому, щоб додати параметр –increment, який повідомляє hashcat, що відповідно до маски, яку ми надаємо, почніть із заповнювача, а потім спробуйте два, три, поки ми не надамо довжини. Наприклад, ми пишемо цей заповнювач "abc", а потім обчислюємо значення md5 такого рядка:
a:0cc175b9c0f1b6a831c399e269772661 b:92eb5ffee6ae2fec3ad71c777531578f c:4a8a08f09d37b73795649038408b5f33 ab:187ef4436122d1cc2f40dc2b92f0eba0 ac:e2075474294983e013ee4dd2201c7a73 ba:07159c47ee1b19ae4fb9c40d480856c4 bc:5360af35bde9ebd8f01f492dc059593c ca:5435c69ed3bcc5b2e4d580e393e373d3 cb:d0d7fdb6977b26929fb68c6083c0b439 abc:900150983cd24fb0d6963f7d28e17f72 abc:900150983cd24fb0d6963f7d28e17f72 bac:79ec16df80b57696a03bb364410061f3 bca:b64eab8ce39e013604e243089c687e4f cba:3944b025c9ca7eec3154b44666ae04a0 cab:16ecfd64586ec6c1ab212762c2c38a90
Перед ":" йде вихідний рядок для обчислення значення хеша, а після ":" йде обчислене значення hasn. Збережіть наведений вище вміст у файлі md5.hash, а потім виконайте таку команду:
hashcat -m 0 -a 3 --show --username md5.hash abc
Додавання параметра –username пов'язане з тим, що перед кожним із наших значень хеша є вихідний рядок, якщо цей параметр не додається, hashcat покаже, що правильне значення хеша не знайдено. Якщо додати цей параметр, hashcat вважатиме, що рядок перед значенням хеша є іменем користувача пари хеша, щоб значення хеша можна було завантажити плавно.
Результат запуску полягає в тому, що вирішується лише один хеш:
900150983cd24fb0d6963f7d28e17f72:abc
Тепер додайте параметр –increment і запустіть знову:
hashcat -m 0 -a 3 --show --increment --username md5.hash abc
Цього разу було вирішено ще два хеші:
0cc175b9c0f1b6a831c399e269772661:a 187ef4436122d1cc2f40dc2b92f0eba0:ab
Видно, –інкремент зіграв свою роль. Але в той же час ми також знаємо, що з цим параметром hashcat намагатиметься лише a, ab і abc у порядку, а не розташувати та поєднувати заповнювачі в порядку, щоб спробувати різні можливості.
Гібридна атака схожа на комбінаторну атаку, яка поєднує два словники, тоді як гібридна атака поєднує словник і маску.
Припустимо, у нас вже є словник example.dict, який виглядає так:
Привіт Вернер
Тоді команда:
hashcat -m 0 -a 6 md5.hash example.dict ? Д? d
еквівалентно простому використанню словника:
hello00 Привіт 01 ... Привіт 99 Вернер 00 Вернер 01 ... werener99
Тоді команда:
hashcat -m 0 -a 7 md5.hash ? Д? dexample.dict
еквівалентно простому використанню словника:
00 Привіт 01 Привіт ... 99 Привіт 00 Вернер 01 Вернер ... 99 Веренер