Hash-funktion er en generel betegnelse for en type funktion. Inputtet til denne type funktion er vilkårlige binære data, og outputtet er binære data med fast længde, har denne type funktion følgende egenskaber:
Envejs: Det er enkelt og hurtigt at beregne outputtet fra inputtet, men det er matematisk umuligt at udlede inputtet fra outputtet
Kollisionsbegrænsning: Det er ekstremt svært at finde to forskellige inputs med det samme output
Funktioner, der opfylder disse egenskaber, kan kaldes hash-funktioner. Ved at bruge visse data som input til hash-funktionen beregnes outputtet. Det er sædvanligt at kalde dette output dataens hash-værdi.
En af de vigtigste funktioner af hash-funktionen er at gemme adgangskoden sikkert. Den gemmer ikke adgangskoden direkte (det vil sige, den gemmer ikke adgangskoden i almindelig tekst), men gemmer adgangskodens hash-værdi. Under verifikation behøver du kun at beregne den indtastede adgangskode igen. Sammenlign hash-værdien af adgangskoden med hash-værdien af den gemte adgangskode for at vide, om adgangskoden er korrekt. På grund af unidirectionaliteten af hash-funktionen og kollisionsbegrænsningerne er det svært for en angriber at kende selve adgangskoden, selvom han får hash-værdien af adgangskoden.
Angriberen fik hash-værdien af adgangskoden. Er der virkelig ingen måde at kende selve adgangskoden på? Selvfølgelig ikke Selvom det er matematisk umuligt at beregne adgangskoden direkte ud fra adgangskodens hash-værdi, ved vi, at hash-funktionen er enkel og hurtig til at beregne output fra input. I værste fald kan du prøve det adgangskoder, som mennesker kan indstille, prøv dem én efter én, hvis du er heldig, kan du stadig prøve dem. Operationen ved løbende at forsøge at opnå input svarende til hash-værdien kaldes sprængning.
Baseret på denne idé blev hashcat til. Det siges, at hashcat blev født for at bevise, at det er meget simpelt at sprænge hash. hashcat hævder at være verdens hurtigste hash-sprængningsværktøj, og det understøtter endda GPU og FGPA, hvis du har det.
hashcat er ikke kun hurtig, men understøtter også professionelt mere end to hundrede hash-funktioner Brug kommandoen:
hashcat - -help
Du kan se listen over alle hash-funktioner, der understøttes af hashcat. Der er for mange, og jeg vil ikke poste dem her.
hashcat er som standard installeret i Kali og kan bruges direkte. Men min Kali er installeret i VirtualBox, og jeg føler altid, at den virtuelle maskine er langsommere, så jeg vil bruge hashcat i den fysiske vært. Gå først til Hashchats officielle hjemmeside for at downloade hashcat. Lige nu er den seneste version v3.5.0, udgivet 2017.04.05. Fra opdateringsdatoen kan det ses, at hashchat er fuld af vitalitet. For at eliminere besværet med kompilering kan du direkte downloade den binære pakke, som kun er 2,7 millioner, hvilket er meget lille sammenlignet med spil, der ofte vejer snesevis af gigabytter.
Efter downloaden er afsluttet, pakker du hashcat ud og ser:
Sådanne filer er henholdsvis 32-bit og 64-bit eksekverbare filer i linux og windows, vælg blot en af dem i henhold til din computers situation. Jeg valgte hashcat64.bin For skønhedens skyld tilføjede jeg en linje til ~ /. bashrc-filen:
alias hashcat = ' hashcat64.bin-stien '
Efter at have gemt, genåbn den virtuelle terminal for at få ~ /. bashrc-filen til at træde i kraft. På denne måde, uanset hvor du er, kan du bare indtaste hashcat-kommandoen direkte uden at skifte mapper eller indtaste det grimme "64.bin", som vist i figuren nedenfor.
Nå, nu kan du begynde at sprænge forskellige hash med hashcat.
md5 burde være en af de mest berømte og udbredte hash-funktioner. Brug først Python til at generere flere MD5-værdier til sprængning. Koden er som følger:
import hashlib. Adgangskoder = [' 123123 ', ' bond007 ', ' xxxxxx ', ' *H@ & (NT*@BR#^ '] for adgangskode i adgangskoder: md5 = hashlib.md5 () md5.update (adgangskode) print md5.hexdigest ()
Ovenstående kode beregner hashværdierne for henholdsvis fire strenge, og outputresultatet er:
4297f44b13955235245b2497399d7a93 cbdb7e2b1ed566ceb796af2df07205a3 dad3a37aa9d50688b5157698acfd7aee d77db958c179bbffae04b2b908b75c26
Gem outputresultatet i filen md5.hash, en hahs-værdi pr. linje. Brug derefter hashcat til at sprænge disse hash-værdier, kommandoen er som følger:
hashcat -w 3 -a 0 -m 0 - -remove -o md5.out md5.hash wordlist.dic
Parameter-w bruges til at angive arbejdstilstande, der er fire i alt, som vist i følgende tabel:
| N | Ydeevne | Runtime | Strømforbrug | Desktop Impact |
|---|---|---|---|---|
| 1 | Lav | 2 ms | lav | Minimal |
| 2 | standard | 12 ms | økonomisk | mærkbar |
| 3 | høj | 96 ms | høj | ikke reagerer |
| 4 | mareridt | 480 ms | sindssyg | hovedløs |
Parameter-a bruges til at angive angrebstilstanden, betydningen af 0 er direkte og kontinuerlig, det vil sige sprængning med adgangskodeordbogen, der er fem værdier af-a, som vist i følgende tabel:
| N | tilstand |
|---|---|
| 0 | lige |
| 1 | kombination |
| 3 | Brute-force |
| 6 | Hybrid Wordlist + Mask |
| 7 | Hybrid Mask + Wordlist |
-m bruges til at angive den hash, der skal sprænges Hash-funktionen af værdien, 0 betyder, at hash-funktionen er md5, og de andre værdier er som vist i følgende tabel:
| N | navn | kategori |
|---|---|---|
| 0 | MD5 | rå Hash |
| 300 | MySQL4.1/MySQL5 | databaseserver |
| 1000 | NTLM | Operativsystemer |
| 1800 | sha512crypt $6$, SHA512 (Unix) | Operativsystemer |
| 2611 | vBulletin < v3.8.5 | Fora, CMS, e-handel, rammer |
Denne tabel er for lang. Jeg vil kun vise nogle få hash-funktioner, der er involveret i denne artikel. Du kan se dem alle ved hjælp af parameteren – hjælp.
Parameter – fjern betyder, at hvis en hash-værdi sprænges med succes, vil værdien blive fjernet fra md5.hash.
Parameter-o efterfølges af et filnavn, der angiver, hvor sprængningsresultaterne er gemt.
De sidste to parametre md5.hash og wordlist.dic er henholdsvis hash-værdien og adgangskodeordbogen, der skal sprænges. Hash-værdien og adgangskodeordbogen er begge én på hver linje. Indholdet i md5.hash er blevet beregnet af Python Hvis du ikke har en passende adgangskodeordbog ved hånden, kan du bruge kommandoen:
wget -O . wordlist.dic https://samsclass.info/123/proj10/500_passwords.txt
下载一个。现在完事具备,按下回车,结果华丽地报错:(
clGetPlatformIDs(): CL_PLATFORM_NOT_FOUND_KHR
Det mangler sandsynligvis noget kørende miljø, så installer det. I alt har jeg installeret disse ting:
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
Hvis internethastigheden er god, vil den blive installeret på kort tid. Den første kommando rapporterer en fejl:
/sbin/ldconfig.real: /usr/lib/nvidia-375/libEGL.so.1 er ikke en symbolsk link /sbin/ldconfig.real: /usr/lib32/nvidia-375/libEGL.so.1 er ikke a symbolsk link
Men det ser ikke ud til at påvirke noget, bare ignorer det. Efter at have installeret disse, trykkede du på Enter igen og kørte den oprindelige fejlkommando. Jeg fandt ud af, at der ikke var nogen fejl igen, og udførelsen blev afsluttet på et øjeblik. Efter at kommandoen er udført, tjekker du indholdet af filerne md5.hash og md5.out og finder ud af, at der kun er én hash tilbage i md5.hash. De tre hash, der blev sprængt med succes, er blevet overført til filen md5.out. md5.out er tre hash-værdier og deres oprindelige værdier, som vist i figuren nedenfor:
Hash-værdien af Windows login adgangskode er gemt i SAM-filen, SAM er forkortelsen for "security account manager". Normalt er den placeret i
C: \Windows\system32\config\SAM
SAM-filen er beskyttet af Windows og kan ikke læses direkte værktøjer såsom SAMInside. Find en virtuel Windows 7-maskine, opret en ny administratorbruger ved navn hashcat, og indstil en adgangskode. Download og udpakk SAMInside i Windows 7 og kør den med administratorrettigheder, og klik derefter på File- > Import lokale brugere vis Scheduler, som vist nedenfor Som vist på billedet:
SAMInside kan "ikke svare" efter det, men det gør ikke noget, vent tålmodigt i et par sekunder, og SAMInside levede op til forventningerne og læste det, vi ønsker. hash, som vist på billedet nedenfor:
Vælg brugeren "hashcat", hvis adgangskode vi vil sprænge, tryk på Ctrl +5 for at kopiere NT-hash, og gå derefter tilbage til Ubuntu med hashcat installeret, og brug følgende kommando til at gemme den kopierede hash-værdi til filen win7.hash:
echo 356CEAE0C89FB65ED6D6AA7A445C4CE5 {> hashcat -w 3 -a 0 -m 1000 - -fjern -o win7.out win7.hash wordlist.dic
Udførelsen blev afsluttet efter et stykke tid. Efter at have tjekket win7.out-filen, fandt jeg ud af, at sprængningen var vellykket. Brugerens hashcat-login-adgangskode er rush2112:
werner@Yasser: ~ /hashcat$ cat win7.out
356ceae0c89fb65ed6d6aa7a445c4ce5:rush2112
Sådan får du SAM-filen, se venligst "Sådan eksporterer du Windows Hash Series 1". Følgende er processen med at læse SAM-filen i den virtuelle maskine Windows 7.
Hvis det er en fysisk maskine, skal du bruge Win PE til at starte maskinen og læse SAM-filen på disken. Min er en virtuel maskine. Du kan læse filerne på den virtuelle disk ved at montere de virtuelle diskfiler til filsystemet. Den virtuelle maskine, jeg bruger, er VirtualBox, som kan gøres ved hjælp af kommandoen vdfuse. Hvis du ikke har vdfuse, skal du installere virtualbox-fuse først:
sudo apt-get install virtualbox-fuse
Du kan også downloade installationspakken til virtualbox-fuse og installere den selv.
Når installationen er afsluttet, vil vdfuse-kommandoen være tilgængelig, og du kan starte virtuel diskkortlægning og montering:
mkdir -p ~ /vmdisk
sudo vdfuse -t vmdk -f Win7Pro32.vmdk ~ /vmdisk/
Efter at have udført dette trin, tjek ~ /vmdisk-mappen, der er tre filer: entidisk, Partition1 og Partition2, ny mappe:
mkdir -p ~ /vmdisk_en
mkdir -p ~ /vmdisk_1
mkdir -p ~ /vmdisk_2
Brug kommandoen mount til at montere henholdsvis entidisk, Partition1 og Partition2 filer:
sudo mount ~ /vmdisk/entidisk ~ /vmdisk_en
sudo monter ~ /vmdisk/Partition1 ~ /vmdisk_1
sudo mount ~ /vmdisk/Partition2 ~ /vmdisk_2
fandt ud af, at hele diskmonteringen mislykkedes, og indholdet i Partition1 er ikke det, jeg vil have, Partition2 er filen i den virtuelle Windows 7-maskine, præcis hvad jeg vil have. Kopier vores mål-SAM-fil fra vmdisk_fs:
cp ~ /vmdisk_2/Windows/System32/config/SAM . /
Kopier i øvrigt også systemfilen:
cp ~ /vmdisk_2/Windows/System32/config/SYSTEM . /
Se indholdet af SAM-filen, som vist på figuren nedenfor, er det ikke en almindelig tekstfil, det er virkelig Windows-stilen,
Nå, selvom vi med succes åbnede SAM-filen, fik vi stadig ikke hash. Hvad skal vi gøre, hvis vi ændrer den næste gang? Du kan kun bruge værktøjer til at analysere indholdet af SAM-filer. Sæt både sam-filen og systemfilen i Kali, og kør kommandoen:
samdump2 -o sam.hash SYSTEM sam
Se derefter sam.hash, og du kan også se hash-værdien af hver brugers login-adgangskode. Hver linje i sam.hash-filen er en bruger, og formatet for hver linje er:
Brugernavn: RID:lm-hash-værdi: ntlm-hash-værdi
Bemærk, at dette format er samdump2-kommandooutputformatet, ikke "hash-adgangskodeformatet under Windows".
3. Eksplosion af Linux-login-adgangskode hash
Først og fremmest skal du have en computer, der kører et Linux-system. Dette er nemt at sige, bare en virtuel maskine. Kør derefter følgende kommando for at tilføje en ny bruger og indstille en adgangskode, som vi kan sprænge:
sudo adduser justforfun
Hash-værdien af brugerens login-adgangskode i linux er gemt i filen/etc/shadow (bemærk: ikke/etc/passwd Brug følgende kommando til at se hash-værdien af den nye brugers login-adgangskode:
test@test-VirtualBox: ~ $ sudo tail -n 1 /etc/shadow
justforfun:$6$0fokwg59$6hpMS5dM9wDT/42DDoSD0i0g/wHab50Xs9iEvVLC3V20yf1kRmXZHGXCM0Efv6XU69hdgMZ4FwaMzso4hQaGQ0:17373:0:99999:7:::
hale Kommandoen bruges til at læse de sidste par linjer i en fil, standard er 10 linjer, brug parameteren-n til at angive antallet af linjer. Den bruger, vi lige har oprettet, er naturligvis på sidste linje, så vi bruger tail-n 1 til at læse den. Resultatet af læsning er dataene opdelt med ":" Den første del er brugernavnet "justforfun", den anden del er hash-værdien af adgangskoden, og de andre dele behøver ikke at bekymre sig om i denne artikel. Vi fokuserer på anden del.
"$6$", der begynder med , betyder, at typen af den anvendte hash-funktion er SHA-512. Bortset fra "$6$", i linux, refererer "$1$" til MD5, "$2a$" refererer til Blowfish, "$2y$" refererer til Blowfish (korrekt håndtering af 8-bit tegn), "$5$" Henviser til SHA-256, se Wikipedia for detaljer: passwd. Derudover forklarer filen/etc/login.defs også hash-algoritmen.
Sektionen "0fokwg59" fra begyndelsen af "$6$" til den næste "$" er SALT. Hvad er salt? Baidu ved, at CNB2009s svar på spørgsmålet " Hvad er MD5-saltværdien " er enkelt og let at forstå:
Kort sagt er det en måde at få den samme adgangskode til at have forskellige hash-værdier, er saltning. MD5 i sig selv er irreversibel, men der er i øjeblikket mange databaser på internettet, der understøtter anti-forespørgsel. Hvis brugeradgangskodedatabasen ved et uheld lækkes, kan hackere få brugeradgangskoden gennem anti-forespørgsel eller bruge hash-koder, der optræder hyppigere i databasen (dvs. brugt af mange mennesker) til brute force cracking (fordi det normalt er en svag adgangskode). Saltværdien er den ekstra tilfældige værdi, der tilføjes under adgangskode-hash-processen. For eksempel er mit id, og adgangskoden er 123456. Når den er gemt i databasen, kan jeg hashe strengen "123456/adgangskode". Ved bekræftelse af adgangskoden bruges også strengen "(adgangskode, der skal bekræftes) /adgangskode til bekræftelse" til bekræftelse. På denne måde, når en anden idiot-adgangskode er 123456, kan forskellige hash-værdier stadig konstrueres og verificeres med succes. På dette tidspunkt bruges mit id som en saltværdi til at udføre kompleks hash for adgangskoden. Så hvad?. Rollen af saltværdien er at reducere tabet forårsaget af databaselækage. Hvis din RP er meget god og gætter min adgangskode er 123456, kan jeg ikke stoppe dig
Dette svar er for md5, og det samme gælder for andre hash-funktioner. Delen efter saltet er hash-værdien. Kopier nu hele anden del til filen linux.hash. Indholdet i linux.hash skal være:
$6$0fokwg59$6hpMS5dM9wDT/42DDoSD0i0g/wHab50Xs9iEvVLC3V20yf1kRmXZHGXCM0Efv6XU69hdgMZ4FwaMzso4hQaGQ0
Brug derefter følgende kommando til at sprænge linux login adgangskode hash:
hashcat -w 3 -a 0 -m 1800 - -fjern -o linux.out linux.hash wordlist.dic
Et øjeblik senere er sprængningen afsluttet, se resultatet:
werner@Yasser: ~ /hashcat$ cat linux.out
$6$0fokwg59$6hpMS5dM9wDT/42DDoSD0i0g/wHab50Xs9iEvVLC3V20yf1kRmXZHGXCM0Efv6XU69hdgMZ4FwaMzso4hQaGQ0:4321
Det kan ses, at sprængningen var vellykket.
4. Eksplosion af Mysql login adgangskode hash
Først skal du have Mysql. Jeg har det bare i min virtuelle maskine. Baidu kan vide, at hash-værdien af MySQL-login-adgangskoden er gemt i filen user.MYD. Hvor er filen user.MYD? Jeg ved det heller ikke, så jeg leder efter det:
test@test-VirtualBox: ~ $ sudo find / -navn user.MYD
/var/lib/mysql/mysql/user.MYD
fundet i/var/lib/mysql/mysql/user.MYD Se indholdet af filen:
sudo cat /var/lib/mysql/mysql/user.MYD
Det er ikke en almindelig tekstfil, så det har ikke meget at gøre. Du kan stadig se, at hash-værdien af brugerroots login-adgangskode er:
6B825255FB466413D6B1B724644E23428C94BBCB
Gem denne værdi i filen mysql.hash, og brug følgende kommando til at sprænge MySQL-login-adgangskoden hash:
hashcat -w { Et øjeblik senere er sprængningen afsluttet Se resultaterne:
werner@Yasser: ~ /hashcat$ cat mysql.out
6b825255fb466413d6b1b724644e23428c94bbcb:viper
Det kan ses, at sprængningen var vellykket.
5. Eksplosion Discuz! Forum adgangskode
Discuz! Det er et velkendt PHP-forumprogram i Kina og er meget udbredt. Lad os nu sprænge Discuz! Hash-værdien af brugerens adgangskode. Først skal du finde hash-værdien. Hvor kan du finde den? Selvfølgelig fra Discuz! i database.
kan Discuz! Hvor er databasen? Sådan løste jeg det, download den seneste version af Discuz fra dens officielle hjemmeside! Kildekoden, kør den og installer den, og du får Discuz! Database
Discuz! Standarddatabasenavnet er ultrax, og tabellen pre_ucenter_members gemmer hash-værdien af login-adgangskoden "pre_" er standardpræfikset og kan ændres under installationen, men "ucenter_members" ændres ikke. Brug følgende SQL-sætning til at forespørge hash-værdien af login-adgangskoden:
select password,salt fra pre_ucenter_members;
Gem hash-og saltværdier til filen:
echo 69bcba126b93c6f397983629a0f70553:c13fd9 > discuz.hash
Hash-værdien og saltværdien er i samme række, opdelt med ":". Brug endelig følgende kommando til at sprænge Discuz-login-adgangskoden hash:
hashcat -w 3 -a 0 -m 2611 - -fjern -o discuz.out discuz.hash wordlist.dic
Efter et øjeblik er sprængningen afsluttet, se resultaterne:
werner@Yasser: ~ /hashcat$ cat discuz.out
69bcba126b93c6f397983629a0f70553:c13fd9:winter
Det kan ses, at sprængningen var vellykket.
6. Stor ordbogstest
Indtil videre bruger vi en lille ordbog med kun 500 ord. Det tager kun et øjeblik hver gang at eksplodere forskellige hash. Dette skyldes, at jeg bevidst har indstillet en svag adgangskode i ordbogen for at øve mig i at bruge hashcat, ellers ville det ikke være dårligt for folk at føle sig dårlige, hvis de ikke kunne eksplodere. I praksis er det umuligt at have så godt held. Lad os tilfældigt beregne MD5-værdien af en ikke så svag adgangskode, sprænge den med en stor ordbog, prøve lykken på den ene side og se, hvor hurtigt hashcat kan være på den anden side.
Beregn først MD5-værdien:
import hashlib
md5 = hashlib.md5 ()
md5.update (" werner123456!!! ")
print md5.hexdigest () Outputtet er:
b17133f9abff287ed0546c1af2b171f7
Vælg derefter en 10,5G-størrelse ordbog med 940 millioner adgangskoder og begynd at sprænge:
hashcat -w 3 -a 0 -m 0 - -fjern -o big.out b17133f9abff287ed0546c1af2b171f7 big.dic
Bemærk, at når der kun er én hash-værdi, behøver du ikke gemme den i en fil, men du kan også skrive den direkte i kommandolinjeparametrene. Jeg begyndte at sprænge før jeg gik i seng, og da jeg vågnede næste dag for at se resultaterne, fandt jeg ud af:
Startet: Ons Jul 26 22:55:27 2017
STOPPET: ons Jul 26 23:02:28 2017
Det viste sig, at det kun tog 7 minutter! Jeg troede, det ville tage 7 timer, hvilket var 60 gange hurtigere end jeg havde forventet! Det er lidt ærgerligt, at hash-værdien ikke blev sprængt. Det ser ud til, at "werner123456!!!" ikke er i adgangskodeordbogen. Det ser ud til, at jeg skal forberede en 100G adgangskodeordbog, men det er meget ubelejligt at gemme og overføre en så stor ordbog. Er der ingen anden måde? Selvfølgelig, husk angrebstilstanden? Vi har brugt "lige"-tilstanden. Lad os derefter undersøge flere andre tilstande.
7. Resumé
Når du bruger hashcat til at sprænge hash, er det første at finde den nøjagtige hash. Forskellige systemer og forskellige software har forskellige hash-lagringssteder, så du skal finde hash-værdien nøjagtigt. Den anden er korrekt at bestemme hash-typen, afgøre, om hashcat understøtter denne hash, og vælge den rigtige parameter-m, ellers er det næsten umuligt at lykkes; Den tredje er, at adgangskodeordbogen skal være bedre. Hvorvidt eksplosionen i sidste ende kan lykkes, afhænger af ordbogen. Selvom en større adgangskodeordbog ikke er bedre, er det stadig bedre at være større. hashcat er også berømt for sin hastighed. Store ordbøger er ikke et problem for hashcat. Her er en bedre ordbog optaget: Tidligere lækageporte + sæt af almindeligt anvendte svage adgangskodeordbøger. 7Z , dekomprimeringsadgangskoden er: anywlan. Derudover, hvis du samler mange små ordbøger, kan du slå sammen, sortere og deduplisere de små ordbøger for at få en stor ordbog, som kan bruges til Hashcat-sprængning. Hvis de små ordbøger er i samme mappe, kan du gøre det ved hjælp af én kommando:
cat * | sort | uniq > Merge.dic
Hvad hvis de små ordbøger er organiseret efter kategorier og fordelt i flere-lags mapper? Det er naturligvis ikke muligt kun at bruge cat-kommandoen, men faktisk er der kun brug for én kommando. Forudsat at de små ordbøger er gemt i mappen MyDictionary, kan kommandoen skrives som følger:
. find . /MyDictionary -type f -exec cat {} \; | sorter | uniq > Merge.dic