Funcția hash este un termen general pentru un tip de funcție. Intrarea acestui tip de funcție este orice date binare, iar ieșirea este o lungime fixă. Date binare, acest tip de funcție are următoarele caracteristici:
Unidirecționalitate: este simplu și rapid să se calculeze ieșirea din intrare, dar este imposibil din punct de vedere matematic să se deducă intrarea din ieșire
Constrângere de coliziune: Este extrem de dificil să găsești două intrări diferite cu aceeași ieșire
Funcțiile care satisfac aceste caracteristici pot fi numite funcții hash. Folosind anumite date ca intrare a funcției hash, se calculează ieșirea. Este obișnuit să se numească această ieșire valoarea hash a datelor.
O funcție majoră a funcției hash este de a stoca parola în siguranță. Nu salvează parola direct (adică nu stochează parola în text simplu), ci salvează valoarea hash a parolei. trebuie doar să calculați din nou parola introdusă. Comparați valoarea hash cu valoarea hash a parolei salvate pentru a afla dacă parola este corectă. Datorită caracteristicilor unidirecționale ale funcției hash și a constrângerilor de coliziune, este dificil pentru un atacator să cunoască parola în sine chiar dacă obține valoarea hash a parolei.
Atacatorul a obținut valoarea hash a parolei. Chiar nu există nicio modalitate de a cunoaște parola în sine? Desigur că nu, deși calcularea directă a parolei din valoarea hash a parolei în sine este imposibilă din punct de vedere matematic, știm că funcția hash este simplă și rapidă pentru a calcula ieșirea din intrare parolele pe care oamenii le pot seta sunt doar acele, încercați-le unul câte unul, dacă aveți noroc, încă le puteți încerca. Operația de a încerca continuu să obțină intrarea corespunzătoare valorii hash se numește explozie.
Pe baza acestei idei, a apărut hashcat. Se spune că hashcat s-a născut pentru a dovedi că explozia hash-ului este foarte simplă. hashcat pretinde că este cel mai rapid instrument de explozie a hash din lume și chiar acceptă GPU și FGPA, dacă aveți.
hashcat nu este doar rapid, dar acceptă și mai mult de două sute de funcții hash în mod profesional, folosind comanda:
hashcat - -help
Puteți vedea lista tuturor funcțiilor hash acceptate de hashcat, sunt prea multe și nu le voi posta aici.
hashcat este instalat implicit în Kali și poate fi utilizat direct.Dar kali-ul meu este instalat în VirtualBox și întotdeauna simt că mașina virtuală este mai lentă, așa că vreau să folosesc hashcat într-o gazdă fizică. Mai întâi accesați site-ul oficial al hashchat pentru a descărca hashcat. În prezent, cea mai recentă versiune este v3.5.0, care a fost lansată pe 2017.04.05. Din data actualizării, se poate observa că hashchat este plin de vitalitate. Evitați problemele de compilare și descărcați direct pachetul binar, care este de doar 2,7 milioane, ceea ce este foarte mic în comparație cu jocurile care costă adesea zeci de gigabajte.
După ce descărcarea este finalizată, decomprimați hashcat și vedeți:
Fișiere precum acestea sunt fișiere executabile în linux și windows pe 32 și 64 de biți, selectați unul dintre ele în funcție de situația computerului dvs. Am ales hashcat64.bin De dragul frumuseții, adaug o linie în fișierul ~ /. bashrc:
alias hashcat = ' calea către hashcat64.bin '
După salvare, redeschideți terminalul virtual pentru a face fișierul ~ /. bashrc valabil. În acest fel, indiferent unde vă aflați, puteți introduce direct comanda hashcat, fără a schimba directoarele sau introduceți urâtul „64.bin ", așa cum se arată în figura de mai jos.
Bine, acum puteți începe să utilizați hashcat pentru a exploda diverse hash-uri.
md5 ar trebui să fie una dintre cele mai faimoase și utilizate funcții hash. Mai întâi utilizați Python pentru a genera mai multe valori md5 pentru explozie. Codul este următorul:
import hashlib. Parole = [' 123123 ', ' bond007 ', ' xxxxxx ', ' *H@ & (NT*@BR#^ '] pentru parola în parole: md5 = hashlib.md5 () md5.update (parolă) print md5.hexdigest ()
Codul de mai sus calculează valorile hash ale celor patru șiruri, iar rezultatul de ieșire este:
4297f44b13955235245b2497399d7a93 cbdb7e2b1ed566ceb796af2df07205a3 dad3a37aa9d50688b5157698acfd7aee d77db958c179bbffae04b2b908b75c26
Salvează rezultatul ieșirii în fișierul md5.hash, o valoare hahs pe rând. Apoi utilizați hashcat pentru a exploda aceste valori hash. Comanda este următoarea:
hashcat -w 3 -a 0 -m 0 - -remove -o md5.out md5.hash wordlist.dic
Parametrul-w este folosit pentru a specifica modul de lucru. Există patru tipuri, așa cum se arată în tabelul următor:
| N | Performanță | Runtime | Consum de energie | Desktop Impact |
|---|---|---|---|---|
| 1 | scăzut | 2 ms | scăzut | minim |
| 2 | Default | 12 ms | Economic | vizibil |
| 3 | High | 96 ms | High | Unresponsive |
| 4 | Nightmare | 480 ms | Insane | Headless |
Parametrul-a este folosit pentru a specifica modul de atac. Semnificația lui 0 este directă și continuă, adică este explodată cu un dicționar de parole. Există cinci valori ale-a, așa cum se arată în tabelul de mai jos:
| N | mod |
|---|---|
| 0 | drept |
| 1 | combinație |
| 3 | forță brută |
| 6 | Lista de cuvinte hibridă + mască |
| 7 | Hybrid Mask + Wordlist |
-m Funcția hash folosită pentru a specifica valoarea hash care urmează să fie explodată, 0 înseamnă că funcția hash este md5, iar alte valori sunt după cum se arată în tabelul de mai jos:
| N | Name | Category |
|---|---|---|
| 0 | MD5 | Raw Hash |
| 300 | MySQL4.1/MySQL5 | Server de baze de date |
| 1000 | NTLM | Sisteme de operare |
| 1800 | sha512crypt $6$, SHA512 (Unix) | Sisteme de operare |
| 2611 | vBulletin < v3.8.5 | Forumuri, CMS, comerț electronic, cadre |
Acest tabel este prea lung. Aici voi arăta doar câteva funcții hash implicate în acest articol. Puteți vedea toate folosind parametrul – help.
Parametrul – remove înseamnă că, dacă o anumită valoare hash este explodată cu succes, valoarea va fi eliminată din md5.hash.
Parametrul-o este urmat de un nume de fișier care indică locul unde sunt salvate rezultatele sablării.
Ultimii doi parametri md5.hash și wordlist.dic sunt valoarea hash și, respectiv, dicționarul de parole care urmează să fie explodate. Valoarea hash și dicționarul de parole sunt ambele unul pe rând. Conținutul din md5.hash a fost calculat de Python Dacă nu aveți la îndemână un dicționar de parole adecvat, puteți utiliza comanda:
wget -O wordlist.dic https://samsclass.info/123/proj10/500_passwords.txt
下载一个。现在完事具备,按下回车,结果华丽地报错:(
clGetPlatformIDs (): CL_PLATFORM_NOT_FOUND_KHR
Probabil că lipsește un mediu de operare, așa că instalați-l. Am instalat aceste lucruri în total:
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
Dacă viteza rețelei este bună, va fi instalată în scurt timp. Prima comandă raportează o eroare:
/sbin/ldconfig.real: /usr/lib/nvidia-375/libEGL.so.1 este nu un simbolic link /sbin/ldconfig.real: /usr/lib32/nvidia-375/libEGL.so.1 este nu a simbolic link
Dar nu pare să afecteze nimic, ignoră-l. După ce le-ați instalat, apăsați din nou Enter și rulați comanda inițială de eroare. Am constatat că nu a mai fost raportată nicio eroare, iar execuția a fost finalizată într-o clipă. După execuția comenzii, am verificat conținutul fișierelor md5.hash și md5.out și am constatat că a mai rămas un singur hash în md5.hash. Cele trei hash-uri care au fost explodate cu succes au fost transferate în fișierul md5.out sunt trei valori hash și valorile lor originale, așa cum se arată în figura de mai jos:
Valoarea hash a parolei de conectare Windows este salvată în fișierul SAM, care este acronimul „security account manager ". De obicei, se află în
C: \Windows\system32\config\SAM
Fișierul SAM este protejat de Windows și nu poate fi citit direct cu ajutorul unui instrument, cum ar fi SAMInside. Găsiți o mașină virtuală Windows 7, creați un nou utilizator administrator numit hashcat, setați o parolă, descărcați și decomprimați SAMInside în Windows 7 și rulați-l cu permisiuni de administrator, apoi faceți clic pe File- > Import Local Users vis Scheduler, așa cum se arată mai jos Așa cum se arată în imagine:
După aceea, SAMInside poate „să nu răspundă ", dar nu contează, așteptați cu răbdare câteva secunde, SAMInside va citi ceea ce ne dorim la înălțimea așteptărilor hash, așa cum se arată în imaginea de mai jos:
Selectați utilizatorul „hashcat" al cărui parolă vrem să explodăm, apăsați Ctrl +5 pentru a copia NT-hash, apoi reveniți la Ubuntu cu hashcat instalat și utilizați următoarea comandă pentru a salva valoarea hash copiată în fișierul win7.hash:
echo 356CEAE0C89FB65ED6D6AA7A445C4CE5 356ceae0c89fb65ed6d6aa7a445c4ce5:rush2112
Cum să obțineți fișierul SAM, vă rugăm să consultați „Cum să exportați Windows Hash Series 1 ". Următorul este procesul de citire a fișierului SAM în mașina virtuală Windows 7.
Dacă este o mașină fizică, porniți mașina cu Win PE și citiți fișierul SAM de PE disc. A mea este o mașină virtuală. Puteți citi fișierele de pe discul virtual prin montarea fișierelor de disc virtuale pe sistemul de fișiere. Mașina virtuală pe care o folosesc este VirtualBox, care poate fi făcută folosind comanda vdfuse. Dacă nu aveți vdfuse, trebuie să instalați mai întâi virtualbox-fuse:
sudo apt-get install virtualbox-fuse
De asemenea, puteți descărca pachetul de instalare virtualbox-fuse și îl puteți instala singur.
După finalizarea instalării, va exista comanda vdfuse, care poate începe maparea și montarea discului virtual:
mkdir -p ~ /vmdisk sudo vdfuse -t vmdk -f Win7Pro32.vmdk ~ /vmdisk/
După efectuarea acestui pas, verificați ~ /directorul vmdisk, care conține trei fișiere: EntireDisk, Partition1 și Partition2, director nou:
mkdir -p ~ /vmdisk_en mkdir -p ~ /vmdisk_1 mkdir -p ~ /vmdisk_2
Utilizați comanda mount pentru a monta cele trei fișiere entire disk, Partition1 și, respectiv, Partition2:
sudo mount ~ /vmdisk/entire disk ~ /vmdisk_en sudo montare ~ /vmdisk/Partition1 ~ /vmdisk_1 sudo mount ~ /vmdisk/Partition2 ~ /vmdisk_2
a constatat că montarea întregului disk a eșuat, conținutul din Partition1 nu este ceea ce vreau, Partition2 este fișierul din mașina virtuală Windows 7, exact ceea ce vreau. Copiați fișierul nostru țintă SAM din vmdisk_fs:
cp ~ /vmdisk_2/Windows/System32/config/SAM . /
Apropo, copiați și fișierul de sistem:
cp ~ /vmdisk_2/Windows/System32/config/SYSTEM . /
Vizualizați conținutul fișierului SAM, așa cum se arată în imaginea de mai jos, nu este simplu Fișierul text este într-adevăr în stilul Windows,
Ei bine, deși am deschis cu succes fișierul SAM, încă nu am obținut hash. Ce ar trebui să facem dacă îl schimbăm în continuare? Puteți folosi doar instrumente pentru a analiza conținutul fișierului SAM. Adăugați atât fișierul sam, cât și fișierul de sistem în Kali și rulați comanda:
samdump2 -o sam.hash SYSTEM sam
Apoi verificați sam.hash și puteți vedea, de asemenea, valoarea hash a fiecărei parole de conectare a utilizatorului. Fiecare linie din fișierul sam.hash este un utilizator, iar formatul fiecărei linii este:
Nume utilizator: RID:LM-hash value: NTLM-hash value
Rețineți că acest format este formatul de ieșire a comenzii samdump2, nu „formatul de parolă hash sub Windows ".
În primul rând, trebuie să aveți un computer care rulează un sistem linux. Acest lucru este ușor de spus, doar o mașină virtuală. Apoi, rulați următoarea comandă pentru a adăuga un utilizator nou și a seta o parolă pentru explozie:
sudo adduser justforfun
Valoarea hash a parolei de conectare a utilizatorului în linux este stocată în fișierul/etc/shadow (notă: nu/etc/passwd), utilizați următoarea comandă pentru a vizualiza valoarea hash a parolei de conectare a noului utilizator:
test@test-VirtualBox: ~ $ sudo tail -n 1 /etc/shadow justforfun:$6$0fokwg59$6hpMS5dM9wDT/42DDoSD0i0g/wHab50Xs9iEvVLC3V20yf1kRmXZHGXCM0Efv6XU69hdgMZ4FwaMzso4hQaGQ0:17373:0:99999:7:::
tail Comanda este folosită pentru a citi ultimele linii ale unui fișier, implicit este de 10 linii, utilizați parametrul-n pentru a specifica numărul de linii. Utilizatorul pe care tocmai l-am creat este în mod natural pe ultimul rând, așa că îl citim cu tail-n 1. Rezultatul citit este datele împărțite cu ":" Prima parte este numele de utilizator "justforfun", a doua parte este valoarea hash a parolei, iar celelalte părți nu trebuie să fie îngrijorate în acest articol. Ne concentrăm pe a doua parte. „$6$ "începând cu
înseamnă că tipul funcției hash utilizate este SHA-512, cu excepția „$6$", în linux, „$1$ "se referă la MD5, „$2a$" se referă la Blowfish, „$2y$ "se referă la Blowfish (manipularea corectă a caracterelor pe 8 biți), „$5$" Se referă la SHA-256, consultați Wikipedia: passwd pentru detalii. În plus, fișierul/etc/login.defs descrie, de asemenea, algoritmul hash.
Partea „0fokwg59 "de la începutul „$6$" până la următorul „$ "este sare. Ce este sarea? Baidu știe că răspunsul CNB2009 la întrebarea „ Care este valoarea sării md5 "este simplu și ușor de înțeles:
Pur și simplu, este o modalitate de a face aceeași parolă să aibă valori hash diferite, adică salinizarea. MD5 în sine este ireversibil, dar în prezent există multe baze de date pe Internet care acceptă interogări anti-interogări Dacă baza de date cu parole de utilizator este scursă accidental, hackerii pot obține parola utilizatorului prin interogări anti-interogări sau pot utiliza coduri hash care apar frecvent în baza de date (adică). folosit de mulți oameni) pentru spargere prin forță brută (deoarece este de obicei o parolă slabă). Valoarea de sare este o valoare aleatorie suplimentară adăugată în timpul procesului de hash al parolei. De exemplu, ID-ul meu este Epilepsie ω inverse ④, iar parola mea este 123456. Când este stocată în baza de date, șirul „123456/Epilepsie ω inverse ④ "poate fi hash., iar la verificarea parolei, șirul „ (parola de verificat) /epilepsie ω inverse ④" este folosit și pentru verificare. În acest fel, atunci când o altă parolă idiotă este 123456, valori hash diferite pot fi încă construite și verificate cu succes. În acest moment, ID-ul meu este folosit ca valoare de sare pentru hash complex pentru parolă. Deci.. Rolul valorii sării este de a reduce pierderile cauzate de scurgerile bazei de date. Dacă RP-ul tău este foarte bun și ai ghicit că parola mea este 123456, nu te pot opri
Acest răspuns este pentru md5, iar același lucru este valabil și pentru alte funcții hash. Partea după sare este valoarea hash. Acum copiați întreaga a doua parte în fișierul linux.hash. Conținutul din linux.hash ar trebui să fie:
$6$0fokwg59$6hpMS5dM9wDT/42DDoSD0i0g/wHab50Xs9iEvVLC3V20yf1kRmXZHGXCM0Efv6XU69hdgMZ4FwaMzso4hQaGQ0
Apoi utilizați următoarea comandă pentru a exploda hash-ul parolei de conectare linux:
hashcat -w 3 -a 0 -m 1800 - -remove -o linux.out linux.hash wordlist.dic
După un moment, explozia a fost finalizată, vizualizați rezultatul:
werner@Yasser: ~ /hashcat$ cat linux.out $6$0fokwg59$6hpMS5dM9wDT/42DDoSD0i0g/wHab50Xs9iEvVLC3V20yf1kRmXZHGXCM0Efv6XU69hdgMZ4FwaMzso4hQaGQ0:4321
Se poate observa că sablarea a avut succes.
În primul rând, trebuie să aveți Mysql. Se întâmplă să o am în mașina mea virtuală. Baidu știe că valoarea hash a parolei de conectare Mysql este salvată în fișierul user.MYD. Unde este fișierul user.MYD? Nici eu nu știu, doar caut:
test@test-VirtualBox: ~ $ sudo find / -name user.MYD /var/lib/mysql/mysql/user.MYD
a fost găsit în/var/lib/mysql/mysql/user.MYD. Vizualizați conținutul fișierului:
sudo cat /var/lib/mysql/mysql/user.MYD
Nu este un fișier text simplu și are puțină legătură. Totuși puteți vedea că valoarea hash a parolei de conectare a utilizatorului root este:
6B825255FB466413D6B1B724644E23428C94BBCB
Salvați această valoare în fișierul mysql.hash și utilizați următoarea comandă pentru a exploda hash-ul parolei de conectare mysql:
hashcat -w {După un moment, explozia a fost finalizată, vizualizați rezultatul:
werner@Yasser: ~ /hashcat$ cat mysql.out 6b825255fb466413d6b1b724644e23428c94bbcb:viperSe vede că sablarea a avut succes.
5. Explozie Discuz! Parola forumului
Discuz! Este un binecunoscut program de forum php în China și este utilizat pe scară largă. Acum să explodăm Discuz! Valoarea hash a parolei utilizatorului. Mai întâi trebuie să găsiți valoarea hash. Unde o găsiți? De la Discuz, desigur! în baza de date.
poate fi discuzat! Unde este baza de date? Așa am rezolvat-o, descărcați cea mai recentă versiune a Discuz de pe site-ul său oficial! Codul sursă, rulați și instalați-l și obțineți Discuz! Baza de date
![]()
Discuz! Numele implicit al bazei de date este ultrax, iar tabelul pre_ucenter_members stochează valoarea hash a parolei de conectare „pre_ "este prefixul implicit și poate fi schimbat în timpul instalării, dar „ucenter_members" nu se va schimba. Utilizați următoarea instrucțiune sql pentru a interoga valoarea hash a parolei de conectare:
select password,salt from pre_ucenter_members;
![]()
Salvați valorile hash și sale în fișier:
echo 69bcba126b93c6f397983629a0f70553:c13fd9 > discuz.hashValorile hash și sale sunt pe aceeași linie, împărțite cu ":". În cele din urmă, utilizați următoarea comandă pentru a exploda hash-ul parolei de conectare Discuz:
hashcat -w 3 -a 0 -m 2611 - -remove -o discuz.out discuz.hash wordlist.dicDupă un moment, explozia este finalizată, vezi rezultatul:
werner@Yasser: ~ /hashcat$ cat discuz.out 69bcba126b93c6f397983629a0f70553:c13fd9:winterSe vede că sablarea a avut succes.
6. Test de dicționar mare
Până acum, folosim un dicționar mic cu doar 500 de cuvinte. Este nevoie de doar un moment de fiecare dată pentru a exploda cu succes diverse hash-uri. Acest lucru se datorează faptului că am setat în mod deliberat o parolă slabă în dicționar pentru a exersa utilizarea hashcat-ului, altfel nu ar fi o dispoziție proastă dacă nu ar putea fi dezvăluită. În practică, este imposibil să ai un noroc atât de bun. Să calculăm la întâmplare valoarea md5 a unei parole mai puțin slabe, să o explodăm cu un dicționar mare, să încercăm norocul pe de o parte și să vedem cât de rapid poate fi hashcat pe de altă parte.
Mai întâi calculați valoarea md5:
import hashlib md5 = hashlib.md5 () md5.update (" werner123456!!! ") print md5.hexdigest ()Ieșirea este:
b17133f9abff287ed0546c1af2b171f7Apoi selectați un dicționar de dimensiune 10,5G care conține 940 de milioane de parole și începeți să explodați:
hashcat -w 3 -a 0 -m 0 - -remove -o big.out b17133f9abff287ed0546c1af2b171f7 big.dicObservați că atunci când există o singură valoare hash, nu este nevoie să o salvați în fișier și să o scrieți direct în parametrii liniei de comandă. Am început să explodez înainte de a merge la culcare, m-am trezit a doua zi și am văzut rezultatele și am constatat:
Început: Miercuri Iul 26 22:55:27 2017 Stopped: Miercuri Iul 26 23:02:28 2017S-a dovedit că a durat doar 7 minute! Credeam că va dura 7 ore, de 60 de ori mai repede decât mă așteptam! Este păcat că valoarea hash nu a fost explodată cu succes. Se pare că „werner123456!!! "nu este în dicționarul de parole. Se pare că trebuie să pregătesc un dicționar de parole de 100G, dar este foarte incomod să salvez și să transferați un dicționar atât de mare. Desigur, vă amintiți modul de atac? Am folosit modul „drept ". În continuare, să aruncăm o privire la alte moduri.
7. Rezumat
Pentru a folosi hashcat pentru a exploda hash-ul, primul lucru este să găsiți hash-ul corect. Diferite sisteme și diferite software-uri au locații diferite de stocare a hash-ului, așa că trebuie să găsiți cu precizie valoarea hash-ului; Al doilea este de a determina corect tipul de hash, de a determina dacă hashcat acceptă acest hash și de a selecta parametrul corect-m, altfel este aproape imposibil să reușiți; Al treilea este că dicționarul de parole ar trebui să fie mai bun Dacă poate fi explodat cu succes în cele din urmă, depinde de dicționar. Deși dicționarul de parole nu este mai mare, cu atât mai bine, este mai bine să fie mai mare, hashcat este, de asemenea, renumit pentru viteza sa, iar dicționarele mari nu sunt o problemă pentru hashcat. Aici este înregistrat un dicționar mai bun: Porți de scurgere anterioare + colecție de dicționare de parole slabe utilizate în mod obișnuit. 7Z , parola de decompresie este: anywlan. În plus, dacă colectați o mulțime de dicționare mici, puteți îmbina, sorta și dedupla dicționarele mici pentru a obține un dicționar mare pentru explozia hashcat. Dacă dicționarele mici sunt în același director, puteți utiliza o singură comandă:
cat * | sort | uniq > Merge.dicCe se întâmplă dacă dicționarele mici sunt organizate pe categorii și distribuite în directoare cu mai multe straturi? Evident, utilizarea doar a comenzii cat nu funcționează, dar de fapt este necesară doar o singură comandă Presupunând că dicționarele mici sunt stocate în directorul MyDictionary, comanda poate fi scrisă astfel:
find . /MyDictionary -type f -exec cat {} \; | sort | uniq > Merge.dic