-15% na nową książkę sekuraka: Wprowadzenie do bezpieczeństwa IT. Przy zamówieniu podaj kod: 10000

Nmap NSE – kilka przykładów

10 września 2013, 09:10 | Narzędzia, Teksty | komentarzy 11

Wstęp

Nmap to bez wątpienia najbardziej popularny skaner portów, ale od kiedy wprowadzono do niego NSE (Nmap Scripting Engine), powoli staje się wręcz prawdziwym kombajnem, umożliwiającym nie tylko jeszcze dokładniejsze rozpoznanie skanowanego celu, jego usług i aplikacji, ale nawet wykrywanie i wykorzystanie znalezionych podatności dzięki skryptom NSE.

Skrypty te pisane są w języku Lua z wykorzystaniem bibliotek dostarczonych z Nmapem (znajdują się one w katalogu nselib).

Dzięki NSE, za pomocą samego Nmapa i bez użycia dodatkowych narzędzi, możemy automatyzować pewne etapy testów penetracyjnych (więcej o automatyzacji pisaliśmy przy okazji narzędzia OpenVAS).

Ale na tym nie kończą się jego możliwości.

Wśród 446 oficjalnych skryptów dostarczanych wraz z Nmapem istnieją takie, które umożliwiają weryfikację systemów pod kątem zainfekowania przez malware, a nawet proste fuzzery.

Uwaga! Przeprowadzanie testów bezpieczeństwa na jakichkolwiek urządzeniach, bez jawnej – najlepiej pisemnej – zgody ich właściciela na takie prace jest niezgodne z prawem. Zdecydowanie nie zachęcamy do działań niezgodnych z prawem!

 

Charakterystyka

1. Rodzaje skryptów

Generalnie każdy skrypt w zależności od działania przypisany jest do co najmniej jednej z czternastu kategorii:

  • auth: skrypty związane z testowaniem mechanizmów uwierzytelniania czy enumeracją kont użytkowników,
  • broadcast: skrypty wykrywające hosty i serwery niektórych usług za pomocą pakietów broadcastowych, bądź multicastowych,
  • brute: skrypty wykonujące ataki brute force na różnego rodzaju usługi sieciowe,
  • default: skrypty wykonywane domyślnie po uruchomieniu Nmapa z parametrem -sC lub -A,
  • discovery: głównie skrypty, które w sposób nieinwazyjny (choć są wyjątki ;) ) starają się wydobyć jak najwięcej informacji na temat samego skanowanego systemu i jego usług,
  • dos: kilka skryptów wykonujących ataki DoS, które mogą spowodować crash atakowanej usługi,
  • exploit: skrypty potrafiące wykorzystać istniejące podatności w usługach, bądź w niektórych aplikacjach i serwerach webowych,
  • external: skrypty, które podczas działania wykonują też połączenia z systemem innym niż skanowany, najczęściej w celu pozyskania jakichś informacji o skanowanym celu; np. zapytania do serwera udostępniającego usługę geolokalizacji IP,
  • fuzzer: skrypty wykorzystujące technikę fuzzingu do wykrywania błędów; na razie w tej kategorii znajdują się tylko 3 proste skrypty,
  • intrusive: wszystkie skrypty działające w sposób mocno inwazyjny lub potencjalnie niebezpieczny – głównie skrypty z kategorii brute, exploit i vuln,
  • safe: skrypty bezpieczne, przeciwieństwo kategorii intrusive,
  • malware: skrypty sprawdzające, czy system jest zainfekowany przez złośliwe oprogramowanie,
  • version: skrypty zajmujące się zaawansowanym wykrywaniem wersji niektórych usług; opcja ta działa tylko w przypadku, kiedy Nmap jest uruchomiony z parametrem -sV ,
  • vuln: skrypty, które potrafią wykryć niektóre znane podatności; część skryptów potrafi je również wykorzystać.

2. Przykłady zastosowania

Czas na spotkanie z kilkoma wybranymi skryptami NSE w praktyce.

Zacznijmy od najprostszego skryptu z kategorii brute-force. Przypuśćmy, że chcemy odkryć jakieś istniejące konta (wraz z hasłami) na serwerze poczty POP3. Do tego celu możemy wykorzystać skrypt NSE o nazwie pop3-brute.

Zacznijmy od zdefiniowania pliku zawierającego listę nazw użytkowników:

nse1oraz pliku z hasłami:

nse2

Jak widać są to dość uniwersalne dane logowania, które można wykorzystać w przypadku usług różnego rodzaju protokołów.

Jako wartość argumentu userdb skryptu podajemy ścieżkę (względną lub bezwzględną) do pliku z nazwami użytkowników, a dla passdb – pliku z hasłami.

Zakładając, że atakowany serwer znajduje się pod adresem 192.168.1.125 oraz że usługa POP3 nasłuchuje na standardowym porcie, możemy wywołać Nmap w taki sposób:

 nse3

 Jak widać, skrypt odnalazł login i hasło jednego użytkownika tego serwera poczty.

Istnieje również możliwość wykorzystania domyślnie dostarczonych z Nmapem bazy loginów (nselib/data/usernames.lst) i haseł (nselib/data/passwords.lst) – nie podajemy wówczas parametrów userdb oraz passdb.

Rozważmy teraz inny scenariusz. Załóżmy, że chcemy dostać się do zasobu umieszczonego na serwerze www, który wymaga uwierzytelnienia za pomocą Basic access authentication.

W tym celu można by wykorzystać narzędzia typu hydra, brutus, czy nawet burp, ale wystarczy mały skrypcik NSE o nazwie http-brute.

Korzysta się z niego podobnie jak z poprzedniego, przy czym należy jeszcze określić ścieżkę do zabezpieczonego zasobu za pomocą parametru http-brute.path:

 nse4

 Można oczywiście użyć też obu skryptów jednocześnie:

 nse5

Jeżeli usługi nasłuchiwałyby na niestandardowych portach, to trzeba by jeszcze nakazać Nmapowi wersjonowanie przez parametr -sV.

Bardzo często problemy z bezpieczeństwem serwerów są spowodowane przez znajdujące się na serwerach www nieodpowiednio zabezpieczone aplikacje webowe.

Okazuje się, że już podczas samego skanowania sieci możemy dowiedzieć się, jakie zasoby i aplikacje znajdują się na serwerze. W tym celu z poziomu Nmapa możemy wykorzystać skrypt http-enum, który skanuje serwer www w poszukiwaniu katalogów i plików używanych przez popularne aplikacje internetowe.

Na podstawie tych informacji skrypt potrafi podać nazwy istniejących aplikacji, co pozwoli nam na dalsze profilowanie ataku.

Najprostsze użycie tego skryptu wygląda następująco:

 nse6

Jak widać skrypt zwrócił wiele cennych informacji, wykrywając między innymi wiele potencjalnie interesujących zasobów sieciowych i aplikacji webowych.

W tego typu scenariuszach czasami może być również przydatny skrypt http-vhosts, wykrywający – na zasadzie zgadywania nazw – vhosty na serwerze.
Lista popularnych nazw vhostów wykorzystywanych przez ten skrypt znajduje się w nselib/data/vhosts-default.lst.

Przykładowo odgadnięcie vhostów na serwerze www.google.com za pomocą tego skryptu wygląda tak:

nse7

Przydatny może być również skrypt http-robots.txt, który, jak sugeruje nazwa, pobiera z serwera plik /robots.txt, a następnie wyświetla wpisy Disallow:

nse8

W przypadku dużej liczby takich wpisów, do wyświetlenia wszystkich musimy zwiększyć poziom szczegółowości komunikatów (w tym wypadku do wartości 4), podając jako jeden z argumentów wywołania programu -vvvv , co jest równoważne (w sensie Nmapa) zapisowi -v4.

Ciekawy jest również skrypt ip-forwarding, umożliwiający wykrycie systemów z włączonym przekazywaniem pakietów IP między interfejsami sieciowymi oraz systemów Windows z włączonym udostępnianiem połączenia internetowego. Skrypt wymaga podania jednego argumentu – target tj. systemu do którego ( w przypadku sukcesu ) ma wysłać pinga, łącząc się poprzez system testowany. Ponadto w przypadku systemów uniksopodobnych Nmap musi zostać uruchomiony z uprawnieniami roota. Aby zaoszczędzić czas, warto wyłączyć skanowanie portów w Nmapie za pomocą parametru -sn.

 nse9

 

Podsumowanie

Jak widać już na przykładzie kilku skryptów, możliwości jakie daje NSE są ogromne, a liczba skryptów ciągle rośnie. Myślę, że dzięki niemu Nmap zyskał jeszcze bardziej na swojej popularności, a z całą pewnością ułatwił automatyzację wielu zadań administratorom i pentesterom.

 

Sebastian Włodarczyk [netcuter<at>gmail.com]

Spodobał Ci się wpis? Podziel się nim ze znajomymi:



Komentarze

  1. Skoro tyle czasu poświęcasz HTTP, polecam zerknąć na prace George’a Chatzisofroniou, tegorocznego studenta GSoC. Większość jest już albo w Nmapie 6.40, albo w SVN, wśród tych tutaj:

    https://svn.nmap.org/nmap/scripts/

    Tutaj jest niesamowicie ciekawy wykład Fyodora, autora Nmapa (oraz Davida, drugiego maintainera, też naprawdę świetnego hakera) na temat NSE oraz skryptów SMB, wykorzystywanych do współdzielenia plików w Windows:

    https://www.youtube.com/watch?v=M-Uq7YSfZ4I

    Z innych ciekawych skryptów, polecam uwadze *-geolocation-* ;)

    Odpowiedz
  2. bl4de

    Ciekawy artykuł. Trzeba będzie zerknąć na Lua i spróbować coś samemu pokodować :)

    BTW, ciekawe, czemu akurat Lua, a nie C, Perl czy Python.

    Odpowiedz
  3. Odpowiedz
  4. MateuszM

    @bl4de: też mnie zastanawiało czemu akurat Lua ale po lekturze angielskiej strony na Wikipedii zaczynam rozumieć. Patrząc na to kto jeszcze (albo kto najpierw?) wykorzystuje ten język, nie dziwi dlaczego właśnie Lua. Sporo osób może go już znać z innych narzędzi z podobnej grupy tematycznej. Zapewne łatwo go zintegrować z własną aplikacją i ponoć jest lekki. Python czy Perl są fajne do programowania tego czy owego ale mogą być za ciężkie do pewnych zastosowań. No i instalacja na Windowsie nmap i osobno np. Perla/Pythona może przerosnąć przeciętnego h4X0r4 co se chce „poskanować”.

    Odpowiedz
  5. bl4de

    @MateuszM

    Fakt, zgadzam się z Tobą po przestudiowaniu paru materiałów na temat Lua :)
    Jako język skryptowy do pisania wszelkiego rodzaju „wtyczek” nadaje się idealnie. No i rzeczywiście stosowany jest w wielu dziedzinach – zaskoczyła mnie jego popularność choćby w dziedzinie gamedevu.

    Odpowiedz
  6. @d33tah: jak są w 6.40 to pewnie przeglądałem :)
    SMB to nie tylko windows ;), natomiast zgadzam się co do Lua ;)
    @bl4de: thx ;) btw też myślałem o napisaniu jakiegoś skryptu NSE, ale raczej w kontekście aplikacji webowych – trzeba tylko troche czasu znaleźć ;)

    Odpowiedz
  7. @netcuter:

    Nie wszystkie są. Część została napisana po wydaniu 6.40.

    Odpowiedz
  8. @d33tah:
    Przejrzałem jeszcze 3 fajne skrypty na githubie – może je miałeś na myśli ;) ?

    Odpowiedz
  9. ip-forwarding sam akurat nie testowałem, ale wygląda fajnie ;) Rozumiem, że to jeden z tych trzech, o których mówisz, w takim razie które należą do tych dwóch pozostałych?

    Odpowiedz
  10. (wcześniej ip-forwarding nie widziałem)

    Odpowiedz
  11. Odpowiedz

Odpowiedz na d33tah