hash funkce je obecný termín pro typ funkce Vstupem tohoto typu funkce jsou libovolná binární data a výstupem je binární data s pevnou délkou, tento typ funkce má následující charakteristiky:
Jednosměrnost: Výstup je jednoduchý a rychlý při výpočtu ze vstupu, ale je matematicky nemožné 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í hash funkce 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á hash hodnotu hesla během ověřování stačí znovu vypočítat zadané heslo Porovnáním hash hodnoty s hash hodnotou 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 hesla, není opravdu žádný způsob, jak znát heslo samotné? 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 pro hash blasting na světě, 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říkazu:
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 32bitové a 64bitové spustitelné soubory v Linuxu a windows Stačí vybrat jeden z nich podle situace vašeho počítače. Zvolil jsem hashcat64.bin Pro krásu přidám řádek do souboru ~ /. bashrc:
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.
No, nyní můžete začít používat hashcat k odstřelování různých hashů.
md5 by měla 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 odstřelení těchto hodnot hash. Příkaz je následující:
hashcat -w 3 -a 0 -m 0 - -remove -o md5.out md5.hash wordlist.dic
Parametr-w se používá k určení pracovního režimu. Existují čtyři typy, jak je uvedeno v následující tabulce:
| N | Performance | Runtime | Power Consumption | Desktop Impact |
|---|---|---|---|---|
| 1 | Low | 2 ms | Low | Minimal |
| 2 | Default | 12 ms | ekonomické | patrné |
| 3 | High | 96 ms | High | Unresponsive |
| 4 | Nightmare | 480 ms | Insane | Bezhlavý |
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 | Hybrid Mask + Wordlist |
-m Funkce hash používaná k určení hodnoty hash, která má být odpálena, 0 znamená, že funkce hash je md5, ostatní hodnoty jsou uvedeny v následující tabulce:
| N | Name | Category |
|---|---|---|
| 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á. Zde ukážu pouze několik hash funkcí zahrnutých v tomto článku. Všechny můžete vidět pomocí parametru – help.
Parametr – remove 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 tryská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čten 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é operační prostředí, takže si to 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 internetu 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 is not a symbolic link
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:
hash hodnota přihlašovacího hesla Windows je uložena v souboru SAM, což je zkratka pro "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. Najděte virtuální stroj Windows 7, vytvořte nového administrátorského uživatele s názvem hashcat a nastavte heslo Stáhněte a rozbalte SAMInside ve Windows 7 a spusťte jej s oprávněními administrátora, 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 několik sekund a SAMInside splní očekávání a přečte hash, který chceme, jak je znázorněno na obrázku níže:
Vyberte uživatele" hashcat ", kterého chceme rozbít heslo, 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 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, který obsahuje 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
Zjistil jsem, že montáž celého disku se nezdařila, obsah v oddílu 1 není to, co jsem chtěl, oddíl 2 je 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 skutečně ve stylu Windows,
No, i když jsme úspěšně otevřeli soubor SAM, stále jsme nezískali hash, co mám dělat, když to dále změníme? 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é se podívejte na 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
Poznámka 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 účely:
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 SHA-512. Kromě "$6$" v Linuxu "$1$" znamená MD5, "$2a$" znamená Blowfish, "$2y$" odkazuje na Blowfish (správné zpracování 8bitových znaků), "$5$" Odkazuje na SHA-256, 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 to 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, nemůžu vás zastavit
Tato odpověď je pro md5 a totéž platí pro ostatní hash funkce. Čá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 tryskání dokončeno, zobrazte výsledek:
werner@Yasser: ~ /hashcat$ cat linux.out $6$0fokwg59$6hpMS5dM9wDT/42DDoSD0i0g/wHab50Xs9iEvVLC3V20yf1kRmXZHGXCM0Efv6XU69hdgMZ4FwaMzso4hQaGQ0:4321
Je vidět, že odstřelová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 user.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 root je:
6B825255FB466413D6B1B724644E23428C94BBCB
Uložte tuto hodnotu do souboru mysql.hash a použijte následující příkaz k rozbití hash přihlašovacího hesla mysql:
hashcat -w {O chvíli později je tryskání dokončeno, zobrazit výsledky:
werner@Yasser: ~ /hashcat$ cat mysql.out 6b825255fb466413d6b1b724644e23428c94bbcb:viperJe vidět, že tryskání bylo úspěšné.
5. Výbuch Discuz! Heslo fóra
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.
Dá se rozebrat! 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žit hodnotu hash a hodnotu soli do souboru:
echo 69bcba126b93c6f397983629a0f70553:c13fd9 > discuz.hashHodnota hash a hodnota soli jsou ve stejném řádku, rozdělené na ":". Nakonec použijte následující příkaz k odstranění hash přihlašovacího hesla Discuz:
hashcat -w 3 -a 0 -m 2611 - -remove -o discuz.out discuz.hash wordlist.dicO chvíli později je tryskání dokončeno, zobrazit výsledky:
werner@Yasser: ~ /hashcat$ cat discuz.out 69bcba126b93c6f397983629a0f70553:c13fd9:winterJe vidět, že tryskání bylo úspěšné.
6. Test velkého slovníku
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. 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 náhodně vypočítat hodnotu md5 méně slabého hesla, vybuchnout velkým slovníkem, na jedné straně zkusit štěstí a na druhé straně uvidět, jak rychle může hashcat.
Nejprve vypočítejte hodnotu md5:
import hashlib md5 = hashlib.md5 () md5.update (" werner123456!!! ") print md5.hexdigest ()Výstup je:
b17133f9abff287ed0546c1af2b171f7Poté vyberte slovník o velikosti 10,5G obsahující 940 milionů hesel a začněte explodovat:
hashcat -w 3 -a 0 -m 0 - -remove -o big.out b17133f9abff287ed0546c1af2b171f7 big.dicVšimněte si, že když existuje pouze jedna hodnota hash, nemusíte ji uložit do souboru, můžete ji také zapsat přímo do parametrů příkazového řádku. Začal jsem tryskat před spaním a druhý den jsem se probudil, abych se podíval na výsledky a našel jsem:
Začalo: Středa Červenec 26 22:55:27 2017 Zastaveno: Středa Červenec 26 23:02:28 2017Uká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ů.
7. Shrnutí
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 * | sort | uniq > Merge.dicCo 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 {} \; | řadit | uniq > Merge.dic