| # | Mode |
|---|---|
| 0 | rak |
| 1 | kombination |
| 3 | Brute-force |
| 6 | Hybrid Wordlist + Mask |
| 7 | Hybrid Mask + Wordlist |
Detta attackläge är också känt som" ordboksattack ". Det finns inget att säga, med tanke på en ordbok kommer hashcat att läsa innehållet i ordboken rad för rad, beräkna hash-värdet för varje rad och jämföra det med målhash-värdet.
Exempel:
hashcat -a 0 -m 400 example400.hash example.dict
Baidu berättade för mig att kombination är ett substantiv, vilket betyder: "kombination; konsortium; lösenordskombination; jumpsuit". Detta attackläge är faktiskt väldigt enkelt, det vill säga att kombinera innehållet i två lösenordsordböcker. Att använda detta attackläge kräver att du anger två lösenordsordböcker inte mer eller mindre. Antag att vi har två lösenordsordböcker dict1.txt och dict2.txt, vars innehåll är:
jakt kitty rainbow
och
paris rock
Sedan kommandot:
hashcat -m 0 -a 1 hash.txt dict1.txt dict2.txt
Ordboken som faktiskt försökte var:
huntingparis Jaktsten kittyparis kittyrock rainbowparis rainbowrock
Orden i dict1.txt är till vänster och orden i dict2.txt är till höger, totalt 3×2=6.
Parametrarna relaterade till detta mönster är:
-j, - -rule-left -k, - -rule-right
-Reglerna efter j verkar på vänster sida, och reglerna efter-k verkar på höger sida, som att lägga till parametern-j' $-', då är den faktiska försöksordboken:
hunting-paris Jakt-sten kitty-paris kitty-rock Regn-BowParis rain-bowrock
Lägg till parameter-j '^!', Då är den faktiska försöksordboken:
! JaktParis ! jaktsten ! kittyparis ! kittyrock ! Regnbåge Paris ! rainbowrock
Lägg till parametern-k '^ >', då är den faktiska ordboken som försöks:
hunting > paris jakt > sten kitty > paris kitty > rock Regn > bowparis rain > bowrock
Vad är denna regel? Användningen av "$" och "^" liknar reguljära uttryck, så är de reguljära? Faktum är att det inte är fallet. Hashcats regler implementeras av sig själva. För detaljer, se regelbaserad Attack
. en given teckenuppsättning Olika kombinationer. Enligt Hashcats officiella wiki är denna metod föråldrad och har ersatts av Mask-Attack i alla aspekter, så ingen forskning kommer att göras,
Detta är en relativt ny attackmetod, ett exempel är som följer:
hashcat -a 3 -m 0 md5.hash ? Jag? Jag? Jag? Jag? l
Även om enligt tabellen "Attack Modes" motsvarar-a 3 Brute-force, men i själva verket använder-a 3 maskattack. Mask Attack kan ses som avancerad Brute-force.
-m-parametern används för att ange hash-funktionstypen, och md5-värdet lagras i md5.hash-filen. Nyckeln är den sista strängen "? l? l? l? l? l? l" En sådan sträng kallas mask.
En mask är en sträng som består av flera platshållare. "? l" är en platshållare, där "?" är ett nyckelord, som används för att modifiera den efterföljande "l" tillsammans representerar en uppsättning tecken. Förutom "? l" kan det också finnas "? u", "? d", "? h", "? h", "? s", "? a" och "? b" representerar teckenuppsättningen som visas i tabellen nedan.
| ? | Teckenuppsättning |
|---|---|
| l | ABCDEFGHIJKLMNOPQRSTUVWXYZ |
| u | ABCDEFGHIJKLMNOPQRSTUVWXYZ |
| d | 0123456789 |
| h | 0123456789abcdef |
| h | 0123456789abcdef |
| s | ! "#$% & ' () * +, -. /:; < = >? @ [\] ^_` ~ {|} |
| a | ? Jag? Du? d? s |
| b | 0 – 0xff |
På så sätt förstår vi, "? l? l? l? l? l" är faktiskt ekvivalent med en kryptografisk ordbok:
aaaaa aaaab ... zzzzz
På samma sätt motsvarar "? l? u? d" en kryptografisk ordbok:
aA0 aA1 ... bA0 ... zZ9
Teckenuppsättningen i tabellen ovan är inbyggd i hashcat, vi kan också ange teckenuppsättningen själva:
- -custom-charset1= teckenuppsättning 1 - -custom-charset2= teckenuppsättning 2 - -custom-charset3= teckenuppsättning 3 - -custom-charset4= teckenuppsättning 4
Parameter – custom-charsetN kan förkortas till-n, till exempel – custom-charset1 kan förkortas till-1. Den uppsättning tecken som anges med-n anges i masken som en platshållare "? N", till exempel:
-1 abc123 ? 1? 1? 1
motsvarar en kryptografisk ordbok:
aaa aab ... aa3 ... 333
-N Förutom strängen som representerar teckenuppsättningen kan den också vara en fil som slutar med. hcchr, och teckenuppsättningen lagras i filen. hashcat kommer med många. hcchr-filer i charsets/ -katalogen i installationspaketet.
Den teckensamling som representeras av platshållaren "??" är själva "?". Dessutom, när de återstående tecknen används som platshållare, representerar de själva tecknen. Till exempel motsvarar "? lwerner? d" en kryptografisk ordbok:
awerner0. awerner1 ... zwerner9
Med ovanstående kunskap är det lätt att förstå mask. En mask består av flera platshållare, varje platshållare är en uppsättning tecken, och en mask är en kombination av varje uppsättning platshållare tecken. Antalet platshållare är lika med lösenordets längd. Vilka är fördelarna med en sådan design jämfört med att helt enkelt ge en uppsättning tecken och lösenordslängd?
Antag att vi vet att någons lösenord har totalt 7 siffror. Den första siffran är en stor bokstav, de kommande 3 siffrorna är små bokstäver och de sista 3 siffrorna är siffror. Om det är en traditionell brutal force-knäckning krävs teckenuppsättningarna A-Z, A-Z och 0-9, totalt 62 tecken, och du måste försöka upp till 62^7=3 521 614 606 208 gånger, vilket är en biljon nivå. Att använda mask för att beskriva detta lösenord är "\u\l\l\l\d\d\d", vilket är lätt att beräkna. Det finns totalt (26^4) × (10^3) =456 976 000 möjligheter, vilket är 100 miljoner nivåer, vilket är 4 storleksordningar mindre än den tidigare metoden.
För att ta ett steg tillbaka, även om vi inte känner till fördelningen av lösenord, är det lätt att simulera effekten av traditionell brute force cracking med hjälp av mask.
Frågan nu är att masken är fast, hur många platshållare i den är dödskrivna, och vad ska vi göra om vi inte vet längden på lösenordet? Det är okej att lösenordet är för långt Om någons lösenord bara har 3 siffror och vi har 4 platshållare, och vi inte kan lösa det, skulle det inte vara en stor förlust? Ska vi börja med 1 och skriva maskerna av varje längd igen? Det är mycket besvärligt.
Det finns två lösningar. Den ena är att använda maskfilen, skriva flera masker i en fil och sedan ange filen på kommandoraden. Observera att maskfilen måste sluta med. hcmask.
Till exempel är innehållet i test.hcmask:
? l ? Jag? l ? Jag? Jag? l ? Jag? Jag? Jag? l
använd sedan följande kommando för att använda filen:
hashcat -m 0 -a 3 - -show md5.hash test.hcmask
En annan lösning är att lägga till parametern – increment, som säger till hashcat, enligt masken vi gav, från en platshållare Börja försök och prova två, tre, tills vi ger längden. Om vi skriver platshållaren "abc" för denna, beräknar vi sedan MD5-värdet för följande sträng:
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
Före ":" är den ursprungliga strängen för att beräkna hash-värdet, och efter ":" är det beräknade hasn-värdet. Spara ovanstående innehåll i filen md5.hash och kör sedan följande kommando:
hashcat -m 0 -a 3 - -show - -username md5.hash abc
Lägg till parameter – användarnamn beror på att det finns en originalsträng före varje av våra hashvärden Om du inte lägger till den här parametern kommer hashcat att visa att det korrekta hashvärdet inte har hittats Om du lägger till den här parametern kommer hashcat att tro att strängen före hashvärdet är användarnamnet för hashvärdet, så att hashvärdet kan laddas smidigt.
Resultatet av att köra är att endast en hash löses:
900150983cd24fb0d6963f7d28e17f72:abc
Lägg nu till parametern – increment, kör igen:
hashcat -m 0 -a 3 - -visa - -increment - -användarnamn md5.hash abc
Den här gången löstes ytterligare två hash:
0cc175b9c0f1b6a831c399e269772661:a 187ef4436122d1cc2f40dc2b92f0eba0:ab
Det kan ses att – increment spelar en roll. Men samtidigt vet vi också att med den här parametern kommer hashcat bara att försöka A, ab och abc i ordning, och kommer inte att ordna och kombinera platshållarna ur ordning och prova olika möjligheter.
Hybrid Attack liknar Combinator Attack kombinerar två ordböcker, medan Hybrid Attack kombinerar en ordbok och en mask.
Antag att vi redan har en ordbok exempel.dict som lyder följande:
Hej werner
Sedan kommandot:
hashcat -m 0 -a 6 md5.hash exempel.dict ? d? d
motsvarar att bara använda en ordbok:
hello00 hello01 ... hello99 werner00 werner01 ... werener99
Sedan kommandot:
hashcat -m 0 -a 7 md5.hash ? d? dexample.dict
motsvarar att bara använda en ordbok:
00Hej 01Hej ... 99Hej 00werner 01werner ... 99werener