Wyszukiwanie w witrynie

Jak korzystać ze skryptów silnika skryptowego Nmap (NSE) w systemie Linux


Nmap to popularny, wydajny i wieloplatformowy skaner bezpieczeństwa sieci i narzędzie do eksploracji uruchamiane z wiersza poleceń. Może również pomóc w uzyskaniu przeglądu systemów podłączonych do Twojej sieci; możesz go użyć do znalezienia wszystkich adresów IP aktywnych hostów, skanowania otwartych portów i usług działających na tych hostach i wielu innych.

Jedną z interesujących funkcji Nmap jest Nmap Script Engine (NSE), który zapewnia mu jeszcze większą elastyczność i wydajność. Umożliwia pisanie własnych skryptów w języku programowania Lua i ewentualnie udostępnianie tych skryptów innym użytkownikom Nmap.

Przeczytaj także: 29 praktycznych przykładów poleceń Nmap dla Linuksa

Istnieją cztery typy skryptów NSE, a mianowicie:

  • Skrypty Prerule – to skrypty uruchamiane przed jakąkolwiek operacją skanowania Nmapa, są wykonywane, gdy Nmap nie zebrał jeszcze żadnych informacji o celu.
  • Skrypty hosta – to skrypty wykonywane po wykonaniu przez Nmap normalnych operacji, takich jak wykrywanie hosta, skanowanie portów, wykrywanie wersji i wykrywanie systemu operacyjnego na hoście docelowym.
  • Skrypty usług – to skrypty uruchamiane w odniesieniu do określonych usług nasłuchujących na hoście docelowym.
  • Skrypty Postrule – to skrypty uruchamiane po przeskanowaniu przez Nmap wszystkich hostów docelowych.

Następnie skrypty te są pogrupowane w różne kategorie, w tym te służące do uwierzytelniania (auth), wykrywania hostów (broadcast), ataków brute-force mających na celu odgadnięcie poświadczeń uwierzytelniających (brute<), odkrywanie dodatkowych informacji o sieci (discovery), powodowanie odmowy usługi (dos), wykorzystywanie jakiejś luki w zabezpieczeniach (exploit) itp. Wiele skryptów należy do kategorii domyślnej.

Uwaga: zanim przejdziemy dalej, zwróć uwagę na następujące kluczowe punkty:

  • Nie wykonuj skryptów pochodzących od osób trzecich bez ich krytycznego przejrzenia lub tylko wtedy, gdy ufasz ich autorom. Dzieje się tak dlatego, że skrypty te nie są uruchamiane w piaskownicy i dlatego mogą nieoczekiwanie lub złośliwie uszkodzić system lub naruszyć Twoją prywatność.
  • Po drugie, wiele z tych skryptów może prawdopodobnie działać jako skrypt prerule lub postrule. Biorąc to pod uwagę, w celu zachowania spójności zaleca się użycie reguły wstępnej.
  • Nmap korzysta z bazy danych scripts/script.db, aby znaleźć dostępne domyślne skrypty i kategorie.

Aby zobaczyć lokalizację wszystkich dostępnych skryptów NSE, uruchom narzędzie lokalizujące na terminalu w następujący sposób:

locate *.nse

/usr/share/nmap/scripts/acarsd-info.nse
/usr/share/nmap/scripts/address-info.nse
/usr/share/nmap/scripts/afp-brute.nse
/usr/share/nmap/scripts/afp-ls.nse
/usr/share/nmap/scripts/afp-path-vuln.nse
/usr/share/nmap/scripts/afp-serverinfo.nse
/usr/share/nmap/scripts/afp-showmount.nse
/usr/share/nmap/scripts/ajp-auth.nse
/usr/share/nmap/scripts/ajp-brute.nse
/usr/share/nmap/scripts/ajp-headers.nse
/usr/share/nmap/scripts/ajp-methods.nse
/usr/share/nmap/scripts/ajp-request.nse
/usr/share/nmap/scripts/allseeingeye-info.nse
/usr/share/nmap/scripts/amqp-info.nse
/usr/share/nmap/scripts/asn-query.nse
...

Skrypty NSE są ładowane przy użyciu flagi --script, która umożliwia także uruchamianie własnych skryptów poprzez podanie kategorii, nazw plików skryptów lub nazw katalogów, w których znajdują się skrypty.

Składnia włączania skryptów jest następująca:

nmap -sC target     #load default scripts
OR
nmap --script filename|category|directory|expression,...   target    

Możesz wyświetlić opis skryptu za pomocą opcji --script-help. Dodatkowo możesz przekazywać argumenty do niektórych skryptów za pomocą opcji --script-args i --script-args-file, ta druga służy do podania nazwy pliku, a nie argument wiersza poleceń.

Aby wykonać skanowanie za pomocą większości domyślnych skryptów, użyj flagi -sC lub alternatywnie użyj flagi --script=default, jak pokazano.

nmap -sC scanme.nmap.org
OR
nmap --script=default scanme.nmap.org
OR
nmap --script default scanme.nmap.org
Przykładowe wyjście
Starting Nmap 7.01 ( https://nmap.org ) at 2017-11-15 10:36 IST
Nmap scan report for scanme.nmap.org (45.33.32.156)
Host is up (0.0027s latency).
Not shown: 999 filtered ports
PORT   STATE SERVICE
80/tcp open  http
|_http-title: Go ahead and ScanMe!

Nmap done: 1 IP address (1 host up) scanned in 11.74 seconds

Aby wykorzystać skrypt w odpowiednim celu, można przede wszystkim uzyskać krótki opis jego działania, np. nagłówki http.

nmap --script-help http-headers scanme.nmap.org
Przykładowe wyjście
Starting Nmap 7.01 ( https://nmap.org ) at 2017-11-15 10:37 IST

http-headers
Categories: discovery safe
https://nmap.org/nsedoc/scripts/http-headers.html
  Performs a HEAD request for the root folder ("/") of a web server and displays the HTTP headers returned.

Ładowanie skryptów NSE w celu wykonania skanowania Nmap

Możesz wybrać lub załadować skrypty w celu przeprowadzenia skanowania różnymi metodami opisanymi poniżej.

Używanie nazwy skryptu

Kiedy już wiesz, co robi skrypt, możesz przeprowadzić skanowanie za jego pomocą. Możesz użyć jednego skryptu lub wprowadzić listę nazw skryptów rozdzielonych przecinkami. Poniższe polecenie umożliwi wyświetlenie nagłówków HTTP skonfigurowanych na serwerze WWW na hoście docelowym.

nmap --script http-headers scanme.nmap.org
Starting Nmap 7.01 ( https://nmap.org ) at 2017-11-15 10:39 IST
Nmap scan report for scanme.nmap.org (45.33.32.156)
Host is up (0.27s latency).
Not shown: 996 closed ports
PORT      STATE    SERVICE
22/tcp    open     ssh
80/tcp    open     http
| http-headers: 
|   Date: Wed, 15 Nov 2017 05:10:04 GMT
|   Server: Apache/2.4.7 (Ubuntu)
|   Accept-Ranges: bytes
|   Vary: Accept-Encoding
|   Connection: close
|   Content-Type: text/html
|   
|_  (Request type: HEAD)
179/tcp   filtered bgp
31337/tcp open     Elite

Nmap done: 1 IP address (1 host up) scanned in 20.96 seconds

Korzystanie z kategorii

Możesz także ładować skrypty z jednej kategorii lub z listy kategorii oddzielonych przecinkami. W tym przykładzie używamy wszystkich skryptów z kategorii domyślnej i rozgłoszeniowej, aby przeprowadzić skanowanie hosta 192.168.56.1.

nmap --script default,broadcast 192.168.56.1

Używanie * symboli wieloznacznych

Jest to przydatne, gdy chcesz wybrać skrypty o podanym wzorcu nazwy. Na przykład, aby załadować wszystkie skrypty o nazwach zaczynających się od ssh, uruchom na terminalu poniższą komendę:

nmap --script "ssh-*" 192.168.56.1

Używanie wyrażeń boolowskich

Możesz także wybierać skrypty za pomocą wyrażeń boolowskich, które możesz zbudować za pomocą operatorów i, lub i nie. Nazwy w wyrażeniach logicznych mogą być kategorią, nazwą pliku z script.db lub wszystkim.

Poniższe polecenie załaduje skrypty z kategorii domyślnych lub rozgłoszeniowych.

nmap --script "default or broadcast" 192.168.56.10

Co jest równoważne:

nmap --script default,broadcast 192.168.56.10

Aby załadować wszystkie skrypty z pominięciem tych z kategorii vuln, uruchom to polecenie na terminalu.

nmap --script "not vuln" 192.168.56.10

Następne polecenie wygląda na nieco skomplikowane, ale jest łatwe do zrozumienia, wybiera skrypty w kategoriach domyślnych lub rozgłoszeniowych, pomijając te, których nazwy zaczynają się od ssh-:

nmap --script "(default or broadcast) and not ssh-*" 192.168.56.10

Co ważne, możliwe jest łączenie kategorii, nazw skryptów, katalogu zawierającego własne skrypty lub wyrażeń boolowskich w celu ładowania skryptów, na przykład:

nmap --script broadcast,vuln,ssh-auth-methods,/path/to/custom/scripts 192.168.56.10

Przekazywanie argumentów do skryptów NSE

Poniżej znajduje się przykład pokazujący jak przekazywać argumenty do skryptów za pomocą opcji –script-args:

nmap --script mysql-audit --script-args "mysql-audit.username='root', \
mysql-audit.password='password_here', mysql-audit.filename='nselib/data/mysql-cis.audit'"

Aby przekazać numer portu, użyj opcji -p nmap:

nmap -p 3306 --script mysql-audit --script-args "mysql-audit.username='root', \ 
mysql-audit.password='password_here' , mysql-audit.filename='nselib/data/mysql-cis.audit'"

Powyższe polecenie uruchamia audyt konfiguracji zabezpieczeń serwera bazy danych MySQL względem części testu porównawczego CIS MySQL v1.0.2. Możesz także tworzyć własne, przydatne, niestandardowe pliki audytu dla innych audytów MySQL.

To tyle na teraz. Więcej informacji możesz znaleźć na stronie podręcznika Nmap lub sprawdzić NSE Usage.

Aby rozpocząć pisanie własnych skryptów NSE, zapoznaj się z tym przewodnikiem: https://nmap.org/book/nse-tutorial.html

Wniosek

Nmap to naprawdę potężne i przydatne narzędzie, którego każdy administrator systemu lub sieci potrzebuje w swoim arsenale bezpieczeństwa – NSE po prostu zwiększa jego wydajność.

W tym artykule przedstawiliśmy silnik skryptów Nmap i sprawdziliśmy, jak znaleźć i wykorzystać różne dostępne skrypty w różnych kategoriach. Jeśli masz jakieś pytania, nie wahaj się do nas napisać, korzystając z poniższego formularza komentarza.