Chcesz zacząc łamać hashe? To świetnie trafiłeś! Pozwól nam pokazać i objaśnić jak wykorzystać narzędzie Hashcat do łamania haseł.
Jest to pierwszy artykuł z serii - przeznaczonej dla początkujących,rozpoczynająćych swoją przygodę z łamaniem haseł
Kilka rzeczy, które warto wiedzieć na początek. | Tak to ja! mr.obvious...
Aby Hashcat mógł rozpocząć łamanie w trybie ataku słownikowego potrzebujemy:
Co to jest atak słownikowy? To bardzo prosta metoda - hashcat 'haszuje' każdy wpis z pliku tekstowego, linia po lini, jeden po drugim, i sprawdza, czy któryś z nich pasuje do hasza, który próbuje złamać. Jeśli tak, sukces - złamaliśmy skubańca!
Pierwszym krokiem jest określenie, z jakim rodzajem hasza mamy do czynienia. Dlaczego to jest ważne?
Hashcat wymaga podania parametru -m
(typ hasza) - musi wiedzieć jaki algorytm hashujący będzie łamać. Typy hashy są reprezentowane numerycznie np. NTLM to ID 1000 (-m 1000
).
Podczas pentestów czy audytów haseł w 99 na 100 przypadków znamy pochodzenie hasha i możemy bez problemu określić jaki to algorytm. Problem pojawia się gdy takowej wiedzy nie posiadamy a algorytm ma 'wielu blizniakow' czyli jest blizniaczo podobny (te sane znaki,ta sama dlugość) do innego jak md5,md4,ntlm.. ( tutaj potwierdzamy dany algorytm dopiero z pierwszym złamanym hashem.. sic!)
Jak dowiedzieć się, jaki typ hasza mamy? Mamy do dyspozycji kilka narzędzi, które w tym pomogą. Oto niektóre z nich:
https://www.tunnelsup.com/hash-analyzer
https://hashes.com/en/tools/hash_identifier
https://md5hashing.net/hash_type_checker
https://www.dcode.fr/hash-identifier
Wszystkie hashe przesyłane na powyższe lub inne serwisy - już tam zostają - podczas pentestów,audytów nie przesyłamy do sieci hashy klientów - wszystko robimy lokalnie.
a jak lokalnie, to wiersz poleceń i tu mamy narzędzia takie jak:
https://github.com/blackploit/hash-identifier
https://github.com/noraj/haiti
https://github.com/HashPals/Name-That-HashPamiętaj, że te narzędzia bazują na długości hasza, znaków jakie w nim występują itd - by określić jego typ - one pomagają w określeniu typu w lepszy lug gorszy sposób określając liste potencjalnych algorytmów.
Hash ABAF3912CA4ABADF8823CEC34B785BC8
może być zarówno MD5, jak i NTLM.
Przykład:
HASH NTLM: ABAF3912CA4ABADF8823CEC34B785BC8
- [AlphaPwners]
Haiti:
HashID:
hashcat też potrafi w identyfikacje hashy, wystarczy pominąc przełąćznik -m
Innym sposobem na rozpoznanie typu hasza jest skorzystanie z listy przykładowych hashy w Hashcat. Można ją wyświetlić za pomocą polecenia hashcat --example-hashes
, lub odwiedzić stronę https://hashcat.net/wiki/doku.php?id=example_hashes.
Często wystarczy skopiować początek hasza i wyszukać go na stronie z przykładowymi hashami.
Zgodnie z example_hashes:
$2a$05$
LhayLxezLhK1LhWvKxCy
[...]vQJLF6
to będzie 3200 bcrypt, Blowfish (Unix) .
$office$*2007*20*128*16
*411a51284e0d0200b131a89a5cc*1
[...]81cde
to będzie 9400 MS Office 2007 .
$krb5asrep$23$
administrator@company.local:36246105349
[...]60e94
to będzie 18200 Kerberos 5, etype 23, AS-REP .
Szukamy oczywiśćie nie cały hash, a zazwyczaj sam początek: $2a$05$
, $office$*2007*20*128*16
,$krb5asrep$23$
Hash w poniższym przykładzie można złamać przy użyciu popularnego słownika rockyou.txt
. Jest to a na pewno powinien być pierwszy wybór w każdym CTF/HackTheBox/TryHackMe/Labach/Egzaminach/Whatever, gdzie chodzi o łamanie hashy lub brute forcing.
Można pobrać go z https://raw.githubusercontent.com/praetorian-inc/Hob0Rules/master/wordlists/rockyou.txt.gz
OK to na początek - złammy ten hash:
0a909ffe7be1ffe2ec130aa243a64c26
Algorytm haszowania to MD5, a odpowiednie ID w Hashcat dla MD5 to 0
.
Hashcat wspiera wiele ataków, takich jak:
W tym poście używany jest tylko tryb ataku słownikowego. Zachęcamy do zapoznania się z kolejnymi postami o łamaniu hashy, aby poznać inne metody.
Aby użyć ataku słownikowego, należy podać przełącznik -a
z wartością 0
.
Aby zacząć łamać musimy odpowiednio podać wszystko do hashcata:
hashcat -m0 -a0 '0a909ffe7be1ffe2ec130aa243a64c26' 'rockyou.txt.gz' -O
Wyjaśnienie komendy:
-m 0 - identyfikator określający typ hasha (w tym przypadku MD5)
-a 0 - wartość określająca tryb ataku (w tym przypadku to atak słownikowy)
0a909ffe7be1ffe2ec130aa243a64c26 - hash do złamania
rockyou.txt.gz - plik słownika (może być skompresowany w zip,7z,gz)
-O - Włączenie flagi opotymalizacji (ogranicza długość hasła zazwyczaj do 27 w zamian za większą szybkość łamania)
kolejność jest bardzo ważna:
[HASH(e)] [slownik]... - podajac pierwszy słownik, hashcat weźmie wordliste za liste hashy.
Gotcha!
Aby wyświetlić wcześniej złamane hasze w Hashcat, należy użyć przełącznika --show
.
hashcat '0a909ffe7be1ffe2ec130aa243a64c26' --show
Kiedy hasło zostanie złamane, Hashcat zapisuje jego wartość w pliku hashcat.potfile, w formacie 'hash':'hasło'. W zależności od systemu lub konfiguracji instalacji Hashcat, miejsce, w którym ten plik jest zapisany, może się różnić, np.
Kali Linux:
~/.local/share/hashcat/hashcat.potfile
System Ubuntu:
~/.local/share/hashcat/hashcat.potfile
Jeśli nie możemy znaleźć pliku .potfile, wystarczy wykonać komendę:
find / -name hashcat.potfile
Hashcat, oczywiście, wspiera łamanie wielu hashy naraz. Wystarczy zamienić hash, który chcemy złamać, na nazwę pliku zawierającego hashe. Plik z hashami powinien zawierać tylko hashe jednego algorytmu - co absolutnie nie jest niezbedne ale przy większych hashlistach robi to różnice - tak naprawde wybierajac odpowiedni moduł do ataku np. -m1000 hashcat sam odrzuci hashe nie pasujące do wzorca ntlm - ale to zabiera czas, który można przeznaczyć na łamanie :f
Jak w przypadku wordlisty - każdy hash powinien być umieszczony w nowej linii, jak poniżej:
[POBIERZ]
hashe do złamania: unshade-hash-b1.txt
hashcat -a0 -m0 unshade-hash-b1.txt 'rockyou.txt.gz' -O
[1]
005fa475cd6073c2a3299aa31d9e9025b8737b94
9790595269fbdf7792bd4012158b61f51d38814d
4ffc350caaa08aadf788774a3c13954b2da8bf52
9d41cc7a34c3c34c4e3a65332358aac11c25ce5e
[2]
7900d6556a7deb9818041aea381872a8
64463bf3c02ba2b295421e607ad15ab2
08e948966ffdfc3d3618b15ae4dc7610
004a6beec22971468ecff512fd7902ac
[3]
15CB872FA3FEAAA7B965B8DB21DF61DE
E3A116866FED857F74EC3E62F38E60FD
D3F81F595A598A5CF8D535B91EF57857
38DDD8ED7F48687DAF504C9C918B598F