Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book
Nmap i 12 przydatnych skryptów NSE
Nmap to najbardziej popularny, darmowy skaner bezpieczeństwa, którego autorem jest Gordon Lyon (a.k.a. Fyodor Vaskovich). Pierwsza wersja Nmapa została opublikowana 1. października 1997 roku w internetowym magazynie Phrack.
W momencie pisania tego tekstu najnowszą wersją Nmapa jest 7.70. Wersja ta jest wyposażona w 588 skryptów NSE (Nmap Scripting Engine), które obok ogromnej ilości standardowych opcji skanowania, dają możliwość dużo bardziej szczegółowego przebadania interesujących nas hostów.
NSE może być użyte między innymi do trafniejszej detekcji wersji danej usługi, łamania nazw użytkowników i haseł, wykrywania i wykorzystywania znanych podatności, a nawet wykrywania istniejących już tylnych furtek pozostawionych przez napastnika i fuzzingu.
Lista wszystkich dostępnych skryptów wraz z opisami jest publikowana pod adresem https://nmap.org/nsedoc/. Alternatywnie, aby uzyskać listę, możemy skorzystać z terminala (zakładając, że Nmap został zainstalowany w domyślnej lokalizacji):
LINUX
- ls -1 /usr/share/nmap/scripts
WINDOWS
- dir “C:\Program Files\Nmap\scripts”
lub
- dir “C:\Program Files (x86)\Nmap\scripts”
Do uzyskania informacji na temat przeznaczenia skryptu służy polecenie:
- nmap –script-help <nazwa_skryptu>
Poniżej postaram się przedstawić kilka przydatnych z punktu widzenia pentesterów i administratorów skryptów NSE.
1. http-enum.nse
Skrypt http-enum, korzystając z domyślnej bazy fingerprintów, wysyła ponad 2000 zapytań do serwera WWW, próbując dotrzeć do plików i/lub katalogów specyficznych dla popularnych aplikacji webowych. Jeśli serwer zwróci kod “200 OK” lub “401 Authentication Required” na któreś z zapytań, będzie to oznaczało, że pożądany plik lub katalog jest dostępny na serwerze, a wtedy na podstawie fingerprinta skrypt zwróci nazwę aplikacji.
Działanie tego skryptu jest podobne do działania popularnego skanera aplikacji Web – Nikto – i jest możliwość podpięcia bazy fingerprintów Nikto, zawierającej ponad 6500 wpisów, do domyślnej bazy skryptu, za pomocą argumentu http-fingerprints.nikto-db-path. Jeśli po tym argumencie nie podamy ścieżki do bazy Nikto, skrypt będzie sam starał się zlokalizować bazę db_tests.
Alternatywnie, możemy stworzyć własną bazę fingerprintów i wskazać ją w argumencie http-enum.fingerprintfile. Aby to uczynić należy stworzyć skrypt w języku Lua, przykładowo z następującą zawartością:
Następnie wskazujemy ścieżkę do skryptu w argumencie http-enum.fingerprintfile.
Kolejnym przydatnym argumentem jest http-enum.basepath, który jako parametr przyjmuje ścieżkę od której rozpocznie się skanowanie.
Domyślnie, skrypt http-enum traktuje jako istniejące te pliki i foldery, na które serwer odpowiada kodami “200 OK” i “401 Authentication Required”. Aby rozszerzyć ten zakres do wszystkich kodów (z wyjątkiem “404 Not Found”), należy użyć argumentu http-enum.displayall. Dzięki temu prawdopodobieństwo znalezienia ukrytych folderów jest wyższe, lecz generowanych jest dużo więcej false-positive’ów.
2. http-grep.nse
Skrypt http-grep przeszukuje podaną stronę pod kątem przydatnych informacji. Domyślnie zwraca adresy e-mail oraz adresy IP znalezione na wszystkich odkrytych przez skrypt podstronach. Możemy podać skryptowi w argumencie http-grep.url podstronę, którą chcemy przeszukać, a używając argumentu http-grep.builtins rozszerzymy zakres przeszukiwania do adresów e-mail, adresów IP, numerów telefonu, numerów kart mastercard, visa, discover, amex i ssn. Jeśli chcemy dodać jakieś słowo lub wyrażenie regularne do wyszukania, przekazujemy je argumentowi http-grep.match. Domyślną, ustawioną na 3, głębokość przeszukiwania możemy zmienić za pomocą argumentu http-grep.maxdepth.
3. ssh-brute.nse
Skrypt ssh-brute służy do łamania haseł usługi SSH metodą słownikową. Domyślnie korzysta ze swojej, dość rozbudowanej bazy użytkowników i haseł. Można jednak, za pomocą argumentów userdb oraz passdb, przekazać skryptowi nasze listy.
4. dns-brute.nse
Skrypt dns-brute próbuje odnaleźć jak najwięcej subdomen badanego hosta korzystając z najczęściej używanych nazw subdomenowych.
5. http-config-backup.nse
Skrypt http-config-backup wysyła wiele zapytań do serwera WWW, próbując uzyskać kopie konfiguracji popularnych CMS’ów pozostawionych przez użytkownika lub edytor tekstowy. Według badania przeprowadzonego przez autora narzędzia CMSploit, którym zainspirowany jest skrypt http-config-backup, prawie 1% stron korzystających z CMS’ów ujawnia swoje dane dostępowe do bazy danych poprzez pozostawione kopie konfiguracji.
6. vulscan.nse
Skrypt vulscan dodaje Nmapowi funkcjonalność skanera podatności. Niestety, nie należy on do standardowej biblioteki skryptów Nmapa, dlatego, aby z niego skorzystać należy pobrać go ze strony http://www.computec.ch/projekte/vulscan/?s=download i umieścić wypakowany folder vulscan w katalogu scripts Nmapa.
W przypadku tego skryptu trzeba zastosować dodatkową opcję -sV, która służy do wykrycia wersji skanowanego oprogramowania, a wtedy na jej podstawie, skrypt korzystając z kilku baz (pliki .csv w folderze vulscan) sugeruje możliwe podatności.
Aby zmienić szablon wyniku działania skryptu, można użyć argumentu vulscanoutput, który może przyjąć jeden z czterech argumentów:
- details – w wyniku otrzymamy nazwę podatności, ilość dopasowań, nazwę i wersję oprogramowania oraz linki do exploitów lub objaśnień podatności
- listid – w wyniku otrzymamy samo ID lub CVE wykrytych podatności
- listlink – w wyniku otrzymamy linki do exploitów lub objaśnień podatności
- listtitle – w wyniku otrzymamy tylko nazwy wykrytych podatności
Można także stworzyć własny szablon z pomocą następujących elementów:
- {id} – ID podatności
- {title} – tytuł podatności
- {matches} – ilość dopasowań
- {product} – nazwa oprogramowania
- {version} – wersja oprogramowania
- {link} – link do exploita/wyjaśnienia podatności
- \n – nowa linia
- \t – tabulator
Tak będzie wyglądało polecenie, którego wynikiem ma być tabelka zawierającą ID i link do podatności:
nmap -sV --script vulscan/vulscan --script-args vulscanoutput='{id}\t{link}'
7. smb-enum-users.nse
Zadaniem skryptu smb-enum-users jest wyliczenie wszystkich użytkowników dostępnych na skanowanym systemie Windows. Skrypt ten korzysta z protokołu MSRPC (Microsoft RPC) i dwóch technik enumeracji:
- SAMR – technika ta zwraca więcej informacji niż same nazwy użytkownika, jest o wiele mniej “hałaśliwa” od LSA oraz przez to, że korzysta z dedykowanej funkcji, zwróci wszystkie istniejące konta. Wymaga uprawnień minimum zwykłego użytkownika (na systemie Windows 2000 nie wymaga żadnych uprawnień);
- LSA – oprócz nazw użytkownika zwraca konta systemowe, grupy i aliasy. Wymaga mniejszych uprawnień od SAMR – może być użyta z uprawnieniami gościa, lecz za to generuje dużą ilość logów na skanowanym systemie.
Gdy uruchomimy skrypt bez argumentów, skorzysta on z obydwóch powyższych technik. Jeśli chcemy ograniczyć skanowanie do jednej techniki, wystarczy użyć argumentu:
- samronly – dla skanowania tylko metodą SAMR;
- lsaonly – dla skanowania tylko metodą LSA.
Jeśli konto gościa z pustym hasłem nie jest dostępne na skanowanym systemie, będziemy musieli użyć jeszcze argumentów smbusername i smbpassword
i podać dane dostępowe użytkownika systemu. W takim przypadku można też ograniczyć skanowanie do samej techniki SAMR, aby przebiegło ono “ciszej”.
8. http-wordpress-enum.nse
Skrypt http-wordpress-enum, korzystając z bazy wp-themes.lst zawierającej około 32 tysięcy wpisów oraz z bazy wp-plugins.lst posiadającej ponad 14 tysięcy nazw wtyczek do WordPressa, sprawdza, które motywy i pluginy zostały zainstalowane na skanowanym serwisie. Nazwy w bazach posortowane są według popularności. Przekazanie liczby w argumencie http-wordpress-enum.search-limit zmieni domyślną wartość sprawdzania po 100 najpopularniejszych wtyczek i motywów, a gdy przekażemy “all”, zostaną sprawdzone wszystkie nazwy z baz. Jeśli WordPress na badanym serwerze został zainstalowany w niestandardowym katalogu, wskazujemy jego ścieżkę w argumencie http-wordpress-enum.root. Kolejnym przydatnym parametrem jest http-wordpress-enum.check-latest, który sprawdzi aktualność wtyczek
i motywów, jeśli przekażemy mu “true”.
9. firewalk.nse
Skrypt firewalk korzystając z techniki śledzenia trasy pakietu (traceroute)
i upływu TTL, znanej jako firewalking, próbuje wykryć reguły zapory / bramy sieciowej. Parametry skanowania można kontrolować za pomocą następujących argumentów:
- firewalk.max-probed-ports – ilość portów do przebadania dla każdego protokołu. Ustawiona na -1 zbada wszystkie filtrowane porty;
- firewalk.max-retries – maksymalna ilość retransmisji;
- firewalk.recv-timeout – czas trwania pętli zbierającej pakiety (w milisekundach);
- firewalk.max-active-probes – maksymalna ilość równoległych skanów;
- firewalk.probe-timeout – ważność pojedynczego skanu (w milisekundach).
10. mysql-empty-password.nse
Skrypt mysql-empty-password sprawdza, czy jest możliwość zalogowania się do serwera MySQL na konto root lub anonymous używając pustego hasła.
11. mysql-users.nse
Skrypt mysql-users służy do wylistowania dostępnych na serwerze MySQL użytkowników. Do wylistowania użyjemy konta root z pustym hasłem, które odkryliśmy poprzednim skryptem. Dane dostępowe przekazujemy w argumentach mysqluser oraz mysqlpass. Gdy hasło jest puste, można pominąć argument mysqlpass.
12. mysql-brute.nse
Skrypt mysql-brute służy do łamania danych dostępowych do serwera MySQL. Poprzednim skryptem wykryliśmy użytkownika testerr, którego hasło postaramy się teraz złamać. Na początku należy stworzyć plik z nazwami użytkowników – w tym przykładzie będzie to tylko użytkownik testerr.
Następnie stworzoną listę przekazujemy argumentowi userdb i opcjonalnie możemy użyć argumentu passdb do wskazania bazy haseł.
Podawanie skryptowi swoich baz oczywiście nie jest konieczne i jeśli tego nie zrobimy skorzysta on z domyślnych baz z najbardziej popularnymi loginami i hasłami. W tym przykładzie wykorzystamy domyślną bazę ponad 5000 popularnych haseł nie używając argumentu passdb.
Podsumowanie
Nmap bez wątpienia powinien być jednym z podstawowych narzędzi każdego pentestera i administratora, a ciągle rosnąca liczba rozbudowanych skryptów NSE sprawia, że posiada on funkcjonalności pozwalające na szczegółowe przebadanie bezpieczeństwa sieci, bez konieczności korzystania z innych narzędzi.
–Marcin Mol
https://www.trustwave.com/Resources/SpiderLabs-Blog/Using-Nmap-to-Screenshot-Web-Services/ <– to jest tyz spoko
Brakuje mi tutaj jeszcze ssl-enum-ciphers, którego używam częściej niż każdego z Twojej listy. Pozdrawiam.