A Hashcat számos támadási módot kínál. A teljes súgót a –help paraméterrel tekintheti meg, ahol megtalálja az „Attack Modes” táblázatot az alábbiak szerint:
| # | |
|---|---|
| 0 | Egyenes |
| 1 | Kombináció |
| 3 | Brute-force |
| 6 | Hibrid szavak listája + maszk |
| 7 | Hibrid maszk + szavak listája |
Ezt a támadási módot „szótár támadásnak” is nevezik. Nincs mit mondani róla, csak egy szótárt adunk meg, a hashcat sorban olvassa a szótár tartalmát, kiszámítja minden sor hash értékét, és összeveti a cél hash értékével.
Példa:
hashcat -a 0 -m 400 example400.hash example.dict
A Baidu azt mondja nekem, hogy a Kombináció egy főnév, ami azt jelenti: „kombináció; társulás; jelszó kombináció; harisnyanadrág”. Ez a támadási mód valójában nagyon egyszerű, csak két jelszó szótár tartalmát kell kombinálni. Ehhez a támadási módhoz nem kell többet vagy kevesebbet, mint két jelszó szótár.Tegyük fel, hogy van két jelszó-szótárunk, a dict1.txt és a dict2.txt, amelyek tartalma a következő:
hunting kitty rainbow
és
paris rock
akkor a parancs:
hashcat -m 0 -a 1 hash.txt dict1.txt dict2.txt
Valójában a próbálkozott szótárak a következők:
huntingparis huntingrock kittyparis kittyrock rainbowparis rainbowrock
A dict1.txt szavai balra, a dict2.txt szavai jobbra vannak, összesen 3×2=6 darab.
A ehhez a mintához kapcsolódó paraméterek:
-j, --rule-left -k, -szabály-jobb
-j után a szabályok a bal oldalon működnek, a -k utáni szabályok a jobb oldalon működnek. Például, ha hozzáadjuk a -j '$-' paramétert, akkor a ténylegesen kipróbált szótár a következő:
hunting-paris hunting-rock kitty-paris kitty-rock rain-bowparis rain-bowrock
Ha hozzáadjuk a -j '^!' paramétert, akkor a ténylegesen kipróbált szótár a következő:
!huntingparis !huntingrock !kittyparis !kittyrock !rainbowparis !rainbowrock
Ha hozzáadjuk a -k '^>' paramétert, akkor a ténylegesen kipróbált szótár a következő:
hunting>paris hunting>rock kitty>paris kitty>rock rain>bowparis rain>bowrock
Mi ez a szabály? A „$” és „^” használata hasonló a reguláris kifejezésekhez, tehát ez is reguláris kifejezés? Valójában nem, a hashcat szabályait saját maguk implementálták, ami egy nagyobb témakör, további részletek a Rule-based Attack
Megpróbálja a megadott karakterkészlet különféle kombinációit. A hashcat hivatalos wiki szerint ez a módszer elavult, a Mask-Attack teljesen leváltotta, ezért nem foglalkozunk vele,
Ez egy viszonylag új támadási mód, példa:
hashcat -a 3 -m 0 md5.hash ?l?l?l?l?l
Bár az „Attack Modes” táblázat szerint a -a 3 a Brute-force-nak felel meg, valójában a -a 3 a Mask Attack-ot használja. A Mask Attack a Brute-force egy fejlettebb változatának tekinthető.
-m paraméter a hash függvény típusát adja meg, az md5.hash fájl az md5 értékeket tárolja. A legfontosabb az utolsó „?l?l?l?l?l?l” karakterlánc, ezt a maszkot nevezzük masknak.
A maszk egy karakterlánc, amely több helyettesítőből áll. A „?l” egy helyettesítő, ahol a „?” egy kulcsszó, ami a rákövetkező „l”-t módosítja. A „?l” egy karakterhalmazt jelöl, ami mellett a „?u”, „?d”, „?h”, „?H”, „?s”, „?a” és „?b” is használhatók, az alábbi táblázatban látható módon.
| ? | Charset | ||
|---|---|---|---|
| l | abcdefghijklmnopqrstuvwxyz | ||
| u | ABCDEFGHIJKLMNOPQRSTUVWXYZ | ||
| d | 0123456789 | ||
| h | H | 0123456789ABCDEF | |
| ! “#$%&'()*+,-./:;<=>?@[\]^_`~{|} | |||
| a | ?l?u?d?s | ||
| b | 0 – 0xff |
Ebből tehát megértettük, hogy „?l?l?”.L?l?l" tulajdonképpen jelszószótárnak felel meg:
aaaa Aaaab Szóval... Zzzz
Hasonlóképpen, a "?l?u?d" jelszószótárnak felel meg:
aA0 aA1 ... bA0 ... zZ9
A fenti táblázat karakterkészlete beépített hashcat. A karakterkészletet saját magunk is megadhatjuk:
--custom-charset1 = karakterkészlet 1 --custom-charset2 = karakterkészlet 2 --custom-charset3 = karakterkészlet 3 --custom-charset4 = karakterkészlet 4
Paraméter - custom-charsetN rövidíthető -N-re, pl. - custom-charset1 rövidíthető -1-re. A -N-vel megadott karakterkészlet a maszkban helyőrzőként szerepel "?N," pl.:
-1 abc123 ? 1?1
jelszószótárnak felel meg:
aaa aab ... aa3 ... 333
-N után a karakterkészletet jelölő karakterlánc mellett egy .hcchr kiterjesztésű fájl is lehet, amely a karakterkészletet tárolja. A hashcat számos .hcchr fájlt tartalmaz, amelyek a charsets/könyvtárban találhatók a telepítési csomagban.
A „??” helyőrző egy „?” karakterkészletet jelent. Ezenkívül a többi karakter helyőrzőként a karaktert magát képviseli, például „?lwerner?” egyenértékű a jelszó-szótárral:
awerner0 awerner1 ... zwerner9
Ezzel a tudással könnyen megértjük a maszkot. Egy maszk több helyőrzőből áll, mindegyik egy karakterkészlet, és egy maszk a különböző helyőrzők karakterkészleteinek kombinációja. A helyőrzők száma megegyezik a jelszó hosszával. Milyen előnyökkel jár ez a tervezés az egyszerűen megadott karakterkészlethez és jelszó-hosszhoz képest?
Tegyük fel, hogy egy személy jelszava 7 karakterből áll, az első egy nagybetű, a következő három kisbetű, az utolsó három pedig szám. A hagyományos brute force támadás esetén 62 karakterre (a-z, A-Z és 0-9) lenne szükség, és legfeljebb 62^7 = 3 521 614 606 208 kísérletet kellene tenni, ami több billiárdot jelent.Ha a jelszót maszkkal írjuk le, akkor az „\u\l\l\l\d\d\d”, amit könnyű kiszámítani. Összesen (26^4) × (10^3) = 456 976 000 lehetséges kombináció van, ami egy milliárdos nagyságrendet jelent, és ez négy nagyságrenddel kevesebb, mint az előző módszer esetén.
Ha visszalépünk, és feltételezzük, hogy nem ismerjük a jelszó eloszlását, a maszkkal mégis könnyű szimulálni a hagyományos brute force támadást.
A probléma most az, hogy a maszk rögzített, és hány helyőrzőt tartalmaz, amit előre megadtak. Mi a teendő, ha nem ismerjük a jelszó hosszát? Ha a jelszó túl hosszú, az rendben van, de ha valakinek csak háromjegyű a jelszava, és nekünk négy helyőrzőnk van, akkor sosem fogjuk tudni feltörni, ami nagy kár lenne. Nem kellene minden lehetséges maszkot külön létrehoznunk az 1-től kezdve? Az nagyon fárasztó lenne.
Két megoldás van. Az első a maszkfájl használata. Több maszkot írhatunk egy fájlba, majd a parancssorban megadhatjuk ezt a fájlt. Figyelem, a maszkfájlnak .hcmask kiterjesztéssel kell végződnie.
Például a test.hcmask fájl tartalma lehet:
?l ?l ?l ?l ?l ?l ?l ?l ?l ?l
Akkor a fájlt a következő paranccsal használhatjuk:
hashcat -m 0 -a 3 --show md5.hash test.hcmask
Egy másik megoldás a --increment paraméter hozzáadása, ami azt mondja a hashcat-nek, hogy a maszk alapján kezdje a kísérletezést egy helyesírási hibával, majd próbálkozzon kettővel, hárommal, egészen a megadott hosszig. Például ha az alábbi maszkot írjuk:
a:0cc175b9c0f1b6a831c399e269772661 b:92eb5ffee6ae2fec3ad71c777531578f c:4a8a08f09d37b73795649038408b5f33 ab:187ef4436122d1cc2f40dc2b92f0eba0 ac:e2075474294983e013ee4dd2201c7a73 ba:07159c47ee1b19ae4fb9c40d480856c4 bc:5360af35bde9ebd8f01f492dc059593c kb: 5435c69ed3bcc5b2e4d580e393e373d3 cb: d0d7fdb6977b26929fb68c6083c0b439 abc: 900150983cd24fb0d6963f7d28e17f72 abc: 900150983cd24fb0d6963f7d28e17f72 bac: 79ec16df80b57696a03bb364410061f3 bca: b64eab8ce39e013604e243089c687e4f cba: 3944b025c9ca7eec3154b44666ae04a0 fülke: 16ecfd64586ec6c1ab212762c2c38a90
":" az eredeti karakterlánc a hash érték kiszámításához, és ":" a kiszámított hasn érték. Mentse el a fentieket az md5.hash fájlban, és futtassa a következő parancsot:
hashcat -m 0 -a 3 --show --username md5.hash abc
A --username paraméter hozzáadása azért szükséges, mert minden hash érték előtt ott van az eredeti sztring. Ha ezt a paramétert nem adja meg, a hashcat azt fogja jelezni, hogy nem talált helyes hash értéket. Ezzel a paraméterrel a hashcat azt feltételezi, hogy a hash érték előtti karakterlánc a felhasználóneve, és így sikeresen betölti a hash értéket.
A futási eredmény az, hogy csak egy hash lett megoldva:
900150983cd24fb0d6963f7d28e17f72:abc
Most adjuk hozzá a --increment paramétert, és futtatás:
hashcat -m 0 -a 3 --show --increment --username md5.hash abc
Ezúttal két további hash lett megoldva:
0cc175b9c0f1b6a831c399e269772661:a 187ef4436122d1cc2f40dc2b92f0eba0:ab
Láthatóan a –increment működik. Ugyanakkor azt is tudjuk, hogy ezzel a paraméterrel a hashcat csak sorban próbálkozik az a, ab és abc kombinációkkal, és nem próbálja meg véletlenszerűen elrendezni a helyőrzőket, és különböző kombinációkat kipróbálni.
A hibrid támadás hasonló a kombinátoros támadáshoz, ahol két szótárat kombinálnak, míg a hibrid támadás egy szótárat és egy maszkot kombinál.
Tegyük fel, hogy már van egy example.dict szótárunk, ami a következőket tartalmazza:
hello werner
akkor a parancs:
hashcat -m 0 -a 6 md5.hash example.dict ?d?d
egyenértékű a szótár egyszerű használatával:
hello00 hello01 ... hello99 werner00 werner01 ... werener99
akkor a parancs:
hashcat -m 0 -a 7 md5.hash ?d? dexample.dict
egyenértékű a szótár egyszerű használatával:
00hello 01hello ... 99hello 00werner 01werner ... 99werener