Konferencja Mega Sekurak Hacking Party w Krakowie – 26-27 października!
Adminie… Czy znamy Twoje grzechy? ;-) Sprawdź!
Konferencja Mega Sekurak Hacking Party w Krakowie – 26-27 października!
Adminie… Czy znamy Twoje grzechy? ;-) Sprawdź!
Czym są skrypty NSE Nmapa większość Czytelników Sekuraka pewnie już wie. Temat był poruszany wielokrotnie m.in. w artykułach: Nmap NSE – kilka przykładów, Tworzymy własne skrypty NSE dla Nmapa i Nmap i 12 przydatnych skryptów NSE. Jeśli więc nie wiesz czym jest Nmap lub NSE zachęcam do przeczytania któregoś z powyższych artykułów.
Dzisiaj przyjrzymy się bliżej skryptom z kategorii brute, które służą do łamania haseł metodą słownikową.
Skrypt http-brute służy do wykonania audytu haseł używanych do różnych metod uwierzytelniania, takich jak HTTP basic, digest i NTLM. Dzięki wykorzystaniu biblioteki creds, wszelkie odgadnięte dane logowania są zapisywane w rejestrze Nmapa i kiedy inny skrypt będzie ich potrzebował, sam sobie po nie “sięgnie”.
Najprzydatniejsze argumenty, z których możemy skorzystać używając tego skryptu to:
Na początku musimy znaleźć adres IP naszej ofiary, którą będzie maszyna znajdująca się w tej samej sieci LAN (oczywiście pamiętając, że możemy testować tylko te systemy informatyczne, których właściciel wyraził na to zgodę). W tym celu możemy skorzystać z narzędzia netdiscover:
netdiscover -r 10.0.0.0/24
Skan 2000 najbardziej popularnych portów pokazuje, że domyślny dla serwerów WWW port jest otwarty.
Serwer WWW rzeczywiście działa pod adresem naszego celu, lecz niestety jest to domyślna strona Apache2.
Sprawdźmy czy uda nam się znaleźć jakieś “ukryte” katalogi z pomocą np. programu dirb.
dirb http://10.0.0.3
Szybki skan dirb’em pokazuje, że administrator serwera starał się jednak coś ukryć…
Wejście do katalogu /secret wymaga podania nazwy użytkownika i hasła. W tym miejscu skorzystamy z omawianego skryptu http-brute.
nmap -p80 --script http-brute 10.0.0.3 --script-args http-brute.path=/secret/
Jak widać, skrypt nie znalazł poprawnych danych logowania. Myślę, że warto spróbować jeszcze raz, tym razem z inną bazą nazw użytkowników i haseł niż domyślna.
Bardzo dobra i ciągle rozwijana kolekcja wszelakich list jest dostępna pod adresem https://github.com/danielmiessler/SecLists i to właśnie z niej skorzystamy w następnej próbie.
nmap -p80 --script http-brute --script args http-brute.path=/secret/,userdb=./SecLists/Usernames/top-usernames-shortlist.txt,passdb=./SecLists/Passwords/Leaked-Databases/myspace.txt 10.0.0.3
Tym razem skrypt zaraportował znalezienie prawidłowych danych logowania. Sprawdźmy czy nie jest to false-positive.
Udało się zalogować, a to oznacza, że pomyślnie złamaliśmy dane dostępowe do uwierzytelnienia HTTP Basic Auth.
Skrypt http-form-brute służy do audytowania haseł w uwierzytelnieniu opartym o formularze. Tak jak poprzedni skrypt, korzysta z biblioteki creds i zapisuje znalezione dane logowania “na przyszłość”. Http-form-brute automatycznie próbuje wykryć metodę HTTP formularza, jego atrybut ‘action’, informujący przeglądarkę do której strony ma przesłać dane oraz nazwy pól formularza.
Skrypt ocenia czy logowanie było udane korzystając z poniższego algorytmu:
Lista najprzydatniejszych argumentów skryptu:
Jeśli nie ufamy automatycznej próbie wykrycia pól i metody, możemy skorzystać z tych argumentów:
Zważając na to, że skrypt http-form-brute także korzysta z bibliotek brute i http, możemy także używać argumentów takich jak brute.credfile, brute.firstonly, brute.emptypass, brute.delay, brute.guesses, brute.retries, brute.passonly i http.useragent.
W poprzednim przykładzie udało się uzyskać dostęp do ukrytego katalogu chronionego hasłem a uzyskane dzięki temu informacje powinny już satysfakcjonować, to jednak na dole strony widnieje link o nazwie Panel Administracyjny, który prowadzi do strony z następującą zawartością:
Administratorzy lubią ułatwiać sobie życie i widok jak ten na Rysunku nr 9 to nie nowość w wirtualnym świecie. Rozwiązanie to raczej słabe, lecz teraz sprawdzimy czy jest chociaż zabezpieczone mocnym hasłem. Użyjemy do tego celu skryptu http-form-brute, utworzonej przez nas listy potencjalnie istniejących użytkowników oraz którejś z list haseł uprzednio pobranej kolekcji SecLists.
nmap -p80 --script http-form-brute --script-args http-form-brute.path=/secret/4d71dc4916f67033d88a20L0G1N914e2a1ba2/index.php,userdb=users.txt,brute.firstonly=1,passdb=./SecLists/Passwords/Common-Credentials/10-million-password-list-top-10000.txt 10.0.0.3
Jak widać, skrypt poprawnie wykrył pola formularza i hasło zostało złamane w 2 sekundy, co oznacza, że nie było zbyt mocne.
Po zalogowaniu możemy korzystać z shella i wykonywać komendy na serwerze ofiary:
Skrypt http-wordpress-brute celuje w formularz logowania najpopularniejszego CMS’a na świecie – WordPressa. Również korzysta z biblioteki creds i zapisuje znalezione dane logowania do późniejszego użytku.
Przyjrzyjmy się kilku dostępnym argumentom:
Prawie wszystkie skrypty http-*brute wykorzystują biblioteki http i brute do działania, więc i w przypadku tego skryptu możemy używać argumentów dostępnych dla tych bibliotek, m. in.: brute.credfile, brute.firstonly, brute.emptypass, brute.delay, brute.guesses, brute.retries, brute.passonly i http.useragent.
Podczas dalszych oględzin znaleźliśmy instalację WordPress’a pod adresem http://10.0.0.3/wordpress/. Zważając na fakt użycia słabych haseł w poprzednich przykładach, warto przeprowadzić audyt hasła i w tym miejscu.
Na początku skorzystamy ze skryptu http-wordpress-users, aby wykryć użytkowników:
Tworzymy ich listę i przekazujemy skryptowi razem z listą haseł z któregoś z wycieków.
nmap -p80 --script http-wordpress-brute --script-args http-wordpress-brute.threads=10,http-wordpress-brute.uri=/wordpress/,userdb=users.txt,passdb=./SecLists/Passwords/Leaked-Databases/elitehacker.txt 10.0.0.3
Niestety, prawidłowe dane logowania nie zostały odnalezione.
Do następnej próby wygenerujemy dedykowaną listę haseł z pomocą narzędzi cewl i johntheripper.
Na początku korzystamy z cewl’a, aby pobrać z serwera listę słów posiadających co najmniej 6 znaków:
cewl -d 3 -m 6 -w cewl.txt http://10.0.0.3/wordpress/
Następnie używamy john’a do spermutowania listy, korzystając z niestandardowej reguły TryHarder:
john –wordlist=cewl.txt –rules=TryHarder –stdout > cewlmangled.txt
Wygenerowaliśmy całkiem pokaźną, dedykowaną listę haseł. Zobaczmy jak sprawdzi się w praktyce:
nmap -p80 --script http-wordpress-brute --script-args http-wordpress-brute.threads=20,http-wordpress-brute.uri=/wordpress/,userdb=users.txt,passdb=cewlmangled.txt,brute.firstonly 10.0.0.3
Jak widać, nasza dedykowana lista haseł sprawdziła się doskonale. Warto pamiętać, że użytkownicy lubią ustawiać hasła zgodne z zainteresowaniami lub tematyką portalu na którym się rejestrują i używanie dedykowanych list haseł ma duże szanse na powodzenie.
Skrypt ftp-brute służy do audytów haseł używanych do logowania na serwerze FTP.
Skrypt posiada tylko jeden własny argument:
Reszta argumentów, z których możemy skorzystać to te z bibliotek brute i unpwdb: userdb, passdb, brute.credfile, brute.firstonly, brute.emptypass, brute.delay, brute.guesses, brute.retries, brute.passonly.
Przykładowe użycie
nmap -p21 --script ftp-brute --script-args ftp-brute.timeout=3s,userdb=ftpusers.txt 10.0.0.4
Skrypt mysql-brute służy do łamania danych dostępowych do serwera MySQL.
Tak samo jak w ftp-brute, mamy tutaj do dyspozycji tylko jeden należący do skryptu argument – mysql-brute.timeout – i działa on w ten sam sposób: przekazujemy w nim wartość oczekiwania na odpowiedź serwera MySQL w sekundach (domyślnie: 5s).
Tak samo jak w reszcie skryptów korzystających z bibliotek brute i unpwdb możemy korzystać z argumentów userdb, passdb i brute.*.
Tym razem do ataku skorzystamy z dostępu do web shell’a uzyskanego we wcześniejszym przykładzie (Rysunek 12.).
nmap -p3306 --script mysql-brute localhost
Skrypt ssh-brute służy do łamania haseł usługi SSH metodą słownikową.
Ssh-brute znów oferuje tylko jeden argument, definiujący czas oczekiwania na odpowiedź: ssh-brute.timeout i także domyślną jego wartością jest 5s.
Przydatne argumenty z bibliotek unpwdb i brute: userdb, passdb, brute.credfile, brute.firstonly, brute.emptypass, brute.delay, brute.guesses, brute.retries, brute.passonly.
nmap -p22 --script ssh-brute --script-args brute.firstonly 10.0.0.4
Skrypt smb-brute próbuje odgadnąć słabe hasła użytkowników używane do autoryzacji przez protokół SMB (protokół służący udostępnianiu zasobów komputerowych np. plików i drukarek).
Jeśli konto gościa dla SMB jest dostępne, wtedy system Windows na próby uwierzytelnienia z nieprawidłowym (nieistniejącym) loginem odpowiada w inny sposób niż na próby logowania z prawidłowym loginem (takim, który w systemie istnieje). Skrypt smb-brute dedukuje z powyższego, które konta istnieją w systemie
i w dalszej części prób zajmuje się już tylko nimi, przez co atak nie odbywa się dłużej “na ślepo”, oszczędzając dzięki temu sporo czasu.
Dostępne dla skryptu smb-brute argumenty:
A także dobrze już znane passdb i userdb.
nmap -p139,445 --script smb-brute 10.0.0.5 --script-args userdb=./SecLists/Usernames/top-usernames-shortlist.txt
nmap -p139,445 --script smb-brute 10.0.0.5 --script-args userdb=./SecLists/Usernames/top-usernames-shortlist.txt,passdb=./SecLists/Passwords/Leaked-Databases/rockyou-15.txt

Rysunek 21. Niestety w tym przypadku nie udało się złamać danych dostępowych do udostępnionych zasobów.
Skrypt pop3-brute próbuje odnaleźć prawidłowe hasła do kont usługi POP3.
W argumencie pop3loginmethod wskazujemy, z której metody logowania ma skorzystać skrypt. Do wyboru mamy: “USER”, “SASL-PLAIN”, “SASL-LOGIN”, “SASL-CRAM-MD5”, “APOP”. Domyślną metodą jest “USER”.
Nazwy użytkowników i hasła wskazujemy w argumentach userdb i passdb lub brute.credfile. Inne parametry ataku ustawiamy korzystając z umówionych wcześniej argumentów: brute.firstonly, brute.emptypass, brute.delay, brute.guesses, brute.retries.
nmap -p110 --script pop3-brute --script-args brute.firstonly,userdb=users.txt 10.0.0.4
Skrypt imap-brute służy do przeprowadzenia audytu haseł używanych do uwierzytelnienia na serwerze IMAP.
Typ mechanizmu uwierzytelnienia wskazujemy w argumencie imap-brute.auth, który może mieć którąś z poniższych wartości:
Przydatne argumenty: userdb, passdb, brute.credfile brute.firstonly, brute.emptypass, brute.delay, brute.guesses, brute.retries.
nmap -p143 --script imap-brute --script-args brute.firstonly,userdb=users.txt 10.0.0.4

Rysunek 23. Ku naszemu zdziwieniu odnalezione dane dostępowe są takie same jak w przypadku usługi POP3 :)
Jak widać skrypty Nmapa dość dobrze radzą sobie z łamaniem haseł różnych usług. Dużym plusem jest wygoda – korzystając z jednego narzędzia możemy wykrywać usługi a następnie łamać dostęp do większości z nich. Minusem jest jednak to, że wyniki niestety nie zawsze są rzetelne i trzeba zagłębiać się w działanie skryptu za pomocą dodatkowego argumentu –script-trace.
– Marcin Mol, hackuje w Securitum
Jak zawsze bardzo dobrze opisany poradnik! Pozdrawiam!
Kopiuj / Wklej z TORowej cebulki ;-)
DoomHead
http://qd73mvvc7v7zewwl.onion/viewtopic.php?id=5188
Żadne kopiuj/wklej – chyba, że w drugą stronę ;)
W każdym razie nie istnieje żaden temat pod tym linkiem. Pozdrawiam.
Pytanie: jaka jest przewaga nad innymi lamaczami?
Główna przewaga została wymieniona w podsumowaniu – wygoda + jeśli mamy dostęp do zdalnego komputera i chcemy złamać hasło do lokalnie działającej usługi to dużo bardziej prawdopodobne jest, że administrator ma zainstalowanego Nmapa a nie np. Hydre (Rysunek 19.).
Poza tym NSE obsługuje szeroki wachlarz usług (na ten moment ponad 70 skryptów brute).
Pozdrawiam.
@Marcin, z calym szacunkiem ale lamanie hasla na przejetym komputerze (pentesty, agresor), to zle postepowanie, nie realne.
Poza watpliwa wygoda, jakie sa zalety? Moga sie wypowiedziec osoby z doswiadczeniem?