Hash-funksjon er et generelt navn for en type funksjon. Inngangen til denne typen funksjon er vilkårlige binære data, og utgangen er en fast lengde binære data, denne typen funksjon har følgende egenskaper:
Enveishet: Det er enkelt og raskt å beregne utgangen fra inngangen, men det er matematisk umulig å utlede inngangen fra utgangen
Kollisjonsbegrensning: Det er ekstremt vanskelig å finne to forskjellige innganger med samme utgang
Funksjoner som tilfredsstiller disse egenskapene kan kalles hashfunksjoner. Ved å bruke visse data som inngang til hash-funksjonen, beregnes utgangen. Det er vanlig å referere til denne utgangen som hash-verdien til dataene.
En av hovedfunksjonene til hash-funksjonen er å lagre passordet sikkert. Den lagrer ikke passordet direkte (det vil si at den ikke lagrer passordet i klar tekst), men lagrer hashverdien til passordet. Under verifisering trenger du bare å beregne inngangspassordet på nytt. Sammenlign hashverdien til det lagrede passordet med hashverdien til det lagrede passordet for å vite om passordet er riktig. På grunn av unidirectionaliteten til hash-funksjonen og kollisjonsbegrensningene, er det vanskelig for en angriper å vite selve passordet selv om han får hash-verdien av passordet.
Angriperen fikk hashverdien til passordet. Er det virkelig ingen måte å vite selve passordet på? Selvfølgelig ikke Selv om det er matematisk umulig å beregne selve passordet direkte fra hash-verdien til passordet, vet vi at hash-funksjonen er enkel og rask for å beregne utgangen fra inngangen. I verste fall kan du prøve passordet som mennesker kan sette er de, prøv det en etter en, du kan fortsatt prøve det hvis du er heldig. Operasjonen med kontinuerlig forsøk på å få inngangen som tilsvarer hash-verdien kalles sprengning.
Basert på denne ideen ble hashcat til. Det sies at hashcat ble født for å bevise at det er veldig enkelt å sprenge hash. hashcat hevder å være verdens raskeste hash-blast-verktøy, og det støtter til og med GPU og FGPA, hvis du har det.
hashcat er ikke bare rask, men støtter også profesjonelt mer enn to hundre hash-funksjoner Bruk kommandoen:
hashcat - -help
Du kan se listen over alle hash-funksjonene som støttes av hashcat. Det er for mange og jeg vil ikke legge dem ut her.
hashcat er installert som standard i Kali og kan brukes direkte. Men min Kali er installert i VirtualBox, og jeg føler alltid at den virtuelle maskinen er tregere, så jeg vil bruke hashcat i den fysiske verten. Gå først til den offisielle nettsiden til hashchat for å laste ned hashcat. Per nå er den nyeste versjonen v3.5.0, utgitt 2017.04.05. Fra oppdateringsdatoen kan du se at hashchat er full av vitalitet. For å eliminere problemene med kompilering, last ned den binære pakken direkte, som bare er 2,7 millioner, noe som er veldig lite sammenlignet med spill som ofte veier dusinvis av gigabyte.
Etter at nedlastingen er fullført, pakker du ut hashcat og ser:
Slike filer er henholdsvis 32-bit og 64-bit Kjørbare filer i linux og windows, velg bare en av dem i henhold til situasjonen til din datamaskin. Jeg valgte hashcat64.bin For skjønnhetens skyld legger jeg til en linje i ~ /. bashrc-filen:
alias hashcat = ' banen til hashcat64.bin '
Etter lagring åpner du den virtuelle terminalen på nytt for å gjøre ~ /. bashrc-filen effektiv. På denne måten, uansett hvor du er, kan du bare skrive inn hashcat-kommandoen direkte uten å bytte katalog eller skrive inn den stygge "64.bin", som vist i figuren nedenfor.
Ok, nå kan du begynne å sprenge ulike hash med hashcat.
md5 burde være en av de mest kjente og mest brukte hash-funksjonene. Bruk først Python til å generere flere MD5-verdier for sprengning. Koden er som følger:
import hashlib. Passord = [' 123123 ', ' bond007 ', ' xxxxxx ', ' *H@ & (NT*@BR#^ '] for passord i passord: md5 = hashlib.md5 () md5.update (passord) print md5.hexdigest ()
Koden ovenfor beregner hashverdiene til de fire strengene, og utdataresultatet er:
4297f44b13955235245b2497399d7a93 cbdb7e2b1ed566ceb796af2df07205a3 dad3a37aa9d50688b5157698acfd7aee d77db958c179bbffae04b2b908b75c26
Lagre utdataresultatet i filen md5.hash, en hahs-verdi per linje. Bruk deretter hashcat for å sprenge disse hash-verdiene, kommandoen er som følger:
hashcat -w 3 -a 0 -m 0 - -remove -o md5.out md5.hash wordlist.dic
Parameter-w brukes til å spesifisere arbeidsmoduser, det er fire, som vist i tabellen nedenfor:
| N | Ytelse | Kjøringstid | Strømforbruk | Desktop Impact |
|---|---|---|---|---|
| 1 | Lav | 2 ms | lav | Minimal |
| 2 | standard | 12 ms | økonomisk | merkbar |
| 3 | Høy | 96 ms | Høy | Uresponsiv |
| 4 | Mareritt | 480 ms | Insane | Headless |
Parameter-a brukes til å spesifisere angrepsmodus, betydningen av 0 er direkte og kontinuerlig, det vil si å sprenge med en passordordbok, det er fem verdier av-a, som vist i tabellen nedenfor:
| N | Mode |
|---|---|
| 0 | Rett |
| 1 | Kombinasjon |
| 3 | Brute-force |
| 6 | Hybrid ordliste + maske |
| 7 | Hybrid maske + ordliste |
-m brukes til å spesifisere hashen som skal sprenges Hash-funksjonen til verdien, 0 betyr at hash-funksjonen er md5, og de andre verdiene er som vist i følgende tabell:
| 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 | Forums, CMS, E-Commerce, Frameworks |
Dette Tabellen er for lang. Jeg vil bare vise noen få hash-funksjoner som er involvert i denne artikkelen. Du kan se dem alle ved å bruke parameteren – hjelp. Betydningen av
parameter – fjern er at hvis en viss hash-verdi er sprengt, vil verdien bli fjernet fra md5.hash.
Parameter-o følges av et filnavn som indikerer hvor sprengningsresultatene er lagret.
De to siste parametrene md5.hash og wordlist.dic er henholdsvis hash-verdien og passordboken som skal eksploderes. Hash-verdien og passordboken er begge én på hver linje. Innholdet i md5.hash er beregnet av Python Hvis du ikke har en passende passordordbok for hånden, kan du bruke kommandoen:
wget -O wordlist. dic https://samsclass.info/123/proj10/500_passwords.txt
下载一个。现在完事具备,按下回车,结果华丽地报错:(
clGetPlatformIDs(): CL_PLATFORM_NOT_FOUND_KHR
Det mangler sannsynligvis et kjøremiljø, så installer det. Jeg har installert disse tingene totalt:
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 nettverkshastigheten er god, vil den bli installert på kort tid. Den første kommandoen rapporterer en feil:
/sbin/ldconfig.real: /usr/lib/nvidia-375/libEGL.so.1 er ikke en symbolsk lenke /sbin/ldconfig.real: /usr/lib32/nvidia-375/libEGL.so.1 er ikke a symbolsk link
Men det ser ikke ut til å påvirke noe, bare ignorer det. Etter å ha installert disse, trykket du Enter igjen og kjørte den opprinnelige feilkommandoen. Jeg fant ut at det ikke var noen feil igjen, og utførelsen ble fullført på et øyeblikk. Etter at kommandoen er utført, sjekk innholdet i filene md5.hash og md5.out og fant ut at det bare er én hash igjen i md5.hash. De tre hashene som ble sprengt med suksess har blitt overført til filen md5.out. md5.out er tre hashverdier og deres opprinnelige verdier, som vist i figuren nedenfor:
Hashverdien til Windows påloggingspassord er lagret i SAM-filen, SAM er forkortelsen for "security account manager". Vanligvis er den plassert i
C: \windows\system32\config\SAM
SAM-filen er beskyttet av Windows og kan ikke leses direkte verktøy som SAMInside. Finn en virtuell Windows 7-maskin, opprett en ny administratorbruker som heter hashcat, angi et passord, last ned og pakk ut SAMInside i Windows 7, kjør deretter med administratortillatelser, og klikk deretter på File- > Import Local Users vis Scheduler, som vist nedenfor Som vist i bildet:
SAMInside kan "ikke svare" etter det, men det spiller ingen rolle, vent tålmodig i noen sekunder, og SAMInside lever opp til forventningene og leser ut det vi ønsker hash, som vist i bildet nedenfor:
Velg brukeren "hashcat" som vi vil eksplodere passordet, trykk Ctrl +5 for å kopiere NT-hash, gå deretter tilbake til Ubuntu med hashcat installert, bruk følgende kommando for å lagre den kopierte hash-verdien til filen win7.hash:
echo 356CEAE0C89FB65ED6D6AA7A445C4CE5 {> hashcat -w 3 -a 0 -m 1000 - -remove -o win7.out win7.hash wordlist.dic
Utførelsen ble fullført etter et øyeblikk. Jeg sjekket win7.out-filen og fant ut at sprengningen var vellykket. Påloggingspassordet til brukeren hashcat er rush2112:
werner@Yasser: ~ /hashcat$ cat win7.out
356ceae0c89fb65ed6d6aa7a445c4ce5:rush2112
For hvordan du får SAM-filen, se "Hvordan eksportere Windows Hash Series 1". Følgende er prosessen med å lese SAM-filen i den virtuelle maskinen Windows 7.
Hvis det er en fysisk maskin, start maskinen med Win PE og les SAM-filen på disken. Min er en virtuell maskin. Du kan lese filene på den virtuelle disken ved å montere den virtuelle diskfilen til filsystemet. Den virtuelle maskinen jeg bruker er VirtualBox, som kan gjøres ved å bruke kommandoen vdfuse. Hvis du ikke har vdfuse, må du installere virtualbox-fuse først:
sudo apt-get install virtualbox-fuse
Du kan også laste ned installasjonspakken til virtualbox-fuse og installere den selv.
Etter at installasjonen er fullført, vil vdfuse-kommandoen være tilgjengelig, og du kan starte virtuell diskkartlegging og montering:
mkdir -p ~ /vmdisk
sudo vdfuse -t vmdk -f Win7Pro32.vmdk ~ /vmdisk/
Etter å ha utført dette trinnet, sjekk ~ /vmdisk-katalogen, som har tre filer: EntireDisk, Partition1 og Partition2, ny katalog:
mkdir -p ~ /vmdisk_en
mkdir -p ~ /vmdisk_1
mkdir -p ~ /vmdisk_2
Bruk mount-kommandoen til å montere henholdsvis hele disk, partisjon1 og partisjon2-filer:
sudo mount ~ /vmdisk/hele disk ~ /vmdisk_en
sudo monter ~ /vmdisk/Partition1 ~ /vmdisk_1
sudo mount ~ /vmdisk/Partition2 ~ /vmdisk_2
fant ut at hele disken mislyktes å montere innholdet i Partition1 er ikke det jeg vil ha, Partition2 er filen i Windows 7 virtuelle maskiner, akkurat det jeg vil ha. Kopier mål-SAM-filen vår fra vmdisk_fs:
cp ~ /vmdisk_2/Windows/System32/config/SAM . /
Forresten, kopier også systemfilen:
cp ~ /vmdisk_2/Windows/System32/config/SYSTEM . /
Se innholdet i SAM-filen, som vist på bildet nedenfor, er det ikke en vanlig tekstfil, det er virkelig Windows-stilen,
Vel, selv om SAM-filen ble åpnet, fikk vi fortsatt ikke hash. Hva skal vi gjøre hvis vi endrer den neste gang? Du kan bare bruke verktøyet til å analysere innholdet i SAM-filen. Sett SAM-filen og systemfilen til Kali og kjør kommandoen:
samdump2 -o sam.hash SYSTEM sam
Se deretter sam.hash, og du kan også se hash-verdien til hver brukers påloggingspassord. Hver linje i sam.hash-filen er en bruker, og formatet til hver linje er:
Brukernavn: RID:lm-hash-verdi: ntlm-hash-verdi
Merk at dette formatet er samdump2-kommandoutdataformatet, ikke "hash-passordformatet under Windows".
3. hash for Linux-påloggingspassord
Først av alt må du ha en datamaskin som kjører Linux-systemet. Dette er lett å si, bare en virtuell maskin. Kjør deretter følgende kommando for å legge til en ny bruker og angi et passord som vi kan sprenge:
sudo adduser justforfun
Hash-verdien til brukerens påloggingspassord i linux er lagret i filen/etc/shadow (merk: ikke/etc/passwd Bruk følgende kommando for å se hash-verdien til den nye brukerens påloggingspassord:
test@test-VirtualBox: ~ $ sudo tail -n 1 /etc/shadow
justforfun:$6$0fokwg59$6hpMS5dM9wDT/42DDoSD0i0g/wHab50Xs9iEvVLC3V20yf1kRmXZHGXCM0Efv6XU69hdgMZ4FwaMzso4hQaGQ0:17373:0:99999:7:::
hale Kommandoen brukes til å lese de siste linjene i en fil, standard er 10 linjer, bruk parameteren-n for å spesifisere antall linjer. Brukeren vi nettopp har opprettet er naturligvis på siste linje, så vi bruker tail-n 1 til å lese den. Resultatet av lesing er dataene delt med ":" Den første delen er brukernavnet "justforfun", den andre delen er hash-verdien av passordet, og de andre delene trenger ikke å være bekymret for i denne artikkelen. Vi fokuserer på den andre delen.
"$6$" som begynner med betyr at typen hash-funksjon som brukes er SHA-512 I tillegg til "$6$", i linux, refererer "$1$" til MD5, "$2a$" refererer til Blowfish, "$2y$" refererer til Blowfish (korrekt håndtering av 8-biters tegn), "$5$" Refererer til SHA-256, se Wikipedia for detaljer: passwd. I tillegg forklarer filen/etc/login.defs også hash-algoritmen.
Delen "0fokwg59" fra begynnelsen av "$6$" til neste "$" er SALT. Hva er salt? Baidu vet at CNB2009s svar på spørsmålet " Hva er md5 saltverdien " er enkelt og lett å forstå:
Enkelt sagt er det en måte å få det samme passordet til å ha forskjellige hash-verdier, er salting. MD5 i seg selv er irreversibel, men det er for tiden mange databaser på Internett som støtter anti-forespørsel Hvis brukerpassorddatabasen ved et uhell blir lekket, kan hackere få brukerpassordet gjennom anti-forespørsel, eller bruke hash-koder som vises ofte i databasen. (dvs. brukt av mange) for brute force cracking (fordi det vanligvis er et svakt passord). Saltverdien er en ekstra tilfeldig verdi som legges til under passordhashprosessen. For eksempel er ID-en min og passordet mitt er 123456. Når den er lagret i databasen, kan jeg hashe strengen "123456/epilepsi". Når du bekrefter passordet, bruker du også strengen "(passord som skal bekreftes) /epilepsi omvendt ④" for verifisering. På denne måten, når et annet idiotpassord er 123456, kan forskjellige hash-verdier fortsatt konstrueres og verifiseres. På dette tidspunktet brukes ID-en min som saltverdien for å utføre kompleks hash for passordet. Så hva?. Rollen til saltverdien er å redusere tap forårsaket av databaselekkasje. Hvis RP er veldig bra og passordet mitt er 123456, kan jeg ikke stoppe deg
Dette svaret er for md5, og det samme gjelder for andre hash-funksjoner. Delen etter saltet er hash-verdien. Kopier nå hele den andre delen til filen linux.hash. Innholdet i linux.hash skal være:
$6$0fokwg59$6hpMS5dM9wDT/42DDoSD0i0g/wHab50Xs9iEvVLC3V20yf1kRmXZHGXCM0Efv6XU69hdgMZ4FwaMzso4hQaGQ0
Bruk deretter følgende kommando for å sprenge Linux-påloggingspassordet hash:
hashcat -w 3 -a 0 -m 1800 - -fjern -o linux.out linux.hash wordlist.dic
Etter et øyeblikk er sprengningen fullført, se resultatet:
werner@Yasser: ~ /hashcat$ cat linux.out
$6$0fokwg59$6hpMS5dM9wDT/42DDoSD0i0g/wHab50Xs9iEvVLC3V20yf1kRmXZHGXCM0Efv6XU69hdgMZ4FwaMzso4hQaGQ0:4321
Det kan sees at sprengningen var vellykket.
4. Eksplodere MySQL-påloggingspassord hash
Først må du ha Mysql. Det skjedde at jeg hadde det i min virtuelle maskin. Baidu vet at hash-verdien til MySQL-påloggingspassordet er lagret i filen user.MYD. Hvor er filen user.MYD? Jeg vet ikke heller, bare se etter det:
test@test-VirtualBox: ~ $ sudo find / -name user.MYD
/var/lib/mysql/mysql/user.MYD
Fant den i/var/lib/mysql/mysql/user.MYD Se innholdet i filen:
sudo cat /var/lib/mysql/mysql/user.MYD
Det er ikke en vanlig tekstfil og har lite å gjøre med det. Du kan fortsatt se at hash-verdien til brukerens root-påloggingspassord er:
6B825255FB466413D6B1B724644E23428C94BBCB
Lagre denne verdien til filen mysql.hash, bruk følgende kommando for å sprenge MySQL-påloggingspassordet hash:
hashcat -w { Etter et øyeblikk er sprengningen fullført, se resultatene:
werner@Yasser: ~ /hashcat$ cat mysql.out
6b825255fb466413d6b1b724644e23428c94bbcb:viper
Det kan sees at sprengningen var vellykket.
5. Eksplosjon Discuz! Forum Passord
Discuz! Det er et velkjent PHP-forumprogram i Kina og er mye brukt. La oss nå sprenge Discuz! Hash-verdien av brukerpassordet. Først må du finne hash-verdien. Hvor finner du den? Fra Discuz, selvfølgelig! i databasen.
kan Discuz! Hvor er databasen? Slik løste jeg det, last ned den nyeste versjonen av Discuz fra den offisielle nettsiden! Kildekoden, kjør den og installer den, og du får Discuz! Database
Discuz! Standarddatabasenavnet er ultrax, og tabellen pre_ucenter_members lagrer hash-verdien til påloggingspassordet "pre_" er standardprefikset, som kan endres under installasjonen, men "ucenter_members" vil ikke endres. Bruk følgende SQL-setning for å spørre etter hash-verdien til påloggingspassordet:
select PASSORD,salt FRA pre_ucenter_members;
Lagre hash-og saltverdier til filen:
echo 69bcba126b93c6f397983629a0f70553:c13fd9 > discuz.hash
Hash-verdien og saltverdien er i samme linje, delt med ":". Bruk til slutt følgende kommando for å sprenge Discuz-påloggingspassordet hash:
hashcat -w 3 -a 0 -m 2611 - -fjern -o discuz.out discuz.hash wordlist.dic
Etter et øyeblikk er sprengningen fullført, se resultatet:
werner@Yasser: ~ /hashcat$ cat discuz.out
69bcba126b93c6f397983629a0f70553:c13fd9:winter
Det kan sees at sprengningen var vellykket.
6. Stor ordboktest
Så langt bruker vi en liten ordbok med bare 500 ord. Det tar bare et øyeblikk hver gang å eksplodere ulike hash. Dette er fordi jeg bevisst satte et svakt passord i ordboken for å øve på å bruke hashcat, ellers ville det ikke være dårlig å eksplodere. Det er umulig å ha så god flaks i praksis. La oss tilfeldig beregne MD5-verdien til et mindre svakt passord, sprenge det med en stor ordbok, prøve lykken på den ene siden, og se hvor raskt hashcat kan være på den andre siden.
Beregn først MD5-verdien:
import hashlib
md5 = hashlib.md5 ()
md5.update (" werner123456!!! ")
print md5.hexdigest () Utgangen er:
b17133f9abff287ed0546c1af2b171f7
Velg deretter en 10,5G-størrelse ordbok som inneholder 940 millioner passord og begynn å eksplodere:
hashcat -w 3 -a 0 -m 0 - -fjern -o big.out b17133f9abff287ed0546c1af2b171f7 big.dic
Legg merke til at når det bare er én hash-verdi, trenger du ikke å lagre den i en fil, du kan også skrive den direkte i kommandolinjeargumentene. Jeg begynte å sprenge før jeg la meg, og da jeg våknet neste dag for å se på resultatene, fant jeg ut:
startet: ons Jul 26 22:55:27 2017
stoppet: ons Jul 26 23:02:28 2017
Det viste seg at det bare tok 7 minutter! Jeg trodde det ville ta 7 timer, og det var 60 ganger raskere enn jeg forventet! Det er litt synd at hash-verdien ikke ble sprengt. Det ser ut til at "werner123456!!!" ikke er i passordboken. Det ser ut til at jeg må forberede en 100G passordbok, men det er veldig upraktisk å lagre og overføre en så stor ordbok. Er det ingen annen måte? Selvfølgelig, husk angrepsmodusen? Vi har brukt "Straight"-modusen. La oss deretter studere flere andre moduser.
7. Oppsummering
Når du bruker hashcat til å eksplodere hash, er det første å finne den nøyaktige hash. Ulike systemer og forskjellig programvare har forskjellige plasseringer for å lagre hash, så du må finne ut hash-verdien nøyaktig. Den andre er å bedømme hash-typen riktig, avgjøre om hashcat støtter denne typen hash, og velge riktig-m-parameter, ellers er det nesten umulig å lykkes; Den tredje er at passordordboken bør være bedre Hvorvidt eksplosjonen kan lykkes til slutt, avhenger av ordboken. Selv om en større passordbok ikke er bedre, er det fortsatt bedre å være større. hashcat er også kjent for sin hastighet. Store ordbøker er ikke et problem for hashcat. Her er en bedre ordbok registrert: Tidligere lekkasjeporter + vanlig sett med svake passordordbøker. 7Z , dekomprimeringspassordet er: anywlan. I tillegg, hvis du samler mange små ordbøker, kan du slå sammen, sortere og deduplisere de små ordbøkene for å få en stor ordbok for Hashcat-eksplosjon. Hvis de små ordbøkene er i samme katalog, kan du gjøre det ved å bruke én kommando:
cat * | sort | uniq > Merge.dic
Hva om små ordbøker er organisert etter kategorier og distribuert i flerlagskataloger? Det er åpenbart ikke mulig å bare bruke kattekommandoen, men faktisk er det bare én kommando. Forutsatt at alle små ordbøker er lagret i katalogen MyDictionary, kan kommandoen skrives slik:
find . /MyDictionary -type f -exec cat {} \; | sorter | uniq > Merge.dic