| # | Mode |
|---|---|
| 0 | recht |
| 1 | combinatie |
| 3 | Brute-force |
| 6 | hybride woordlijst + masker |
| 7 | hybride masker + woordlijst |
Deze aanvalsmodus staat ook bekend als" woordenboekaanval ". Er is niets te zeggen, dat wil zeggen dat hashcat, gegeven een woordenboek, de inhoud in het woordenboek regel voor regel leest, de hash-waarde van elke regel berekent en deze vergelijkt met de doelhash-waarde.
Voorbeeld:
hashcat -a 0 -m 400 example400.hash example.dict
Baidu vertelde me dat combinatie een zelfstandig naamwoord is, wat betekent: "combinatie; consortium; wachtwoordcombinatie; jumpsuit en ondergoed". Deze aanvalsmodus is eigenlijk heel eenvoudig: het combineert de inhoud van twee wachtwoordwoordenboeken. Het gebruik van deze aanvalsmodus vereist het opgeven van twee wachtwoordwoordenboeken. Stel dat we twee wachtwoordwoordenboeken hebben dict1.txt en dict2.txt, waarvan de inhoud is:
jacht Kat rainbow
en
paris rock
Dan de opdracht:
hashcat -m 0 -a 1 hash.txt dict1.txt dict2.txt
Het woordenboek dat eigenlijk is geprobeerd is:
huntingparis Jachtrots KittyParijs kittyrock RegenboogParijs rainbowrock
De woorden in dict1.txt staan links en de woorden in dict2.txt staan rechts, in totaal 3×2=6.
De parameters die verband houden met dit patroon zijn:
-j, - -rule-left -k, - -rule-right
-De regel na j werkt aan de linkerkant, en de regel na-k werkt aan de rechterkant, zoals het toevoegen van de parameter-j' $-', dan is het daadwerkelijk geprobeerde woordenboek:
hunting-paris Jachtrots Kitty-Parijs kitty-rock Regen-boogparijs rain-bowrock
Voeg parameter toe-j '^!', Dan is het daadwerkelijk geprobeerde woordenboek:
! JachtParijs ! Jachtrots ! KittyParijs ! kittyrock ! RegenboogParijs ! rainbowrock
Voeg de parameter-k '^ >' toe, dan is het daadwerkelijk geprobeerde woordenboek:
jagen > parijs jacht > rots kitty > Parijs kitty > rock Regen > Bogparijs REGEN > bowrock
Wat is deze regel? Het gebruik van "$" en "^" is vergelijkbaar met dat van reguliere expressies, dus zijn ze regulier? Eigenlijk is dat niet het geval. De regels van hashcat worden zelf geïmplementeerd, wat weer een groot deel van de inhoud is. Voor meer informatie, zie Rule-based Attack
Probeer een gegeven tekenset Verschillende combinaties. Volgens de officiële wiki van hashcat is deze methode verouderd en volledig vervangen door Mask-Attack, dus er wordt geen onderzoek gedaan,
Dit is een relatief nieuwe aanvalsmethode. Voorbeeld is als volgt:
hashcat -a 3 -m 0 md5.hash ? Ik? Ik? Ik? Ik? l
Hoewel-A 3 volgens de tabel "Aanvalsmodi" overeenkomt met Brute-force, gebruikt-A 3 in feite Mask Attack. Mask Attack kan worden gezien als geavanceerde Brute-force. De parameter
-m wordt gebruikt om het hash-functietype op te geven en de MD5-waarde wordt opgeslagen in het md5.hash-bestand. De sleutel is de laatste tekenreeks "? l? l? l? l? l? l". Een dergelijke tekenreeks wordt masker genoemd.
Een masker is een tekenreeks die bestaat uit verschillende tijdelijke aanduidingen. "? l" is een tijdelijke aanduiding, waarbij "?" een trefwoord is, dat wordt gebruikt om het volgende "l" te wijzigen. "? l" vertegenwoordigt samen een verzameling tekens. Naast "? l" kunnen er ook "? u", "? d", "? h", "? h", "? s", "? a" en "? b" worden weergegeven door de verzameling tekens zoals weergegeven in de onderstaande tabel.
| ? | Charset |
|---|---|
| l | ABCDEFGHIJKLMNOPQRSTUVWXYZ |
| u | ABCDEFGHIJKLMNOPQRSTUVWXYZ |
| d | 0123456789 |
| h | 0123456789abcdef |
| h | 0123456789abcdef |
| s | ! "#$% & ' () * +, -. /:; < = >? @ [\] ^_` ~ {|} |
| a | ? Ik? u? d? s |
| b | 0 – 0xff |
Op deze manier begrijpen we: "? l? l? l? l? l" is eigenlijk gelijk aan een wachtwoordboek:
aaaaa aaaab ... zzzzz
Op dezelfde manier is "? l? u? d" gelijk aan een wachtwoordboek:
aA0 aA1 ... bA0 ... zZ9
De tekenset in de bovenstaande tabel is ingebouwd in hashcat, we kunnen de tekenset ook zelf opgeven:
- -custom-charset1= tekenset 1 - -custom-charset2= tekenverzameling 2 - -custom-charset3= tekenverzameling 3 - -custom-charset4= tekenset 4
Parameter – custom-charsetN kan worden afgekort tot-n, zoals – custom-charset1 kan worden afgekort tot-1. De set tekens opgegeven met-n wordt opgegeven in de vorm van een tijdelijke aanduiding "? N" in het masker, zoals:
-1 abc123 ? 1? 1? 1
is gelijk aan een wachtwoordboek:
aaa aab ... aa3 ... 333
-N Naast de tekenreeks die de tekenverzameling vertegenwoordigt, kan het ook een bestand zijn dat eindigt op. hcchr, waarin de tekenverzameling wordt opgeslagen. hashcat wordt geleverd met veel. hcchr-bestanden in de charsets/map van het installatiepakket.
De verzameling tekens die door de tijdelijke aanduiding "??" wordt vertegenwoordigd, is "?" zelf. Wanneer de resterende tekens als tijdelijke tekens worden gebruikt, vertegenwoordigen ze bovendien de tekens zelf. "? lwerner? d" is bijvoorbeeld equivalent aan een wachtwoordboek:
awerner0 awerner1 ... zwerner9
Met de bovenstaande kennis is het gemakkelijk om Masker te begrijpen. Een masker bestaat uit meerdere tijdelijke tekens, elke tijdelijke teken is een set tekens, en een masker is een combinatie van verschillende sets tijdelijke tekens. Het aantal tijdelijke aanduidingen is gelijk aan de lengte van het wachtwoord. Wat zijn de voordelen van een dergelijk ontwerp in vergelijking met het simpelweg geven van een tekenset en wachtwoordlengte?
Stel dat we iemands wachtwoord kennen met in totaal 7 cijfers. Het eerste cijfer is een hoofdletter, de volgende 3 cijfers zijn kleine letters en de laatste 3 cijfers zijn cijfers. Als het een traditionele brute force-crack is, zijn de tekensets A-Z, A-Z en 0-9 vereist, met in totaal 62 tekens, en moet het maximaal 62^7=3 521 614 606 208 keer worden geprobeerd, wat een biljoen is. niveau. Het gebruik van een masker om dit wachtwoord te beschrijven is "\u\l\l\l\d\d\d", wat gemakkelijk te berekenen is. Er zijn in totaal (26^4) × (10^3) =456 976.000 mogelijkheden, wat 100 miljoen is. Het niveau is 4 ordes van grootte kleiner dan de vorige methode.
Om een stap terug te zetten: zelfs als we de verdeling van wachtwoorden niet kennen, is het gemakkelijk om het effect van traditioneel brute force-kraken te simuleren met behulp van een masker.
De vraag is nu dat het masker vast is en hoeveel tijdelijke aanduidingen er doodgeschreven zijn. Wat moeten we doen als we de lengte van het wachtwoord niet kennen? Het is prima dat het wachtwoord te lang is. Als het wachtwoord van iemand slechts 3 cijfers heeft en wij 4 tijdelijke aanduidingen hebben, en het niet kan worden opgelost, zou het dan geen groot verlies zijn? Moeten we beginnen met 1 en alle maskers van elke lengte schrijven? Dat is lastig.
Er zijn twee oplossingen. De ene is het maskerbestand gebruiken, meerdere maskers in één bestand schrijven en dit bestand vervolgens op de opdrachtregel specificeren. Merk op dat het maskerbestand moet eindigen op. hcmask.
De inhoud van test.hcmask is bijvoorbeeld:
? l ? Ik? l ? Ik? Ik? l ? Ik? Ik? Ik? l
Gebruik vervolgens de volgende opdracht om het bestand te gebruiken:
hashcat -m 0 -a 3 - -show md5.hash test.hcmask
Een andere oplossing is om de parameter-increment toe te voegen, die hashcat vertelt dat het masker dat we hebben gegeven, begint met een tijdelijke aanduiding en probeert nog twee, drie tot de lengte die we hebben gegeven. Zoals we deze tijdelijke aanduiding "abc" schrijven en vervolgens de MD5-waarde van de volgende tekenreeks berekenen:
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
Vóór ":" is de oorspronkelijke tekenreeks waarvoor de hash-waarde moet worden berekend, en na ":" is de berekende hasn-waarde. Sla de bovenstaande inhoud op in het bestand md5.hash en voer vervolgens de volgende opdracht uit:
hashcat -m 0 -a 3 - -show - -username md5.hash abc
Voeg parameter toe – gebruikersnaam is omdat er een originele tekenreeks vóór elke van onze hash-waarden is Als deze parameter niet wordt toegevoegd, geeft hashcat weer dat de juiste hash-waarde niet is gevonden. Als deze parameter wordt toegevoegd, denkt hashcat dat de tekenreeks vóór de hash-waarde de gebruikersnaam is voor de hash-waarde, zodat de hash-waarde soepel kan worden geladen.
Het resultaat van het uitvoeren is dat slechts één hash is opgelost:
900150983cd24fb0d6963f7d28e17f72:abc
Voeg nu de parameter-increment toe en voer opnieuw uit:
hashcat -m 0 -a 3 - -show - -increment - -gebruikersnaam md5.hash abc
Deze keer werden nog twee hashs opgelost:
0cc175b9c0f1b6a831c399e269772661:a 187ef4436122d1cc2f40dc2b92f0eba0:ab
Het is duidelijk dat – increment een rol speelt. Maar tegelijkertijd weten we ook dat hashcat met deze parameter alleen A, ab en abc in volgorde zal proberen, en de plaatselijke aanduidingen niet buiten volgorde zal rangschikken en combineren en verschillende mogelijkheden zal proberen.
Hybride aanval is vergelijkbaar met Combinator Attack. Combinator Attack combineert twee woordenboeken, terwijl Hybride Attack een woordenboek en een masker combineert.
Stel dat we al een woordenboek hebben, example.dict, dat luidt als volgt:
Hallo werner
Dan de opdracht:
hashcat -m 0 -a 6 md5.hash voorbeeld.dict ? d? d
is gelijk aan het simpelweg gebruiken van een woordenboek:
hello00 Hallo01 ... Hallo99 werner00 werner01 ... werener99
Dan de opdracht:
hashcat -m 0 -a 7 md5.hash ? d? dexample.dict
is gelijk aan het simpelweg gebruiken van een woordenboek:
00Hallo 01Hallo ... 99Hallo 00werner 01werner ... 99werener