Hur man använder hashcat programvara för att knäcka olika hashes.

Noll, bakgrundskunskap

1. Hash-funktion

Hash-funktion är en allmän term för en typ av funktion. Ingången till denna typ av funktion är godtycklig binär data, och utdata är binär data med fast längd, denna typ av funktion har följande egenskaper:

  • Enriktad: Det är enkelt och snabbt att beräkna utdata från ingången, men det är matematiskt omöjligt att härleda ingången från utdata

  • Kollisionsbegränsning: Det är extremt svårt att hitta två olika ingångar med samma utdata

Funktioner som uppfyller dessa egenskaper kan kallas hashfunktioner. En viss data används som ingång i en hash-funktion för att beräkna utmatningen. Det är vanligt att kalla denna utdata för datans hash-värde.

En av de viktigaste funktionerna för hash-funktionen är att lagra lösenordet på ett säkert sätt. Det sparar inte lösenordet direkt (det vill säga det lagrar inte lösenordet i vanlig text), utan sparar lösenordets hash-värde. Under verifiering behöver du bara beräkna det inmatade lösenordet igen. Jämför hash-värdet med hash-värdet för det sparade lösenordet för att veta om lösenordet är korrekt. På grund av hash-funktionens enriktade karaktär och kollisionsbegränsningarna är det svårt för angriparen att känna lösenordet själv även om han får lösenordets hash-värde.

2.hashcat

Angriparen har fått hash-värdet för lösenordet. Finns det verkligen inget sätt att veta själva lösenordet? Naturligtvis inte Även om det är matematiskt omöjligt att direkt beräkna lösenordet från lösenordets hash-värde, vet vi att hash-funktionen är enkel och snabb att beräkna utdata från ingången. I värsta fall kan du prova lösenorden som människor kan ställa in är de enda, prova dem ett efter ett, du kan fortfarande prova dem om du har tur. Operationen att kontinuerligt försöka få ingången som motsvarar hash-värdet kallas sprängning.

Baserat på denna idé kom hashcat till. Det sägs att hashcat föddes för att bevisa att det är väldigt enkelt att spränga hash. hashcat påstår sig vara världens snabbaste hashblastverktyg, och det stöder till och med GPU och FGPA, om du har någon.


hashcat är inte bara snabb, utan stöder också mer än tvåhundra hash-funktioner professionellt Använd kommandot:

 hashcat   - -help 

Du kan se listan över alla hash-funktioner som stöds av hashcat. Det finns för många och jag kommer inte att lägga upp dem här.

hashcat är installerad som standard i Kali och kan användas direkt. Men min Kali är installerad i VirtualBox och jag känner alltid att den virtuella maskinen är långsammare, så jag vill använda hashcat i den fysiska värden. Gå först till Hashchats officiella webbplats för att ladda ner hashcat. Från och med nu är den senaste versionen v3.5.0, som släpptes 2017.04.05. Från uppdateringsdatumet kan man se att hashchat är full av vitalitet. Undvik besväret med att kompilera och ladda ner det binära paketet direkt, som bara är 2,7 miljoner, vilket är väldigt litet jämfört med spel som ofta väger dussintals gigabyte.

Efter att nedladdningen är klar, packa ut hashcat och se:

Sådana filer är 32-bitars och 64-bitars körbara filer i linux och windows, välj bara en av dem enligt din dators situation. Jag valde hashcat64.bin För skönhetens skull lägger jag till en rad i ~ /. bashrc-filen:

 alias   hashcat = ' sökvägen till hashcat64.bin ' 

Efter att ha sparat öppnar du den virtuella terminalen igen för att få ~ /. bashrc-filen att träda i kraft. På så sätt, oavsett var du är, kan du bara ange hashcat-kommandot direkt utan att byta kataloger eller ange det fula "64.bin", som visas i bilden nedan.

Okej, nu kan du börja spränga olika hash med hashcat.

1. Sprängning md5

md5 borde vara en av de mest kända och mest använda hash-funktionerna. Använd först Python för att generera flera MD5-värden för sprängning. Koden är som följer:

     import   hashlib. 
    Lösenord   =   [' 123123 ',   ' bond007 ',   ' xxxxxx ',   ' *H@ & (NT*@BR#^ '] 
    för   lösenord   i   lösenord: 
        md5   =   hashlib.md5 () 
        md5.update (lösenord) 
        print   md5.hexdigest () 

Ovanstående kod beräknar hashvärdena för de fyra strängarna respektive, och utdataresultatet är:

     4297f44b13955235245b2497399d7a93 
    cbdb7e2b1ed566ceb796af2df07205a3 
    dad3a37aa9d50688b5157698acfd7aee 
    d77db958c179bbffae04b2b908b75c26 

Spara utdataresultatet i filen md5.hash, ett hahs-värde per rad. Använd sedan hashcat för att spränga dessa hash-värden, kommandot är följande:

     hashcat   -w   3   -a   0   -m   0   - -remove   -o   md5.out   md5.hash   wordlist.dic 

Parametern-w används för att ange arbetslägen, det finns fyra, som visas i tabellen nedan:

N Prestanda Runtime Strömförbrukning Desktop Impact
1 Låg 2 ms låg Minimal
2 standard 12 ms ekonomisk märkbar
3 hög 96 ms hög svarslös
4 mardröm 480 ms galen huvudlös

Parameter-a används för att ange attackläget, betydelsen av 0 är direkt och kontinuerlig, det vill säga sprängning med lösenordsordbok, det finns fem värden för-a, som visas i tabellen nedan:

N läge
0 rak
1 kombination
3 Brute-force
6 Hybrid Wordlist + Mask
7 Hybrid Mask + Wordlist

-m Används för att ange hashen som ska sprängas Hash-funktionen för värdet, 0 betyder att hash-funktionen är md5, och de andra värdena visas i följande tabell:

N namn kategori
0 MD5 Raw Hash
300 MySQL4.1/MySQL5 databasserver
1000 NTLM Operativsystem
1800 sha512crypt $6$, SHA512 (Unix) Operativsystem
2611 vBulletin < v3.8.5 Forum, CMS, e-handel, ramverk

Detta Tabellen är för lång. Jag visar bara några hash-funktioner som är involverade i den här artikeln. Du kan se dem alla med parametern – hjälp. Betydelsen av

parameter – ta bort är att om ett visst hash-värde sprängs framgångsrikt, ta bort värdet från md5.hash.

Parameter-o följs av ett filnamn som anger var sprängningsresultaten sparas.

De två sista parametrarna md5.hash och wordlist.dic är hashvärdet respektive lösenordsordboken som ska sprängas. Hashvärdet och lösenordsordboken är båda en per rad. Innehållet i md5.hash har beräknats av Python Om du inte har en lämplig lösenordsordbok till hands kan du använda kommandot:

     wget   -O   wordlist.dic   https://samsclass.info/123/proj10/500_passwords.txt

下载一个。现在完事具备,按下回车,结果华丽地报错:(

  clGetPlatformIDs(): CL_PLATFORM_NOT_FOUND_KHR

Det saknas förmodligen någon körmiljö, så installera den. Jag har installerat dessa saker 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 

Om internethastigheten är bra kommer den att installeras på kort tid. Det första kommandot rapporterar ett fel:

     /sbin/ldconfig.real:   /usr/lib/nvidia-375/libEGL.so.1   är   inte   en   symbolisk   länk 
    /sbin/ldconfig.real:   /usr/lib32/nvidia-375/libEGL.so.1   är   inte   en   symbolisk   länk 

Men det verkar inte påverka någonting, ignorera det bara. Efter att ha installerat dessa tryckte jag på Enter igen och körde det ursprungliga felkommandot. Jag fann att det inte fanns något fel igen, och exekveringen slutfördes på ett ögonblick. Efter att kommandot har exekverats, kontrollera innehållet i filerna md5.hash och md5.out och upptäcka att det bara finns en hash kvar i md5.hash. De tre hash som sprängdes framgångsrikt har överförts till filen md5.out Det finns tre hash-värden och deras ursprungliga värden, som visas i figuren nedan:

2. Sprängning av Windows 7 inloggningslösenord hash

Hash-värdet för Windows inloggningslösenord sparas i SAM-filen, SAM är förkortningen för "security account manager". Vanligtvis finns den i

     C: \Windows\system32\config\SAM 

SAM-filen är skyddad av Windows och kan inte läsas direkt med hjälp av verktyg som SAMInside. Hitta en virtuell Windows 7-maskin, skapa en ny administratörsanvändare som heter hashcat, ställ in ett lösenord, ladda ner och packa ut SAMInside i Windows 7, kör det med administratörsbehörigheter och klicka sedan på File- > Importera lokala användare vis Scheduler, som visas nedan Som visas i bilden:

Efter det kan SAMInside "inte svara", men det spelar ingen roll, vänta tålmodigt i några sekunder, SAMInside lever upp till förväntningarna och läser ut vad vi vill ha hash, som visas i bilden nedan:

Välj användaren "hashcat" som vi vill spränga lösenordet, tryck på Ctrl +5 för att kopiera NT-hash, gå sedan tillbaka till Ubuntu med hashcat installerat, använd följande kommando för att spara det kopierade hash-värdet till filen win7.hash:

     echo   356CEAE0C89FB65ED6D6AA7A445C4CE5   {> 
     hashcat   -w   3   -a   0   -m   1000   - -remove   -o   win7.out   win7.hash   wordlist.dic 

Exekveringen slutfördes efter ett tag. Jag kontrollerade win7.out-filen och fann att sprängningen var framgångsrik. Användarens hashcat-inloggningslösenord är rush2112:

     werner@Yasser: ~ /hashcat$   cat   win7.out 
    356ceae0c89fb65ed6d6aa7a445c4ce5:rush2112 

Hur man får SAM-filen, se "Hur man exporterar Windows Hash Series 1". Följande är processen att läsa SAM-filen i den virtuella maskinen Windows 7.

Om det är en fysisk maskin, använd Win PE för att starta maskinen och läs SAM-filen på disken. Min är en virtuell maskin. Du kan läsa filerna på den virtuella disken genom att montera den virtuella diskfilen i filsystemet. Den virtuella maskinen jag använder är VirtualBox, som kan göras med kommandot vdfuse. Om du inte har vdfuse måste du installera virtualbox-fuse först:

     sudo   apt-get   install   virtualbox-fuse 

Du kan också ladda ner installationspaketet för virtualbox-fuse och installera det själv.

Efter att installationen är klar finns kommandot vdfuse, som kan starta virtuell diskmappning och montering:

     mkdir   -p   ~ /vmdisk 
    sudo   vdfuse   -t   vmdk   -f   Win7Pro32.vmdk   ~ /vmdisk/ 

Efter att ha utfört detta steg, kontrollera ~ /vmdisk-katalogen, som har tre filer: entire disk, Partition1 och Partition2, ny katalog:

     mkdir   -p   ~ /vmdisk_en 
    mkdir   -p   ~ /vmdisk_1 
    mkdir   -p   ~ /vmdisk_2 

Använd kommandot mount för att montera de tre filerna entire disk, Partition1 respektive Partition2:

     sudo   mount   ~ /vmdisk/entire disk       ~ /vmdisk_en 
    sudo   mount   ~ /vmdisk/Partition1       ~ /vmdisk_1 
    sudo   mount   ~ /vmdisk/Partition2       ~ /vmdisk_2 

upptäckte att monteringen av hela disken misslyckades, innehållet i Partition1 var inte vad jag ville ha, Partition2 var filen i den virtuella maskinen Windows 7, precis vad jag ville ha. Kopiera vår mål-SAM-fil från vmdisk_fs:

     cp   ~ /vmdisk_2/Windows/System32/config/SAM  . / 

Förresten, kopiera systemfilen också:

     cp   ~ /vmdisk_2/Windows/System32/config/SYSTEM  . / 

Kontrollera innehållet i SAM-filen, som visas i bilden nedan, är det inte en vanlig textfil, det är verkligen Windows-stilen,

Tja, även om SAM-filen öppnades framgångsrikt, får vi fortfarande inte hash. Vad ska vi göra om vi ändrar den härnäst? Du kan bara använda verktyget för att analysera innehållet i SAM-filen. Lägg in både sam-filen och systemfilen i Kali och kör kommandot:

     samdump2   -o   sam.hash   SYSTEM   sam 

Kontrollera sedan sam.hash, och du kan också se hash-värdet för varje användares inloggningslösenord. Varje rad i sam.hash-filen är en användare, och formatet för varje rad är:

     Användarnamn: RID:lm-hash-värde: ntlm-hash-värde 

Observera att detta format är samdump2-kommandoutdataformatet, inte "hash-lösenordsformatet under Windows".

3. Explodera Linux-inloggningslösenordet hash

Först måste du ha en dator som kör Linux-systemet. Detta är lätt att säga, bara en virtuell maskin räcker. Kör sedan följande kommando för att lägga till en ny användare och ställa in ett lösenord för vår sprängning:

     sudo   adduser   justforfun 

Hash-värdet för användarens inloggningslösenord i linux lagras i filen/etc/shadow (Obs: inte/etc/passwd Använd följande kommando för att se hash-värdet för den nya användarens inloggningslösenord:

 test@test-VirtualBox: ~ $   sudo   tail   -n   1   /etc/shadow 
justforfun:$6$0fokwg59$6hpMS5dM9wDT/42DDoSD0i0g/wHab50Xs9iEvVLC3V20yf1kRmXZHGXCM0Efv6XU69hdgMZ4FwaMzso4hQaGQ0:17373:0:99999:7::: 

tail Kommandot används för att läsa de sista raderna i en fil, standarden är 10 rader, och antalet rader anges med parametern-n. Användaren vi just skapade är naturligtvis på sista raden, så vi använder tail-n 1 för att läsa den. Resultatet av läsning är uppdelad med ":" Den första delen är användarnamnet "justforfun", den andra delen är lösenordets hash-värde, och de andra delarna behöver inte bry sig om i den här artikeln. Vi fokuserar på den andra delen.

"$6$" som börjar med

betyder att typen av hash-funktionen som används är SHA-512. Förutom "$6$", i linux, syftar "$1$" på MD5, "$2a$" syftar på Blowfish, "$2y$" syftar på Blowfish (korrekt hantering av 8-bitars tecken), "$5$" Syftar på SHA-256, se Wikipedia för detaljer: passwd. Dessutom beskriver filen/etc/login.defs också hash-algoritmen.

Sektionen "0fokwg59" från början av "$6$" till nästa "$" är SALT. Vad är salt? Baidu vet att CNB2009s svar på frågan " Vad är MD5-saltvärdet " är enkelt och lätt att förstå:

Enkelt uttryckt är det ett sätt att få samma lösenord att ha olika hash-värden, är saltning. MD5 i sig är irreversibelt, men det finns för närvarande många databaser på Internet som stöder anti-fråga. Om användarlösenordsdatabasen av misstag läcker, kan hackare få användarlösenordet genom anti-fråga, eller använda hashkoder som förekommer oftare i databasen (dvs. används av många människor) för brute force cracking (eftersom det vanligtvis är ett svagt lösenord). Saltvärdet är ett extra slumpmässigt värde som läggs till under lösenordshashprocessen. Till exempel är mitt id och lösenordet är 123456. När det lagras i databasen kan jag hasha strängen "123456/epilepsi". och när du verifierar lösenordet används också strängen "(lösenordet som ska verifieras) /epilepsi omvänd ④" för verifiering. På så sätt, när ett annat idiotlösenord är 123456, kan olika hash-värden fortfarande konstrueras och verifieras framgångsrikt. Vid denna tidpunkt används mitt id som ett saltvärde för att utföra komplex hash för lösenordet. Så vad?. Rollen av saltvärdet är att minska förlusten som orsakas av databasläckage. Om din RP är mycket bra och du gissar mitt lösenord är 123456, kan jag inte stoppa dig

Detta svar är för md5, och samma sak gäller för andra hash-funktioner. Delen efter saltet är hash-värdet. Kopiera nu hela den andra delen till filen linux.hash, innehållet i linux.hash ska vara:

   $6$0fokwg59$6hpMS5dM9wDT/42DDoSD0i0g/wHab50Xs9iEvVLC3V20yf1kRmXZHGXCM0Efv6XU69hdgMZ4FwaMzso4hQaGQ0 

Spränge sedan Linux-inloggningslösenordet hash med följande kommando:

     hashcat   -w   3   -a   0   -m   1800   - -remove   -o   linux.out   linux.hash   wordlist.dic 

Efter ett ögonblick är sprängningen klar, se resultatet:

 werner@Yasser: ~ /hashcat$   cat   linux.out 
$6$0fokwg59$6hpMS5dM9wDT/42DDoSD0i0g/wHab50Xs9iEvVLC3V20yf1kRmXZHGXCM0Efv6XU69hdgMZ4FwaMzso4hQaGQ0:4321 

Det kan ses att sprängningen var framgångsrik.

4. Explodera MySQL-inloggningslösenord hash

Först måste du ha Mysql. Det råkar vara i min virtuella maskin. Baidu kan veta att hash-värdet för MySQL-inloggningslösenordet sparas i filen user.MYD. Var är filen user.MYD? Jag vet inte heller, bara leta efter:

     test@test-VirtualBox: ~ $   sudo   find   /   -name   user.MYD 
    /var/lib/mysql/mysql/user.MYD 

hittade den i/var/lib/mysql/mysql/user.MYD Se innehållet i filen:

     sudo   cat   /var/lib/mysql/mysql/user.MYD 

Det är inte en vanlig textfil, så det har lite att göra med det. Du kan fortfarande se att hash-värdet för användarens rootinloggningslösenord är:

     6B825255FB466413D6B1B724644E23428C94BBCB 

Spara detta värde till filen mysql.hash, använd följande kommando för att spränga hash för MySQL-inloggningslösenordet:

     hashcat   -w { 

Efter ett ögonblick är sprängningen klar, se resultatet:

     werner@Yasser: ~ /hashcat$   cat   mysql.out 
    6b825255fb466413d6b1b724644e23428c94bbcb:viper 

Det kan ses att sprängningen lyckades.

5. Explosion Discuz! Forum lösenord

Discuz! Det är ett välkänt PHP-forumprogram i Kina och används mycket. Låt oss nu spränga Discuz! Hash-värdet för användarlösenordet. Först måste du hitta hash-värdet. Var kan du hitta det? Från Discuz förstås! i databasen.

kan Discuz! Var är databasen? Så här löste jag det, ladda ner den senaste versionen av Discuz från dess officiella hemsida! Källkoden, kör och installera den, och du får Discuz! Databas :smile:

Discuz! Standarddatabasnamnet är ultrax, och tabellen pre_ucenter_members lagrar hash-värdet för inloggningslösenordet "pre_" är standardprefixet och kan ändras under installationen, men "ucenter_members" kommer inte att ändras. Använd följande SQL-sats för att fråga hash-värdet för inloggningslösenordet:

     välj   lösenord, salt   från   pre_ucenter_members; 

Spara hash-och saltvärden till filen:

     echo   69bcba126b93c6f397983629a0f70553:c13fd9   >   discuz.hash 

Hash-värdet och saltvärdet är i samma rad, delat med ":". Använd slutligen följande kommando för att spränga Discuz-inloggningslösenordet hash:

     hashcat   -w   3   -a   0   -m   2611   - -ta bort   -o   discuz.out   discuz.hash   wordlist.dic 

Efter ett ögonblick är sprängningen klar, se resultatet:

     werner@Yasser: ~ /hashcat$   cat   discuz.out 
    69bcba126b93c6f397983629a0f70553:c13fd9:winter 

Det kan ses att sprängningen lyckades.

6. Stort ordbokstest

Från och med nu använder vi en liten ordbok med bara 500 ord. Det tar bara ett ögonblick varje gång att framgångsrikt spränga alla typer av hash. Tycker du inte att det är konstigt? Detta beror på att jag medvetet ställde in ett svagt lösenord i ordboken för att öva på att använda hashcat, annars skulle det inte vara dåligt att det inte kunde sprängas ut. Det är omöjligt att ha så bra tur i praktiken. Låt oss slumpmässigt beräkna MD5-värdet för ett mindre svagt lösenord, spränga det med en stor ordbok, prova tur å ena sidan och se hur snabbt hashcat kan vara å andra sidan.

Beräkna först MD5-värdet:

     import   hashlib 
    md5   =   hashlib.md5 () 
    md5.update (" werner123456!!! ") 
    print   md5.hexdigest () 

Utdata är:

     b17133f9abff287ed0546c1af2b171f7 

Välj sedan en 10,5G-storlek ordbok som innehåller 940 miljoner lösenord och börja spränga:

     hashcat   -w   3   -a   0   -m   0   - -ta bort   -o   big.out   b17133f9abff287ed0546c1af2b171f7   big.dic 

Observera att när det bara finns ett hash-värde behöver du inte spara det i filen, du kan också skriva det direkt i kommandoradsparametrarna. Började spränga innan jag gick och la mig, vaknade nästa dag för att titta på resultaten och hittade:

     Började:   Ons   Jul   26   22:55:27   2017 
    Stopped:   ons   Jul   26   23:02:28   2017 

Det visade sig att det bara tog 7 minuter! Jag trodde att det skulle ta 7 timmar och det var 60 gånger snabbare än jag förväntade mig! Det är lite synd att hash-värdet inte sprängdes framgångsrikt. Det verkar som att "werner123456!!!" inte finns i lösenordsordboken. Det verkar som att jag behöver förbereda en 100G lösenordsordbok, men det är väldigt obekvämt att spara och överföra en så stor ordbok. Finns det inget annat sätt? Självklart, kom ihåg attackläget? Vi har använt "rakt"-läget. Låt oss sedan titta på flera andra lägen.

7. Sammanfattning

När du använder hashcat för att spränga hash, är det första att hitta den korrekta hash Olika system och olika programvara har olika platser för att lagra hash, så du måste hitta hash-värdet exakt. Det andra är att korrekt bedöma hash-typen, avgöra om hashcat stöder denna hash och välja rätt-m-parameter, annars är det nästan omöjligt att lyckas; Den tredje är att lösenordsordboken ska vara bättre. Huruvida explosionen kan lyckas i slutändan beror på att titta på ordboken. Även om en större lösenordsordbok inte är bättre, är det fortfarande bättre att vara större. hashcat är också känd för sin hastighet, och stora ordböcker är inte ett problem för hashcat. Här är en bättre ordbok: tidigare läckagördar + vanligt använd svag lösenordsordbok samling.7Z , dekomprimeringslösenordet är: anywlan. Dessutom, om du samlar in många små ordböcker, kan du slå samman, sortera och deduplicera de små ordböckerna för att få en stor ordbok för hashcat-sprängning. Om den lilla ordboken är i samma katalog kan du göra det med ett kommando:

         cat   *   |   sortera   |   uniq   >   Merge.dic 

Tänk om den lilla ordboken är organiserad efter kategori och distribuerad i en katalog med flera lager? Det är uppenbarligen inte möjligt att bara använda kattkommandot, men i själva verket behövs bara ett kommando Om man antar att alla små ordböcker är lagrade i katalogen MyDictionary, kan kommandot skrivas så här:

         hitta  . /MyDictionary   -type   f   -exec   cat   {}   \;   |   sortera   |   uniq   >   Merge.dic 

Föregående:Vilka typer av krypterade filer kan Dokument Password Recovery Master dekryptera? Följande är de filformat det stöder för sprickning:
Nästa:Flera angreppslägen i hashcat.
  • Fokusera på Word, Excel, PPT, PDF, RAR, ZIP, 7Z, komprimerade paket, Office krypterade filer upplåsning och dekryptering
  • Vi förser användare med högkvalitativ filkomprimerad paket lösenordsåterställning, PDF-upplåsning Word lösenordsåterställning
  • Upphovsrätt © Dokumentlösenordsåterställningsmästare Dekrypteringsplattform online