La funzione hash è un termine generale per un tipo di funzione. L'input di questo tipo di funzione è qualsiasi dato binario e l'output è un dati binari di lunghezza fissa, questo tipo di funzione ha le seguenti caratteristiche:
Unidirezionalità: è semplice e rapido calcolare l'output dall'input, ma è matematicamente impossibile dedurre l'input dall'output
Vincolo di collisione: è estremamente difficile trovare due input diversi con lo stesso output
Le funzioni che soddisfano queste caratteristiche possono essere chiamate funzioni hash. Un determinato dato viene utilizzato come input della funzione hash e l'output viene calcolato. Questo output è abitualmente chiamato valore hash dei dati.
Una delle funzioni principali della funzione hash è memorizzare la password in modo sicuro. Non salva direttamente la password (cioè non memorizza la password in testo chiaro), ma salva il valore hash della password. Durante la verifica, devi solo calcolare nuovamente la password inserita. Il valore hash della password può essere confrontato con il valore hash della password salvata per sapere se la password è corretta. A causa della unidirezionalità della funzione hash e dei vincoli di collisione, è difficile per un aggressore conoscere la password stessa anche se ottiene il valore hash della password.
L'attaccante ha ottenuto il valore hash della password, non c'è davvero modo di conoscere la password stessa? Naturalmente no. Sebbene sia matematicamente impossibile calcolare direttamente la password stessa in base al valore hash della password, sappiamo che la funzione hash è semplice e veloce per calcolare l'output dall'input. Nel peggiore dei casi, puoi provarlo. Le uniche password che gli esseri umani possono impostare sono quelle, provalo una per una, puoi comunque provarlo se sei fortunato. L'operazione di tentativo continuo di ottenere l'input corrispondente al valore hash è chiamata esplosione.
Sulla base di questa idea, è nato hashcat. Si dice che hashcat sia nato per dimostrare che esplodere hash è molto semplice. hashcat afferma di essere lo strumento di hash blasting più veloce al mondo e supporta anche GPU e FGPA, se ne hai.
hashcat non è solo veloce, ma supporta professionalmente più di duecento funzioni hash, usando il comando:
hashcat - -help
puoi vedere l'elenco di tutte le funzioni hash supportate da hashcat, sono troppe e non le pubblicherò qui.
hashcat è installato per impostazione predefinita in Kali e può essere utilizzato direttamente. Ma il mio Kali è installato in VirtualBox e ho sempre la sensazione che la macchina virtuale sia più lenta, quindi voglio usare hashcat in un host fisico. Per prima cosa vai sul sito ufficiale di hashchat per scaricare hashcat. Al momento, l'ultima versione è v3.5.0, rilasciata il 05.04.2017. Dalla data di aggiornamento, si può vedere che hashchat è pieno di vitalità. Elimina il problema della compilazione e scarica direttamente il pacchetto binario, che pesa solo 2,7 milioni, il che è molto piccolo rispetto ai giochi che spesso costano decine di gigabytes.
Dopo aver completato il download, decomprimi hashcat e vedi:
File come questo sono file eseguibili in linux e windows a 32 bit e 64 bit, scegli uno di loro in base alla situazione del tuo computer. Ho scelto hashcat64.bin. Per la bellezza, aggiungo una riga al file ~ /. bashrc:
alias hashcat = ' Il percorso di hashcat64.bin '
Dopo aver salvato, riapri il terminale virtuale per rendere valido il file ~ /. bashrc. In questo modo, non importa dove ti trovi, puoi semplicemente inserire il comando hashcat senza cambiare directory o inserire il brutto "64.bin", come mostrato nella figura seguente.
Ok, ora puoi iniziare a esplodere tutti i tipi di hash con hashcat.
md5 dovrebbe essere una delle funzioni hash più famose e ampiamente utilizzate. Usa innanzitutto Python per generare diversi valori md5 per l'esplosione. Il codice è il seguente:
import hashlib Password = [' 123123 ', ' bond007 ', ' xxxxxx ', ' *H@ & (NT*@BR#^ '] per password in password: md5 = hashlib.md5 () md5.update (password) print md5.hexdigest ()
Il codice sopra calcola rispettivamente i valori hash delle quattro stringhe e il risultato in output è:
4297f44b13955235245b2497399d7a93 cbdb7e2b1ed566ceb796af2df07205a3 dad3a37aa9d50688b5157698acfd7aee d77db958c179bbffae04b2b908b75c26
Salva l'output nel file md5.hash, un valore hahs per riga. Quindi usa hashcat per esplodere questi valori hash, il comando è il seguente:
hashcat -w 3 -a 0 -m 0 - -remove -o md5.out md5.hash wordlist.dic
Il parametro-w viene utilizzato per specificare le modalità di lavoro, sono quattro, come mostrato nella tabella seguente:
| N | Prestazioni | Runtime | Consumo energetico | Impatto sul Desktop |
|---|---|---|---|---|
| 1 | Basso | 2 ms | basso | minimo |
| 2 | predefinito | 12 ms | economico | notevole |
| 3 | Alto | 96 ms | Alto | Non rispondente |
| 4 | Incubo | 480 ms | Insane | Senza testa |
Il parametro-a viene utilizzato per specificare la modalità di attacco, il significato di 0 è diretto e continuo, cioè utilizzare il dizionario delle password per esplodere, ci sono cinque valori di-a, come mostrato nella tabella seguente:
| N | modalità |
|---|---|
| 0 | dritto |
| 1 | combinazione |
| 3 | Brute-force |
| 6 | Hybrid Wordlist + Mask |
| 7 | Hybrid Mask + Wordlist |
-m viene utilizzato per specificare l'hash da esplodere La funzione hash del valore, 0 significa che la funzione hash è md5, gli altri valori sono mostrati nella tabella seguente:
| N | nome | categoria |
|---|---|---|
| 0 | MD5 | Hash grezzo |
| 300 | MySQL4.1/MySQL5 | Server di Database |
| 1000 | NTLM | Sistemi operativi |
| 1800 | sha512crypt $6$, SHA512 (Unix) | Sistemi operativi |
| 2611 | vBulletin < v3.8.5 | Forum, CMS, E-Commerce, Frameworks |
Questa tabella è troppo lunga. Qui mostrerò solo alcune funzioni hash coinvolte in questo articolo. Puoi vedere tutte con il parametro – help. Il significato del parametro
– remove è che se un valore hash viene esploso con successo, il valore viene rimosso da md5.hash. Il parametro
-o è seguito da un nome file che indica dove vengono salvati i risultati dell'esplosione.
Gli ultimi due parametri md5.hash e wordlist.dic sono rispettivamente il valore hash e il dizionario delle password da esplodere. Il valore hash e il dizionario delle password sono entrambi uno per riga. Il contenuto in md5.hash è stato calcolato da Python. Se non hai a portata di mano un dizionario di password appropriato, puoi utilizzare il comando:
wget -O wordlist.dic https://samsclass.info/123/proj10/500_passwords.txt
下载一个。现在完事具备,按下回车,结果华丽地报错:(
clGetPlatformIDs(): CL_PLATFORM_NOT_FOUND_KHR
Probabilmente manca qualche ambiente operativo, quindi installa. Ho installato queste cose in totale:
sudo apt-get install gcc make p7zip-full git lsb-core wget http://registrationcenter-download.intel.com/akdlm/irc_nas/9019/opencl_runtime_16.1.1_x64_ubuntu_6.4.0.25.tgz tar -xvf opencl_runtime_16.1.1_x64_ubuntu_6.4.0.25.tgz cd opencl_runtime_16.1.1_x64_ubuntu_6.4.0.25 sudo . /install.sh
Se la velocità della rete è buona, sarà installato in breve tempo. Il primo comando segnala un errore:
/sbin/ldconfig.real: /usr/lib/nvidia-375/libEGL.so.1 è non un simbolico link /sbin/ldconfig.real: /usr/lib32/nvidia-375/libEGL.so.1 è non un simbolico link
ma non sembra influenzare nulla, quindi ignoralo. Dopo averli installati, premi nuovamente Enter ed esegui il comando che originariamente segnalava l'errore. Scopri che non c'è stato alcun altro errore e l'esecuzione è stata completata in un batter d'occhio. Dopo l'esecuzione del comando, ho controllato il contenuto dei file md5.hash e md5.out e ho scoperto che in md5.hash è rimasto solo un hash. I tre hash che sono stati esplosi con successo sono stati trasferiti nel file md5.out. md5.out Ci sono tre valori hash e i loro valori originali, come mostrato nella figura seguente:
Il valore hash della password di accesso di Windows è salvato nel file SAM, SAM è l'acronimo di "security account manager". Di solito, si trova in
C: \Windows\system32\config\SAM
I file SAM sono protetti da Windows e non possono essere letti direttamente. È necessario utilizzare uno strumento come SAMInside. Trova una macchina virtuale Windows 7, crea un nuovo utente amministratore chiamato hashcat, imposta la password, scarica e decomprima SAMInside in Windows 7, esegui con i diritti di amministratore, quindi fai clic su File- > Importa utenti locali verso Scheduler, come mostrato nella figura seguente Come mostrato:
Dopo che SAMInside potrebbe "non rispondere", ma non importa, aspetta pazientemente per qualche secondo, SAMInside ha letto l'hash che desideriamo all'altezza delle aspettative, come mostrato nella figura seguente:
Seleziona l'utente "hashcat" di cui vogliamo esplodere la password, premi Ctrl +5 per copiare NT-hash, quindi torna a Ubuntu con hashcat installato, utilizza il seguente comando per salvare il valore hash copiato nel File win7.hash:
echo 356CEAE0C89FB65ED6D6AA7A445C4CE5 {> hashcat -w 3 -a 0 -m 1000 - -remove -o win7.out win7.hash wordlist.dic
L'esecuzione è stata completata dopo un po', ho controllato il file win7.out e ho scoperto che l'esplosione è andata a buon fine. La password di accesso dell'utente hashcat è rush2112:
werner@Yasser: ~ /hashcat$ cat win7.out
356ceae0c89fb65ed6d6aa7a445c4ce5:rush2112
Per ottenere il file SAM, fare riferimento a "Come esportare Windows Hash Series 1". Di seguito è registrato il processo di lettura del file SAM nella macchina virtuale Windows 7.
Se si tratta di una macchina fisica, utilizza Win PE per avviare la macchina e leggere il file SAM sul disco. mio è una macchina virtuale e puoi leggere i file sul disco virtuale montando i file del disco virtuale sul file system. La macchina virtuale che sto usando è VirtualBox, che può essere fatta usando il comando vdfuse. Se non hai vdfuse, devi prima installare virtualbox-fuse:
sudo apt-get install virtualbox-fuse
Puoi anche scaricare il pacchetto di installazione di virtualbox-fuse per installarlo da solo.
Una volta completata l'installazione, è disponibile il comando vdfuse e è possibile avviare la mappatura e il montaggio del disco virtuale:
mkdir -p ~ /vmdisk
sudo vdfuse -t vmdk -f Win7Pro32.vmdk ~ /vmdisk/
Dopo aver eseguito questo passaggio, controlla la directory ~ /vmdisk, che contiene tre file: EntireDisk, Partition1 e Partition2, nuova directory:
mkdir -p ~ /vmdisk_en
mkdir -p ~ /vmdisk_1
mkdir -p ~ /vmdisk_2
Utilizzare il comando mount per montare rispettivamente i tre file EntireDisk, Partition1 e Partition2:
sudo mount ~ /vmdisk/EntireDisk ~ /vmdisk_en
sudo mount ~ /vmdisk/Partition1 ~ /vmdisk_1
sudo mount ~ /vmdisk/Partition2 ~ /vmdisk_2
ha scoperto che il montaggio di intero disco non è riuscito, il contenuto in Partition1 non è quello che volevo, il contenuto in Partition2 è il file nella macchina virtuale di Windows 7, esattamente quello che volevo. Copia il nostro file SAM di destinazione da vmdisk_fs:
cp ~ /vmdisk_2/Windows/System32/config/SAM . /
A proposito, copia anche il file SYSTEM:
cp ~ /vmdisk_2/Windows/System32/config/SYSTEM . /
Controlla il contenuto del file SAM, come mostrato nella figura seguente, non è un file di testo semplice, è davvero lo stile di Windows,
Beh, anche se il file SAM è stato aperto con successo, non abbiamo ancora ottenuto l'hash. Cosa devo fare se lo modifico successivamente? Il contenuto del file SAM può essere analizzato solo con l'aiuto di strumenti. Inserisci sia il file sam che il file di sistema in Kali ed esegui il comando:
samdump2 -o sam.hash SYSTEM sam
Quindi visualizza sam.hash e puoi anche vedere il valore hash della password di accesso di ciascun utente. Ogni riga nel file sam.hash è un utente e il formato di ciascuna riga è:
Nome utente: RID:LM-hash value: NTLM-hash value
Nota Questo formato è il formato di output del comando samdump2, non il "formato di password hash in Windows".
3. Exploding hash della password di accesso linux
Innanzitutto, devi avere un computer che esegua il sistema linux. Questo è facile da dire, basta una macchina virtuale. Quindi, eseguire il seguente comando per aggiungere un nuovo utente e impostare una password per i nostri scopi di esplosione:
sudo adduser justforfun
Il valore hash della password di accesso dell'utente in linux è memorizzato nel file/etc/shadow (nota: non/etc/passwd), utilizzare il seguente comando per visualizzare il valore hash della password di accesso del nuovo utente:
test@test-VirtualBox: ~ $ sudo tail -n 1 /etc/shadow
justforfun:$6$0fokwg59$6hpMS5dM9wDT/42DDoSD0i0g/wHab50Xs9iEvVLC3V20yf1kRmXZHGXCM0Efv6XU69hdgMZ4FwaMzso4hQaGQ0:17373:0:99999:7:::
Il comando tail viene utilizzato per leggere le ultime righe di un file, l'impostazione predefinita è di 10 righe, specificando il numero di righe con il parametro-n. L'utente che abbiamo appena creato è naturalmente all'ultima riga, quindi usa tail-n 1 per leggerlo. risultato della lettura sono i dati divisi con ":". La prima parte è il nome utente "justforfun", la seconda parte è il valore hash della password e le altre parti non devono essere preoccupate in questo articolo. Ci concentreremo sulla seconda parte.
"$6$" che inizia con significa che il tipo di funzione hash utilizzata è SHA-512. Oltre a "$6$", in linux, "$1$" si riferisce a MD5, "$2a$" si riferisce a Blowfish, "$2y$" si riferisce a Blowfish (gestione corretta dei caratteri a 8 bit), "$5$" Si riferisce a SHA-256, vedi Wikipedia per i dettagli: passwd. Inoltre, il file/etc/login.defs descrive anche l'algoritmo hash.
La parte "0fokwg59" che inizia con "$6$" e prima del "$" successivo è sale. Cos'è il sale? Baidu sa che la risposta di CNB2009 alla domanda " Qual è il valore del sale md5 " è semplice e facile da capire:
In poche parole, è un metodo per rendere la stessa password ha valori hash diversi, cioè la salinizzazione. MD5 stesso è irreversibile, ma attualmente ci sono molti database su Internet che supportano l'anti-query. Se il database delle password utente viene accidentalmente trapelato, gli hacker possono ottenere la password utente attraverso l'anti-query o utilizzare il codice hash che appare più frequentemente nel database (cioè utilizzato da molte persone) per il brute force cracking (perché di solito è una password debole). Il valore sale è un valore casuale aggiuntivo aggiunto durante il processo di hash della password. Ad esempio, il mio id è epilepsia e la mia password è 123456. Quando è memorizzato nel database, posso hash la stringa "123456/epilepsia". Quando si verifica la password, viene utilizzata anche la stringa "(password da verificare) /epilepsia" per la verifica. In questo modo, quando la password di un altro idiota è 123456, è ancora possibile costruire diversi valori hash e verificarli con successo. In questo momento, il mio id viene utilizzato come valore sale per eseguire un hash complesso per la password. Allora.. Il ruolo del valore del sale è quello di ridurre le perdite causate da perdite di database. Se il tuo RP è molto buono e la mia password è 123456, non posso fermarti
Questa risposta è per md5 e lo stesso vale per altre funzioni hash. La parte dopo il sale è il valore hash. Ora copiare l'intera seconda parte nel file linux.hash, il contenuto in linux.hash dovrebbe essere:
$6$0fokwg59$6hpMS5dM9wDT/42DDoSD0i0g/wHab50Xs9iEvVLC3V20yf1kRmXZHGXCM0Efv6XU69hdgMZ4FwaMzso4hQaGQ0
Quindi esplodere l'hash della password di accesso linux con il seguente comando:
hashcat -w 3 -a 0 -m 1800 - -remove -o linux.out linux.hash wordlist.dic
Dopo un attimo, l'esplosione è terminata, visualizza il risultato:
werner@Yasser: ~ /hashcat$ cat linux.out
$6$0fokwg59$6hpMS5dM9wDT/42DDoSD0i0g/wHab50Xs9iEvVLC3V20yf1kRmXZHGXCM0Efv6XU69hdgMZ4FwaMzso4hQaGQ0:4321
Si può vedere che l'esplosione è stata riuscita.
4. hash della password di accesso Mysql
Innanzitutto, devi avere Mysql. È successo che ce l'abbia nella mia macchina virtuale. Baidu può sapere che il valore hash della password di accesso Mysql è salvato nel file user.MYD. Dov'è il file user.MYD? Non lo so neanche io, lo cerco solo:
test@test-VirtualBox: ~ $ sudo find / -name user.MYD
/var/lib/mysql/mysql/user.MYD
L'ho trovato. È su/var/lib/mysql/mysql/user.MYD. Visualizza il contenuto del file:
sudo cat /var/lib/mysql/mysql/user.MYD
Non è un file di testo semplice, quindi ha poco a che fare. Puoi ancora vedere che il valore hash della password di accesso dell'utente root è:
6B825255FB466413D6B1B724644E23428C94BBCB
Salva questo valore nel file mysql.hash e usa il seguente comando per esplodere l'hash della password di accesso mysql:
hashcat -w { Dopo un attimo, l'esplosione è completata, visualizza il risultato:
werner@Yasser: ~ /hashcat$ cat mysql.out
6b825255fb466413d6b1b724644e23428c94bbcb:viper
Si vede che l'esplosione è andata a buon fine.
5. Discuz di esplosione! Password del forum
Discuz! È un noto programma di forum php in Cina ed è ampiamente utilizzato. Ora facciamo esplodere Discuz! Valore hash della password dell'utente. Innanzitutto devi trovare il valore hash, dove trovarlo? Da Discuz, ovviamente! nel database.
Puoi discutirlo! Dov'è il database? Ecco come l'ho risolto, scarica l'ultima versione di Discuz dal suo sito ufficiale! Codice sorgente, esegui l'installazione e ottieni Discuz! Database
Discuz! Il nome del database predefinito è ultrax. La tabella pre_ucenter_members memorizza il valore hash della password di accesso. "pre_" è il prefisso predefinito e può essere modificato durante l'installazione. "ucenter_members" non cambierà. Utilizzare la seguente istruzione sql per interrogare il valore hash della password di accesso:
select password,salt from pre_ucenter_members;
Salva i valori hash e sale nel file:
echo 69bcba126b93c6f397983629a0f70553:c13fd9 > discuz.hash
Il valore hash e il valore sale sono nella stessa riga, divisi con ":". Infine, esplodere l'hash della password di accesso di Discuz con il seguente comando:
hashcat -w 3 -a 0 -m 2611 - -remove -o discuz.out discuz.hash wordlist.dic
Dopo un attimo, l'esplosione è terminata, visualizza i risultati:
werner@Yasser: ~ /hashcat$ cat discuz.out
69bcba126b93c6f397983629a0f70553:c13fd9:winter
Si vede che l'esplosione è andata a buon fine.
6. Test del grande dizionario
Finora, utilizziamo un piccolo dizionario con solo 500 parole. Ci vuole solo un momento ogni volta per esplodere con successo vari hash. Non trovi strano? Questo perché ho deliberatamente impostato una password debole nel dizionario per esercitarmi nell'uso di hashcat, altrimenti non sarebbe un cattivo umore se non fosse riuscita a esploderla. In realtà non è possibile avere una fortuna così buona. Calcoliamo casualmente il valore md5 di una password non così debole, esplosiamo con un grande dizionario, da un lato tentiamo la fortuna e dall'altro vediamo quanto può essere veloce hashcat.
Per prima cosa calcola il valore md5:
import hashlib
md5 = hashlib.md5 ()
md5.update (" werner123456!!! ")
print md5.hexdigest () L'output è:
b17133f9abff287ed0546c1af2b171f7
Quindi seleziona un dizionario di dimensioni 10,5G con 940 milioni di password e inizia a esplodere:
hashcat -w 3 -a 0 -m 0 - -remove -o big.out b17133f9abff287ed0546c1af2b171f7 big.dic
Nota che quando c'è solo un valore hash, non è necessario salvarlo in un file, ma può anche essere scritto direttamente nei parametri della riga di comando. Ho iniziato a esplodere prima di andare a letto, mi sono alzato il giorno successivo per guardare i risultati e ho scoperto:
Iniziato: Mer Jul 26 22:55:27 2017
Stopped: mer lug 26 23:02:28 2017
Si scopre che ci sono voluti solo 7 minuti! Pensavo che ci sarebbero volute 7 ore, 60 volte più veloce di quanto mi aspettassi! Sfortunatamente, il valore hash non è stato esploso con successo. Sembra che "werner123456!!!" non sia nel dizionario delle password. Sembra che devo preparare un dizionario di password da 100G, ma è molto scomodo salvare e trasferire un dizionario così grande. Non c'è altro modo? Certo che c'è, ricordi la modalità attacco? Abbiamo utilizzato la modalità "dritta". Successivamente, esaminiamo diverse altre modalità.
7. Riepilogo
Quando si utilizza hashcat per esplodere l'hash, la prima cosa è trovare l'hash corretto. Sistemi diversi e software diversi hanno posizioni diverse di archiviazione dell'hash, quindi è necessario trovare accuratamente il valore dell'hash; Il secondo è determinare correttamente il tipo di hash, determinare se hashcat supporta questo tipo di hash e selezionare il parametro-m corretto, altrimenti è quasi impossibile avere successo; Il terzo è che il dizionario delle password dovrebbe essere migliore. Se l'esplosione può riuscire alla fine dipende dal dizionario. Sebbene il dizionario delle password non sia più grande, meglio è, ma è comunque meglio essere più grande. Anche hashcat è famoso per la sua velocità. I grandi dizionari non sono un problema per hashcat. Ecco un dizionario migliore: Porte di perdita precedenti + raccolta di dizionari di password deboli comunemente usate. 7Z , la password di decompressione è: anywlan. Inoltre, se raccogli molti piccoli dizionari, puoi unire, ordinare e deduplicare i piccoli dizionari per ottenere un grande dizionario per l'esplosione di hashcat. Se i piccoli dizionari si trovano nella stessa directory, puoi usare un comando:
cat * | sort | uniq > Merge.dic
E se i piccoli dizionari fossero organizzati per categorie e distribuiti in directory multistrato? Ovviamente non è possibile utilizzare solo il comando cat, ma in realtà è sufficiente solo un comando. Supponendo che i piccoli dizionari siano archiviati nella directory MyDictionary, il comando può essere scritto come segue:
find . /MyDictionary -type f -exec cat {} \; | sort | uniq > Merge.dic