hash funkce je obecný termín pro typ funkce Vstupem tohoto typu funkce jsou libovolná binární data a výstupem jsou binární data s pevnou délkou, tento typ funkce má následující charakteristiky:
Jednosměrnost: Je jednoduché a rychlé vypočítat výstup ze vstupu, ale není matematicky proveditelné odvodit vstup z výstupu
Omezení kolize: Je extrémně obtížné najít dva různé vstupy se stejným výstupem
Funkce, které splňují tyto charakteristiky, lze nazvat hash funkce. Použijte určitá data jako vstup hash funkce a vypočítejte výstup Tento výstup se obvykle nazývá hash hodnota dat.
Jednou z hlavních funkcí funkce hash je bezpečné ukládání hesla. Místo ukládání hesla přímo (to znamená, že neukládá heslo v prostém textu), ukládá hodnotu hash hesla. Během ověřování stačí znovu vypočítat zadané heslo Porovnáním hodnoty hash s hodnotou hash uloženého hesla můžete zjistit, zda je heslo správné. Vzhledem k jednosměrnosti funkce hash a charakteristikám omezení kolize je pro útočníka obtížné znát samotné heslo, i když získá hodnotu hash hesla.
Útočník získal hash hodnotu hesla. Opravdu neexistuje způsob, jak znát samotné heslo? Samozřejmě, že ne. Přestože je matematicky nemožné přímo vypočítat samotné heslo z jeho hash hodnoty, víme, že hash funkce je jednoduchá a rychlá pro výpočet výstupu ze vstupu. V nejhorším případě to můžete zkusit. Jediné heslo, které mohou lidé nastavit, jsou ty, zkuste to jedno po druhém, pokud budete mít štěstí, můžete to stále zkusit. Operace neustálého pokusu o získání vstupu odpovídajícího hodnotě hash se nazývá tryskání.
Na základě této myšlenky vznikl hashcat Říká se, že hashcat se zrodil, aby dokázal, že explodovat hash je velmi jednoduchá záležitost. hashcat tvrdí, že je nejrychlejším nástrojem na světě pro hash blasting, a dokonce podporuje GPU a FGPA, pokud máte.
hashcat je nejen rychlý, ale také profesionálně podporuje více než dvě stě hash funkcí Pomocí příkazů:
hashcat - -help
Můžete vidět seznam všech hash funkcí podporovaných hashcatem, je jich příliš mnoho, nebudu je zde zveřejňovat.
hashcat je ve výchozím nastavení nainstalován v Kali a lze jej použít přímo. Ale můj Kali je nainstalován ve virtuálním boxu a vždy mám pocit, že virtuální stroj je pomalejší, takže chci používat hashcat ve fyzickém hostiteli. Nejprve přejděte na oficiální webové stránky hashchatu a stáhněte si hashcat. Nejnovější verze je zatím v3.5.0, která byla vydána 05.04.2017. Z data aktualizace je vidět, že hashchat je plný vitality. Unikněte potíže s kompilací a přímo si stáhněte binární balíček, který má pouze 2,7 milionu, což je velmi malé ve srovnání s hrami, které často stojí desítky gigabytů.
Po dokončení stahování rozbalte hashcat a uvidíte:
Takové soubory jsou spustitelné soubory v Linuxu a windows pod 32bitovým a 64bitovým systémem. Stačí vybrat jeden z nich podle situace vašeho počítače. Zvolil jsem hashcat64.bin Pro krásu jsem do souboru ~ /. bashrc přidal řádek:
alias hashcat = ' cesta k hashcat64.bin '
Po uložení znovu otevřete virtuální terminál, aby byl soubor ~ /. bashrc účinný. Tímto způsobem, bez ohledu na to, kde se nacházíte, stačí přímo zadat příkaz hashcat bez přepínání adresářů nebo zadávání ošklivého "64.bin", jak je znázorněno na obrázku níže.
Dobře, nyní můžete začít používat hashcat k odstřelování různých hashů.
MD5 by měl být jednou z nejznámějších a nejrozšířenějších hash funkcí. Nejprve použijte Python k vygenerování několika hodnot MD5 pro tryskání. Kód je následující:
import hashlib. Hesla = [' 123123 ', ' bond007 ', ' xxxxxx ', ' *H@ & (NT*@BR#^ '] pro heslo v hesla: MD5 = hashlib.MD5 () MD5.update (heslo) print MD5.hexdigest ()
Výše uvedený kód vypočítá hodnoty hash čtyř řetězců a výstupní výsledek je:
4297f44b13955235245b2497399d7a93 cbdb7e2b1ed566ceb796af2df07205a3 dad3a37aa9d50688b5157698acfd7aee d77db958c179bbffae04b2b908b75c26
Uložte výstup do souboru MD5.hash s jednou hodnotou hahs na řádek. Poté použijte hashcat k odstranění těchto hodnot hash. Příkaz je následující:
hashcat -w 3 -a 0 -m 0 - -odstranit -o MD5.out MD5.hash wordlist.dic
Parametr-w se používá k určení pracovních režimů. Existují čtyři, jak je uvedeno v následující tabulce:
| N | Výkon | Doba běhu | Spotřeba energie | Dopad na plochu |
|---|---|---|---|---|
| 1 | Nízký | 2 ms | nízká | minimální |
| 2 | výchozí | 12 ms | ekonomická | patrná |
| 3 | vysoká | 96 ms | vysoká | nereaguje |
| 4 | noční můra | 480 ms | šílený | bez hlavy |
Parametr-a se používá ke specifikaci režimu útoku Význam 0 je přímý a spojitý, to znamená, že se používá slovník hesel k vybuchnutí. Existuje pět hodnot-a, jak je uvedeno v následující tabulce:
| N | režim |
|---|---|
| 0 | rovný |
| 1 | kombinace |
| 3 | hrubá síla |
| 6 | Hybridní seznam slov + maska |
| 7 | Hybridní maska + seznam slov |
-m Používá se k určení hash, který má být odpálen hash funkce hodnoty, 0 znamená, že hash funkce je MD5, ostatní hodnoty jsou uvedeny v následující tabulce:
| N | název | kategorie |
|---|---|---|
| 0 | MD5 | Raw Hash |
| 300 | MySQL4.1/MySQL5 | Databázový Server |
| 1000 | NTLM | Operační systémy |
| 1800 | sha512crypt $6$, SHA512 (Unix) | Operační systémy |
| 2611 | vBulletin < v3.8.5 | Fóra, CMS, E-Commerce, Frameworks |
Tato tabulka je příliš dlouhá. Ukážu pouze několik funkcí hash uvedených v tomto článku. Všechny můžete vidět pomocí parametru-nápověda.
Parametr – odebrat znamená, že pokud je hodnota hash úspěšně odstraněna, hodnota bude odstraněna z MD5.hash.
Za parametrem-o následuje název souboru, který označuje místo, kde jsou uloženy výsledky otryskání.
Poslední dva parametry MD5.hash a wordlist.dic jsou hodnota hash a slovník hesel, které mají být vybuchnuty. Hodnota hash a slovník hesel jsou oba jeden na řádku. Obsah v MD5.hash byl vypočítán Pythonem Pokud nemáte po ruce vhodný slovník hesel, můžete použít příkaz:
wget -O wordlist. dic https://samsclass.info/123/proj10/500_passwords.txt
下载一个。现在完事具备,按下回车,结果华丽地报错:(
clGetPlatformIDs(): CL_PLATFORM_NOT_FOUND_KHR
Pravděpodobně chybí nějaké běžící prostředí, tak jej nainstalujte. Celkem jsem nainstaloval tyto věci:
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
Pokud je rychlost sítě dobrá, bude po krátké době nainstalována První příkaz hlásí chybu:
/sbin/ldconfig.real: /usr/lib/nvidia-375/libEGL.so.1 je není a symbolický odkaz /sbin/ldconfig.real: /usr/lib32/nvidia-375/libEGL.so.1 je není a symbolický odkaz
Ale zdá se, že to nic neovlivňuje, prostě to ignorujte. Po instalaci znovu stiskněte stisknutí Enter a spusťte příkaz, který původně hlásil chybu. Zjistíte, že žádná chyba nebyla znovu hlášena a provedení bylo dokončeno v mžiku. Po provedení příkazu zkontrolujte obsah souborů MD5.hash a MD5.out a zjistěte, že v MD5.hash zbývá pouze jeden hash. Tři úspěšně vybuchnuté hash byly přeneseny do souboru MD5.out. MD5.out jsou tři hodnoty hash a jejich původní hodnoty, jak je znázorněno na obrázku níže:
Hodnota hash přihlašovacího hesla Windows je uložena v souboru SAM, SAM je zkratka „security account manager ". Obvykle se nachází v
C: \Windows\system32\config\SAM
Soubor SAM je chráněn systémem Windows a nelze jej přímo číst. Je třeba použít nástroj, jako je SAMInside. Najděte virtuální stroj Windows 7, vytvořte nového uživatele správce jménem hashcat, nastavte heslo, stáhněte a rozbalte SAMInside ve Windows 7 a spustte jej s oprávněním správce, poté klikněte na Soubor- > Importovat místní uživatele do plánovače, jak je znázorněno níže Jak je znázorněno na obrázku:
Poté SAMInside může „nereagovat ", ale na tom nezáleží, trpělivě počkejte pár sekund a SAMInside si přečte, co chceme, podle očekávání, jak je znázorněno na obrázku níže:
Vyberte uživatele" hashcat ", jehož heslo chceme vybuchnout, stiskněte Ctrl +5 zkopírujte NT-hash, poté se vraťte do Ubuntu s nainstalovaným hashcatem a použijte následující příkaz k uložení zkopírované hodnoty hash do souboru win7.hash:
echo 356CEAE0C89FB65ED6D6AA7A445C4CE5 > win7.hash
356ceae0c89fb65ed6d6aa7a445c4ce5: rush2112
Jak získat soubor SAM, naleznete v části „Jak exportovat Windows Hash Series One ". Níže je zaznamenán proces čtení souboru SAM ve virtuálním stroji Windows 7.
Pokud se jedná o fyzický stroj, spusťte stroj pomocí Win PE a přečtěte si soubor SAM na disku. Můj je virtuální stroj. Připojením souborů virtuálního disku do souborového systému můžete číst soubory na virtuálním disku. Virtuální stroj, který používám, je VirtualBox, který lze provést pomocí příkazu vdfuse. Pokud nemáte vdfuse, musíte nejprve nainstalovat virtualbox-fuse:
sudo apt-get install virtualbox-fuse
Můžete si také stáhnout instalační balíček virtualbox-fuse a nainstalovat si ho sami.
Po dokončení instalace je k dispozici příkaz vdfuse, který může spustit mapování a montáž virtuálního disku:
mkdir -p ~ /vmdisk sudo vdfuse -t vmdk -f Win7Pro32.vmdk ~ /vmdisk/
Po provedení tohoto kroku zkontrolujte adresář ~ /vmdisk, v němž jsou tři soubory: EntireDisk, Partition1 a Partition2, nový adresář:
mkdir -p ~ /vmdisk_en mkdir -p ~ /vmdisk_1 mkdir -p ~ /vmdisk_2
Pomocí příkazu mount připojte tři soubory EntireDisk, Partition1 a Partition2:
sudo mount ~ /vmdisk/EntireDisk ~ /vmdisk_en sudo mount ~ /vmdisk/Partition1 ~ /vmdisk_1 sudo mount ~ /vmdisk/Partition2 ~ /vmdisk_2
Bylo zjištěno, že montáž celého disku se nezdařila, obsah v Partition1 nebyl to, co jsem chtěl, Partition2 byl soubor ve virtuálním stroji Windows 7, přesně to, co jsem chtěl. Zkopírujte náš cílový soubor SAM z vmdisk_fs:
cp ~ /vmdisk_2/Windows/System32/config/SAM . /
Mimochodem, zkopírujte také systémový soubor:
cp ~ /vmdisk_2/Windows/System32/config/SYSTEM . /
Podívejte se na obsah souboru SAM, jak je znázorněno na obrázku níže, není to prostý textový soubor, je to skutečně ve stylu Windows
No, i když soubor SAM byl úspěšně otevřen, stále jsme nedostali hash, co mám dělat, když ho dále změním? K analýze obsahu souboru SAM můžete použít pouze nástroje. Vložte soubor sam i systémový soubor do Kali a spusťte příkaz:
samdump2 -o sam.hash SYSTEM sam
Poté zkontrolujte sam.hash a můžete také vidět hodnotu hash přihlašovacího hesla každého uživatele. Každý řádek v souboru sam.hash je uživatel a formát každého řádku je:
Uživatelské jméno: RID:LM-hash value: NTLM-hash value
Všimněte si, že tento formát je výstupní formát příkazu samdump2, nikoli „formát hash hesla pod Windows ".
Nejprve musíte mít počítač se systémem linux. To je snadné říct, stačí virtuální stroj. Poté spusťte následující příkaz, abyste přidali nového uživatele a nastavili heslo pro naše exploze:
sudo adduser justforfun
Hodnota hash přihlašovacího hesla uživatele v Linuxu je uložena v souboru/etc/shadow (poznámka: ne/etc/passwd), použijte následující příkaz k zobrazení hodnoty hash přihlašovacího hesla nového uživatele:
test@test-VirtualBox: ~ $ sudo tail -n 1 /etc/shadow justforfun:$6$0fokwg59$6hpMS5dM9wDT/42DDoSD0i0g/wHab50Xs9iEvVLC3V20yf1kRmXZHGXCM0Efv6XU69hdgMZ4FwaMzso4hQaGQ0:17373:0:99999:7:::
Příkaz tail se používá k čtení posledních řádků souboru, výchozí je 10 řádků, zadejte počet řádků s parametrem-n. Uživatel, který jsme právě vytvořili, je přirozeně na posledním řádku, takže k čtení použijeme tail-n 1. Výsledkem čtení jsou data rozdělená na ":" První část je uživatelské jméno "justforfun", druhá část je hash hodnota hesla a ostatní části se v tomto článku nemusí starat. Zaměřujeme se na druhou část.
"$6$" na začátku znamená, že typ použité funkce hash je SHA512. Kromě "$6$" v Linuxu "$1$" znamená MD5, "$2a$" znamená Blowfish, "$2y$" odkazuje na Blowfish (správné zpracování 8bitových znaků), "$5$" Odkazuje na SHA256, podrobnosti viz Wikipedie: passwd. Kromě toho soubor/etc/login.defs také popisuje algoritmus hash.
Část "0fokwg59", která začíná "$6$" a předchází dalšímu "$", je sůl. Co je sůl? Baidu ví, že odpověď CNB2009 na otázku " Jaká je hodnota soli MD5 " je jednoduchá a snadno pochopitelná:
Jednoduše řečeno, je to způsob, jak udělat stejné heslo různé hodnoty hash, což je solení. MD5 sám o sobě je nevratný, ale v současné době existuje mnoho databází na internetu, které podporují reverzní dotazy. Pokud databáze uživatelských hesel omylem unikne, mohou hackeři získat uživatelské heslo prostřednictvím reverzního dotazu nebo použít hash kódy, které se často objevují v databázi (tj. používané mnoha lidmi) pro hrubou sílu (protože se obvykle jedná o slabé heslo). Hodnota soli je další náhodná hodnota přidaná během procesu hašování hesla. Například moje id je epilepsie a heslo je 123456. Když je uloženo v databázi, lze hašovat řetězec "123456/epilepsie". a při ověřování hesla se pro ověření používá také řetězec „ (heslo k ověření) /epilepsie ω inverse ④ ". Tímto způsobem, když je heslo dalšího idiota 123456, lze stále vytvořit různé hodnoty hash a úspěšně je ověřit. V tuto chvíli se moje id používá jako hodnota soli pro složité hash hesla. Tak co?. Úlohou hodnoty soli je snížit ztráty způsobené únikem databáze. Pokud máte velmi dobrý RP a uhodnete mé heslo 123456, nemohu vás zastavit
Tato odpověď je pro MD5 a totéž platí pro ostatní funkce hash. Část po soli je hodnota hash. Nyní zkopírujte celou druhou část do souboru linux.hash, obsah v linux.hash by měl být:
$6$0fokwg59$6hpMS5dM9wDT/42DDoSD0i0g/wHab50Xs9iEvVLC3V20yf1kRmXZHGXCM0Efv6XU69hdgMZ4FwaMzso4hQaGQ0
Poté použijte následující příkaz k vybuchnutí hash přihlašovacího hesla Linuxu:
hashcat -w 3 -a 0 -m 1800 - -odstranit -o linux.out linux.hash wordlist.dic
Po chvíli je trhání dokončeno, zobrazit výsledky:
werner@Yasser: ~ /hashcat$ cat linux.out $6$0fokwg59$6hpMS5dM9wDT/42DDoSD0i0g/wHab50Xs9iEvVLC3V20yf1kRmXZHGXCM0Efv6XU69hdgMZ4FwaMzso4hQaGQ0:4321
Je vidět, že tryskání bylo úspěšné.
Nejprve musíte mít Mysql. Právě to mám ve virtuálním stroji. Baidu ví, že hash hodnota přihlašovacího hesla Mysql je uložena v souboru user.MYD. Kde je soubor user.MYD? Taky nevím, jen to hledám:
test@test-VirtualBox: ~ $ sudo find / -name Uživatel.myd /var/lib/mysql/mysql/user.MYD
Našel jsem to v/var/lib/mysql/mysql/user.MYD Zkontrolujte obsah souboru:
sudo cat /var/lib/mysql/mysql/user.MYD
Není to prostý textový soubor, takže na tom moc nezáleží. Stále můžete vidět, že hodnota hash přihlašovacího hesla uživatele je:
6B825255FB466413D6B1B724644E23428C94BBCB
Uložte tuto hodnotu do souboru mysql. hash a použijte následující příkaz k odstranění přihlašovacího hesla mysql hash:
hashcat -w 3 -a 0 -m 300 - -odebrat -o mysql.out mysql.hash wordlist.dic
Po chvíli je tryskání dokončeno, podívejte se na výsledek:
werner@Yasser: ~ /hashcat$ cat mysql.out 6b825255fb466413d6b1b724644e23428c94bbcb: viper
Je vidět, že tryskání bylo úspěšné.
Discuz! Jedná se o známý program fóra php v mé zemi a je široce používán. Teď vybuchneme Discuz! hash hodnota uživatelského hesla. Nejprve musíte najít hodnotu hash. Kde ji najít? Samozřejmě od Discuz! v databázi.
Discuz! Kde je databáze? Takto jsem to vyřešil, stáhněte si nejnovější verzi Discuz z jeho oficiálních stránek! Zdrojový kód, spusťte a nainstalujte a získáte Discuz! Databáze
Discuz! Výchozí název databáze je ultrax a tabulka pre_ucenter_members ukládá hodnotu hash přihlašovacího hesla "pre_" je výchozí předpona, kterou lze změnit během instalace, ale "ucenter_members" se nezmění. Pro dotaz na hodnotu hash přihlašovacího hesla použijte následující příkaz sql:
select password,salt from pre_ucenter_members;
Uložte hodnotu hash a hodnotu soli do souboru:
echo 69bcba126b93c6f397983629a0f70553: c13fd9 > discuz.hash
Hodnota hash a hodnota soli jsou ve stejném řádku, rozdělené na ":". Nakonec použijte následující příkaz k rozbití hash přihlašovacího hesla Discuz:
hashcat -w 3 -a 0 -m 2611 - -odstranit -o discuz.out discuz.hash wordlist.dic
Po chvíli je trhání dokončeno, zobrazit výsledky:
werner@Yasser: ~ /hashcat$ cat discuz.out 69bcba126b93c6f397983629a0f70553: c13fd9:winter
Je vidět, že odstřelování bylo úspěšné.
Zatím používáme malý slovník s pouhými 500 slovy. Pokaždé to trvá jen chvíli, než úspěšně vybuchneme různé hashy. Není to divné? Je to proto, že jsem záměrně nastavil slabé heslo ve slovníku, abych si procvičil používání hashcatu, jinak by to nebylo špatné, kdybych to nemohl vybuchnout. V praxi není možné mít takové štěstí. Pojďme si náhodně vypočítat hodnotu MD5 méně slabého hesla, vybuchnout ho velkým slovníkem, na jedné straně zkusit štěstí a na druhé straně uvidět, jak rychle hashcat může být.
Nejprve vypočítejte hodnotu MD5:
import hashlib
MD5 = hashlib.MD5 ()
MD5.update (" werner123456!!! ")
print MD5.hexdigest () Výstup je:
b17133f9abff287ed0546c1af2b171f7
Poté vyberte 10,5G slovník obsahující 940 milionů hesel a začněte explodovat:
hashcat -w 3 -a 0 -m 0 - -odstranit -o big.out b17133f9abff287ed0546c1af2b171f7 big.dic
Všimněte si, že pokud existuje pouze jedna hodnota hash, nemusíte ji uložit do souboru a můžete ji zapsat přímo do argumentů příkazového řádku. Začal jsem trhat před spaním a druhý den jsem se probudil, abych se podíval na výsledky. Našel jsem:
Začalo: Středa Červenec 26 22:55:27 2017 Zastaveno: Středa Červenec 26 23:02:28 2017
Ukázalo se, že to trvalo jen 7 minut! Myslel jsem, že to bude trvat 7 hodin, což je 60krát rychlejší, než jsem čekal! Je trochu škoda, že hodnota hash nebyla úspěšně vybuchnuta. Zdá se, že "werner123456!!!" není ve slovníku hesel. Zdá se, že potřebuji připravit 100G slovník hesel, ale je velmi nepohodlné ukládat a přenášet tak velký slovník. Není jiný způsob? Samozřejmě, vzpomínáte si na režim útoku? Používali jsme režim „přímý ". Dále se podívejme na několik dalších režimů.
Při použití hashcatu k odstranění hash je prvním krokem najít správný hash Různé systémy a různý software mají různá místa pro ukládání hash, takže je třeba přesně najít hodnotu hash; Druhým je správně posoudit typ hash, určit, zda hashcat podporuje tento druh hash, a vybrat správný parametr-m, jinak je téměř nemožné uspět; Třetím je, že slovník hesel by měl být lepší. Zda bude výbuch nakonec úspěšný, závisí na slovníku. Přestože větší slovník hesel není lepší, větší je stále lepší. hashcat je také známý svou rychlostí a velký slovník není pro hashcat problém. Zde je zaznamenán lepší slovník: Předchozí úniková brána + běžně používaná sada slovníků slabých hesel. 7Z , dekompresní heslo je: anywlan. Kromě toho, pokud shromáždíte mnoho malých slovníků, můžete malé slovníky sloučit, třídit a deduplikovat, abyste získali velký slovník pro snadné použití v Hashcatu. Pokud jsou malé slovníky ve stejném adresáři, můžete to udělat pomocí jednoho příkazu:
cat * | seřadit | uniq > Merge.dic
Co když jsou malé slovníky uspořádány podle kategorií a distribuovány do vícevrstvých adresářů? Použití pouze příkazu cat samozřejmě nefunguje, ale ve skutečnosti stačí pouze jeden příkaz Za předpokladu, že všechny malé slovníky jsou uloženy v adresáři MyDictionary, lze příkaz napsat takto:
najít . /MyDictionary -type f -exec cat {} \; | seřadit | uniq > Merge.dic