| # | Mode |
|---|---|
| 0 | Straight |
| 1 | Combination |
| 3 | Груба сила |
| 6 | Гібридний список слів + маска |
| 7 | Гібридна маска + список слів |
Цей режим атаки також відомий як «словникова атака». Немає чого сказати, просто враховуючи словник, 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 Хантінгрок kittyparis Кіттірок Веселка Париж 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, цей метод застарів і повністю замінений масковою атакою, тому дослідження не проводяться
Це відносно новий метод атаки. Приклад такий:
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?l?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 АБ:187ef4436122d1cc2f40dc2b92f0eba0 ac:e2075474294983e013ee4dd2201c7a73 ба:07159c47ee1b19ae4fb9c40d480856c4 до н.е.:5360af35bde9ebd8f01f492dc059593c ca:5435c69ed3bcc5b2e4d580e393e373d3 cb:d0d7fdb6977b26929fb68c6083c0b439 abc:900150983cd24fb0d6963f7d28e17f72 abc:900150983cd24fb0d6963f7d28e17f72 БАК: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, який виглядає так:
Привіт werner
Потім команда:
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
еквівалентно простому використанню словника:
00hello 01 Привіт ... 99 Привіт 00 Вернер 01 Вернер ... 99 веренер