| # | Mode |
|---|---|
| 0 | dritto |
| 1 | combinazione |
| 3 | Brute-force |
| 6 | Hybrid Wordlist + Mask |
| 7 | Hybrid Mask + Wordlist |
Questa modalità di attacco è anche conosciuta come" attacco del dizionario ". Non c'è molto da dire, dato un dizionario, hashcat leggerà il contenuto del dizionario riga per riga, calcolerà il valore hash di ciascuna riga e lo confronterà con il valore hash di destinazione.
Esempio:
hashcat -a 0 -m 400 esempio400.hash esempio.dict
Baidu mi ha detto che combinazione è un sostantivo, che significa: "combinazione; consorzio; combinazione di password; biancheria intima". Questa modalità di attacco è in realtà molto semplice: combina il contenuto di due dizionari di password. L'utilizzo di questa modalità di attacco richiede la specificazione di due dizionari di password. Supponiamo di avere due dizionari di password dict1.txt e dict2.txt, i cui contenuti sono:
caccia gattino rainbow
e
paris rock
Quindi il comando:
hashcat -m 0 -a 1 hash.txt dict1.txt dict2.txt
Il dizionario che in realtà è stato provato è stato:
huntingparis Roccia di caccia kittyparis kittyrock Arcobaleno Parigi rainbowrock
Le parole in dict1.txt sono a sinistra e le parole in dict2.txt sono a destra, per un totale di 3×2=6.
I parametri associati a questo modello sono:
-j, - -rule-left -k, - -rule-right
-La regola dopo j agisce sul lato sinistro, la regola dopo-k agisce sul lato destro, ad esempio aggiungendo il parametro-j' $-', allora il dizionario effettivamente provato è:
hunting-paris Roccia da caccia Kitty-Parigi kitty-rock rain-bowparis rain-bowrock
Aggiungi il parametro-j'^!', Quindi il dizionario effettivamente provato è:
! cacciaParigi ! roccia di caccia ! gattino parigi ! kittyrock ! Arcobaleno Parigi ! rainbowrock
aggiunge il parametro-k'^ >', quindi il dizionario effettivamente provato è:
caccia > parigi Caccia a roccia kitty > Parigi Gattino > rock pioggia > bowparis rain > bowrock
Qual è questa regola? L'uso di "$" e "^" è simile alle espressioni regolari, quindi sono regolari? In realtà, no. Le regole di hashcat vengono implementate da sole. Questo è un altro pezzo di contenuto. Per i dettagli, vedere attacco basato su regole
Prova varie combinazioni di un determinato set di caratteri. Secondo il wiki ufficiale di hashcat, questo metodo è obsoleto ed è stato completamente sostituito da Mask-Attack, quindi non ci saranno ricerche,
Questo è un metodo di attacco relativamente nuovo, un esempio è il seguente:
hashcat -a 3 -m 0 md5.hash ? Io? Io? Io? Io? l
Anche se secondo la tabella "Modalità di attacco", -A 3 corrisponde alla forza bruta, in realtà, -A 3 utilizza l'attacco con maschera. L'attacco con maschera può essere considerato come una forza bruta avanzata. Il parametro
-m viene utilizzato per specificare il tipo di funzione hash e il valore md5 è memorizzato nel file md5.hash. La chiave è la stringa finale "? l? l? l? l? l? l". Tale stringa è chiamata maschera.
Una maschera è una stringa composta da diversi segnaposto. "? l" è un segnaposto, dove "?" è la parola chiave, utilizzata per modificare il seguente "l". "? l" insieme rappresenta un insieme di caratteri. Oltre a "? l", può anche esserci "? u", "? d", "? h", "? h", "? s", "? a" e "? b", rappresentano l'insieme di caratteri come mostrato nella tabella seguente.
| ? | set di caratteri |
|---|---|
| l | ABCDEFGHIJKLMNOPQRSTUVWXYZ |
| u | ABCDEFGHIJKLMNOPQRSTUVWXYZ |
| d | 0123456789 |
| h | 0123456789abcdef |
| h | 0123456789abcdef |
| s | ! "#$% & ' () * +, -. /:; < = >? @ [\] ^_` ~ {|} |
| a | ? Io? Tu? d? s |
| b | 0 – 0xff |
In questo modo, capiamo che "? l? l? l? l? l? l" in realtà equivale a un dizionario di password:
aaaaa aaaab ... zzzzz
Allo stesso modo, "? l? u? d" equivale a un dizionario di password:
aA0 aA1 ... bA0 ... zZ9
La collezione di caratteri nella tabella sopra è integrata in hashcat, possiamo anche specificare la collezione di caratteri noi stessi:
- -custom-charset1= set di caratteri 1 - -custom-charset2= set di caratteri 2 - -custom-charset3= set di caratteri 3 - -custom-charset4= set di caratteri 4
Parametro – custom-charsetN può essere abbreviato in-n, ad esempio – custom-charset1 può essere abbreviato in-1. L'insieme di caratteri specificato con-n è specificato come segnaposto "? N" nella maschera, ad esempio:
-1 abc123 ? 1? 1? 1
è equivalente a un dizionario di password:
aaa ... aa3 ... 333
-N Oltre alla stringa che rappresenta l'insieme di caratteri, può anche essere un file che termina con. hcchr, nel quale viene memorizzata la raccolta di caratteri. hashcat viene fornito con molti file. hcchr nella directory charsets/del pacchetto di installazione.
La raccolta di caratteri rappresentata dal segnaposto "??" è "?" stesso. Inoltre, quando i restanti caratteri vengono utilizzati come segnaposto, rappresentano i caratteri stessi. Ad esempio, "? lwerner? d" è equivalente al dizionario delle password:
awerner0 awerner1 ... zwerner9
Con le conoscenze di cui sopra, è facile comprendere la maschera. Una maschera è composta da più segnaposto, ciascun segnaposto è un insieme di caratteri e una maschera è una combinazione di ciascun insieme di caratteri segnaposto. numero di segnaposto è uguale alla lunghezza della password. Quali sono i vantaggi di questo design rispetto al semplice set di caratteri e alla lunghezza della password?
Supponiamo che conosciamo la password di qualcuno con 7 cifre, la prima cifra è una lettera maiuscola, le successive 3 cifre sono lettere minuscole e le ultime 3 cifre sono numeri. Se si tratta di un brute force crack tradizionale, sono necessari set di caratteri A-Z, A-Z e 0-9, per un totale di 62 caratteri. È necessario provare fino a 62^7=3 521 614 606 208 volte, che è un trilione di livelli. Usare una maschera per descrivere questa password è "\u\l\l\l\d\d\d", che è facile da calcolare. Ci sono un totale di (26^4) × (10^3) =456 976.000 possibilità, che è miliardi di livelli, 4 ordini di grandezza in meno rispetto al metodo precedente.
Per fare un passo indietro, anche se non conosciamo la distribuzione delle password, è facile simulare l'effetto del tradizionale brute force cracking usando la maschera.
La domanda ora è che la maschera è fissa, quanti segnaposto sono scritti morti e cosa dovremmo fare se non conosciamo la lunghezza della password? Va bene che la password sia troppo lunga. Se la password di qualcuno ha solo 3 cifre e abbiamo 4 segnaposto, non sarebbe una perdita se non riuscissimo a risolverla. Dovremmo iniziare da 1 e scrivere tutte le maschere di ciascuna lunghezza? Quanto è fastidioso.
Esistono due soluzioni: una consiste nell'utilizzare il file maschera, scrivere più maschere in un file e quindi specificare il file alla riga di comando. Si noti che il file mask deve terminare con. hcmask.
Ad esempio, il contenuto di test.hcmask è:
? l ? Io? l ? Io? Io? l ? Io? Io? Io? l
quindi usa il file con il seguente comando:
hashcat -m 0 -a 3 - -show md5.hash test.hcmask
Un'altra soluzione è aggiungere il parametro – increment, che dice a hashcat di seguire la maschera che abbiamo dato, iniziare con un segnaposto e provare di nuovo due, tre, fino alla lunghezza che abbiamo dato. Ad esempio, scriviamo il segnaposto "abc" per questo, quindi calcoliamo il valore md5 della seguente stringa:
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
Prima di ":" è la stringa originale per cui il valore hash deve essere calcolato, dopo ":" è il valore hasn calcolato. Salva il contenuto di cui sopra nel file md5.hash, quindi esegui il seguente comando:
hashcat -m 0 -a 3 - -show - -username md5.hash abc
Aggiungi il parametro-username perché ciascuno dei nostri valori hash è preceduto da una stringa originale Se questo parametro non viene aggiunto, hashcat mostrerà che il valore hash corretto non è stato trovato. Aggiungendo questo parametro, hashcat penserà che la stringa prima del valore hash sia il nome utente per il valore hash, in modo che il valore hash possa essere caricato senza intoppi.
Il risultato dell'esecuzione è che viene risolto solo un hash:
900150983cd24fb0d6963f7d28e17f72:abc
Ora aggiungi il parametro – increment ed esegui di nuovo:
hashcat -m 0 -a 3 - -show - -increment - -username md5.hash abc
Questa volta sono stati risolti altri due hash:
0cc175b9c0f1b6a831c399e269772661:a 187ef4436122d1cc2f40dc2b92f0eba0:ab
Si vede che – increment gioca un ruolo. Ma allo stesso tempo, sappiamo anche che con questo parametro, hashcat proverà solo a, ab e abc in ordine e non organizzerà e combinerà i segnaposto fuori ordine, provando varie possibilità.
L'attacco ibrido è simile all'attacco combinatore. L'attacco combinatore combina due dizionari, mentre l'attacco ibrido combina un dizionario e una maschera.
Supponiamo che abbiamo già un dizionario example.dict con il seguente contenuto:
Ciao werner
Quindi il comando:
hashcat -m 0 -a 6 md5.hash esempio.dict ? d? d
equivale a usare semplicemente un dizionario:
hello00 Ciao 01 ... Ciao 99 werner00 werner01 ... werener99
Quindi il comando:
hashcat -m 0 -a 7 md5.hash ? d? dexample.dict
Equivalente al semplice uso di un dizionario:
00hello 01Ciao ... 99Ciao 00werner 01werner ... 99werener