hacktricks/generic-methodologies-and-resources/pentesting-network/nmap-summary-esp.md

21 KiB

Podsumowanie Nmap (ESP)

Zacznij od zera i stań się ekspertem od hakowania AWS dzięki htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

{% embed url="https://websec.nl/" %}

nmap -sV -sC -O -n -oA nmapscan 192.168.0.1/24

Parametry

Adresy IP do skanowania

  • <ip>,<net/mask>: Wskazuje bezpośrednio adresy IP
  • -iL <ips_file>: list_IPs
  • -iR <number>: Liczba losowych adresów IP, można wykluczyć możliwe adresy IP za pomocą --exclude <Ips> lub --excludefile <file>.

Odkrywanie sprzętu

Domyślnie Nmap uruchamia fazę odkrywania składającą się z: -PA80 -PS443 -PE -PP

  • -sL: Nieinwazyjne, wyświetla cele, wysyłając żądania DNS w celu rozwiązania nazw. Jest przydatne, aby dowiedzieć się, czy na przykład www.prueba.es/24 wszystkie adresy IP są naszymi celami.
  • -Pn: Brak pinga. Jest to przydatne, jeśli wiesz, że wszystkie z nich są aktywne (jeśli nie, możesz stracić dużo czasu, ale ta opcja również generuje fałszywe negatywy mówiąc, że nie są aktywne), zapobiega fazie odkrywania.
  • -sn : Brak skanowania portów. Po zakończeniu fazy rozpoznawczej nie skanuje portów. Jest stosunkowo dyskretny i pozwala na mały skan sieci. Z uprawnieniami wysyła ACK (-PA) do 80, SYN(-PS) do 443 oraz żądanie echo i żądanie znacznika czasu, bez uprawnień zawsze kończy połączenia. Jeśli celem jest sieć, używa tylko ARP(-PR). Jeśli jest używany z inną opcją, odrzucane są tylko pakiety z innej opcji.
  • -PR: Ping ARP. Jest używany domyślnie podczas analizy komputerów w naszej sieci, jest szybszy niż użycie pingów. Jeśli nie chcesz używać pakietów ARP, użyj --send-ip.
  • -PS <ports>: Wysyła pakiety SYN, na które jeśli odpowiada SYN/ACK, jest otwarty (jeśli odpowiada RST, aby nie zakończyć połączenia), jeśli odpowiada RST, jest zamknięty, a jeśli nie odpowiada, jest nieosiągalny. W przypadku braku uprawnień automatycznie używane jest pełne połączenie. Jeśli nie podano portów, wysyła je do 80.
  • -PA <ports>: Jak poprzednia opcja, ale z ACK, łącząc obie daje lepsze wyniki.
  • -PU <ports>: Celem jest przeciwny, są wysyłane do portów, które spodziewają się być zamknięte. Niektóre zapory sieciowe sprawdzają tylko połączenia TCP. Jeśli jest zamknięty, odpowiada portem nieosiągalnym, jeśli odpowiada innym icmp lub nie odpowiada, pozostaje jako nieosiągalny cel.
  • -PE, -PP, -PM : PINGI ICMP: odpowiedź echo, znacznik czasu i maska adresu. Są one wysyłane, aby dowiedzieć się, czy cel jest aktywny.
  • -PY<ports>: Wysyła sondy SCTP INIT do 80 domyślnie, INIT-ACK(otwarte) lub ABORT(zamknięte) lub nic albo ICMP nieosiągalny(nieaktywny) mogą być odpowiedziane.
  • -PO <protocols>: W nagłówkach wskazany jest protokół, domyślnie 1(ICMP), 2(IGMP) i 4(Encap IP). Dla protokołów ICMP, IGMP, TCP (6) i UDP (17) wysyłane są nagłówki protokołów, dla reszty wysyłany jest tylko nagłówek IP. Celem tego jest to, że z powodu zniekształcenia nagłówków, odpowiedzi na nieosiągalny protokół lub odpowiedzi tego samego protokołu są wysyłane, aby dowiedzieć się, czy jest aktywny.
  • -n: Brak DNS
  • -R: Zawsze DNS

Techniki skanowania portów

  • -sS: Nie kończy połączenia, więc nie pozostawia śladu, bardzo dobre, jeśli można go użyć (uprawnienia). Jest używany domyślnie.
  • -sT: Kończy połączenie, więc pozostawia ślad, ale można go użyć z pewnością. Domyślnie bez uprawnień.
  • -sU: Wolniejsze, dla UDP. Głównie: DNS(53), SNMP(161,162), DHCP(67 i 68), (-sU53,161,162,67,68): otwarte(odpowiedź), zamknięte(port nieosiągalny), filtrowane (inny ICMP), otwarte/filtrowane (nic). W przypadku otwarto/filtrowane, -sV wysyła liczne żądania, aby wykryć jedną z wersji obsługiwanych przez nmap i może wykryć prawdziwy stan. Znacznie zwiększa czas.
  • -sY: Protokół SCTP nie udaje się nawiązać połączenia, więc nie ma logów, działa jak -PY
  • -sN,-sX,-sF: Null, Fin, Xmas, mogą przenikać przez niektóre zapory sieciowe i wydobywać informacje. Opierają się na tym, że zgodne z normą maszyny powinny odpowiadać RST na wszystkie żądania, które nie mają podniesionych flag SYN, RST lub ACK: otwarte/filtrowane(nic), zamknięte(RST), filtrowane (ICMP nieosiągalny). Niepewne w przypadku systemów Windows, CIsco, BSDI i OS/400. W systemach Unix tak.
  • -sM: Skan Maimon: Wysyła flagi FIN i ACK, używane dla BSD, obecnie zwróci wszystko jako zamknięte.
  • -sA, sW: ACK i Window, służy do wykrywania zapór sieciowych, aby dowiedzieć się, czy porty są filtrowane czy nie. -sW rozróżnia między otwartymi/zamkniętymi, ponieważ otwarte odpowiadają inną wartością okna: otwarte (RST z oknem innym niż 0), zamknięte (RST z oknem = 0), filtrowane (ICMP nieosiągalny lub nic). Nie wszystkie komputery działają w ten sposób, więc jeśli wszystko jest zamknięte, to nie działa, jeśli kilka jest otwartych, to działa dobrze, a jeśli jest wiele otwartych i kilka zamkniętych, to działa odwrotnie.
  • -sI: Skan bezczynności. W przypadkach, gdy istnieje aktywna zapora sieciowa, ale wiemy, że nie filtrowuje do określonego adresu IP (lub gdy po prostu chcemy zachować anonimowość), możemy użyć skanera zombie (działa dla wszystkich portów), aby znaleźć możliwe zombi, możemy użyć skryptu ipidseq lub eksploatacji pomocniczej/skanera/ip/ipidseq. Ten skaner opiera się na numerze IPID pakietów IP.
  • --badsum: Wysyła błędne sumy, komputery odrzuciłyby pakiety, ale zapory sieciowe mogą odpowiedzieć czymś, służy do wykrywania zapór sieciowych.
  • -sZ: "Dziwny" skaner SCTP, podczas wysyłania sond z fragmentami echo cookie powinny być odrzucane, jeśli są otwarte lub odpowiedziane ABORT, jeśli są zamknięte. Może przechodzić przez zapory sieciowe, przez które nie przechodzi inicjacja, złe jest to, że nie rozróżnia między filtrowanymi i otwartymi.
  • -sO: Skan protokołu Ip. Wysyła złe i puste nagłówki, w których czasami nawet protokół nie może być odróżniony. Jeśli dotrze nieosiągalny protokół ICMP, jest zamknięty, jeśli dotrze nieosiągalny port, jest otwarty, jeśli dotrze inny błąd, jest filtrowany, jeśli nic nie dotrze, jest otwarty|filtrowany.
  • -b <server>: FTPhost--> Służy do skanowania hosta z innego, jest to robione poprzez połączenie z ftp innego komputera i proszenie go o wysłanie plików do portów, które chcesz zeskanować z innego komputera, na podstawie odpowiedzi dowiemy się, czy są otwarte czy nie. [<user>:<password>@]<server>[:<port>] Prawie wszystkie serwery ftp już nie pozwalają na to, dlatego jest to mało praktyczne.

Centrowanie analizy

-p: Służy do określenia skanowanych portów. Aby wybrać 65335: -p- lub -p all. Nmap ma wewnętrzną klasyfikację według popularności. Domyślnie używa 1000 głównych portów. Z -F (szybkie skanowanie) analizuje 100 głównych portów. Z --top-ports <numero> Analizuje tę liczbę głównych portów (od 1 do 65335). Sprawdza porty w losowej kolejności, aby tego uniknąć -r. Możemy również wybrać porty: 20-30,80,443,1024- To ostatnie oznacza, że patrzy w przód od 1024. Możemy również grupować porty według protokołów: U:53,T:21-25,80,139,S:9. Możemy również wybrać zakres wśród popularnych portów nmap: -p [-1024] analizuje do 1024 z tych zawartych w nmap-services. --port-ratio <ratio> Analizuje najczęściej używane porty z określonym współczynnikiem, który powinien być między 0 a 1

-sV Skanowanie wersji, można regulować intensywność od 0 do 9, domyślnie 7.

--version-intensity <numero> Reguluje intensywność, im niższa, tym tylko najbardziej prawdopodobne sondy są wysyłane, ale nie wszystkie. Dzięki temu możemy znacznie skrócić czas skanowania UDP

-O Wykrywanie systemu operacyjnego

--osscan-limit Aby dobrze zeskanować hosta, potrzebne jest, aby co najmniej jeden port był otwarty, a drugi zamknięty, jeśli ta zasada nie jest spełniona i użyliśmy tego, nie próbuje przewidywać systemu operacyjnego (oszczędza czas) --osscan-guess Gdy wykrycie systemu operacyjnego nie jest idealne, to sprawia, że nmap się bardziej stara

Skrypty

--script <nazwapliku>|<kategoria>|<katalog>|<wyrażenie>[,...]

Domyślnie można użyć -sC lub --script=default

Dostępne kategorie to: auth, broadcast, default, discovery, dos, exploit, external, fuzzer, intrusive, malware, safe, version i vuln

  • Auth: wykonuje wszystkie dostępne skrypty autoryzacyjne
  • Default: wykonuje podstawowe skrypty domyślne narzędzia
  • Discovery: pozyskuje informacje o celu
  • External: skrypt do korzystania z zewnętrznych zasobów
  • Intrusive: używa skryptów uznawanych za inwazyjne dla celu
  • Malware: sprawdza, czy istnieją otwarte połączenia złośliwych kodów lub tylnych drzwi (backdoors)
  • Safe: wykonuje skrypty, które nie są inwazyjne
  • Vuln: odkrywa najbardziej znane podatności
  • All: wykonuje wszystkie dostępne skrypty NSE

Aby wyszukać skrypty:

nmap --script-help="http-*" -> Te, które zaczynają się od http-

nmap --script-help="not intrusive" -> Wszystkie oprócz tych

nmap --script-help="default or safe" -> Te, które są w jednym lub drugim lub obu

nmap --script-help="default and safe" --> Te, które są w obu

nmap --script-help="(default or safe or intrusive) and not http-*"

--script-args <n1>=<v1>,<n2>={<n3>=<v3>},<n4>={<v4>,<v5>}

--script-args-file <nazwapliku>

--script-help <nazwapliku>|<kategoria>|<katalog>|<wyrażenie>|all[,...]

--script-trace ---> Udziela informacji o działaniu skryptu

--script-updatedb

Aby użyć skryptu, wystarczy wpisać: nmap --script Nazwa_skryptu cel --> Po wpisaniu skryptu zostanie wykonany zarówno skrypt, jak i skaner, więc można również dodawać opcje skanera, można dodać "safe=1" aby wykonać tylko te, które są bezpieczne.

Kontrola czasu

Nmap może zmieniać czas w sekundach, minutach, ms: --host-timeout arguments 900000ms, 900, 900s, and 15m all do the same thing.

Nmap dzieli łączną liczbę hostów do zeskanowania na grupy i analizuje te grupy blokami, dopóki nie zostaną zeskanowane wszystkie, nie przechodzi do następnego bloku (i użytkownik nie otrzymuje aktualizacji, dopóki blok nie zostanie zeskanowany). Dlatego dla nmapa bardziej optymalne jest używanie dużych grup. Domyślnie w klasie C używa 256.

Można zmienić za pomocą**--min-hostgroup** <numhosts>; --max-hostgroup <numhosts> (Dostosuj rozmiary grup skanowania równoległego)

Można kontrolować liczbę skanerów równoległych, ale lepiej tego nie robić (nmap ma już wbudowaną kontrolę automatyczną na podstawie stanu sieci): --min-parallelism <numprobes>; --max-parallelism <numprobes>

Można zmienić limit czasu rtt, ale zazwyczaj nie jest to konieczne: --min-rtt-timeout <time>, --max-rtt-timeout <time>, --initial-rtt-timeout <time>

Można zmienić liczbę prób:--max-retries <numtries>

Można zmienić czas skanowania hosta: --host-timeout <time>

Można zmienić czas między każdym skanowaniem, aby działać wolniej: --scan-delay <time>; --max-scan-delay <time>

Można zmienić liczbę pakietów na sekundę: --min-rate <number>; --max-rate <number>

Wiele portów długo odpowiada, gdy są filtrowane lub zamknięte, jeśli interesują nas tylko otwarte, możemy działać szybciej z: --defeat-rst-ratelimit

Aby określić, jak agresywne ma być nmap: -T paranoid|sneaky|polite|normal|aggressive|insane

-T (0-1)

-T0 --> Skanuje tylko 1 port na raz i czeka 5 minut przed kolejnym

-T1 i T2 --> Bardzo podobne, ale czekają tylko 15 i 0,4 sekundy między każdym skanowaniem

-T3 --> Działanie domyślne, obejmuje równoległe skanowanie

-T4 --> --max-rtt-timeout 1250ms --min-rtt-timeout 100ms --initial-rtt-timeout 500ms --max-retries 6 --max-scan-delay 10ms

-T5 --> --max-rtt-timeout 300ms --min-rtt-timeout 50ms --initial-rtt-timeout 250ms --max-retries 2 --host-timeout 15m --max-scan-delay 5ms

Firewall/IDS

Blokuje porty i analizuje pakiety.

-f Do fragmentacji pakietów, domyślnie fragmentuje je co 8 bajtów po nagłówku, aby określić ten rozmiar, używamy ..mtu (wtedy nie używamy -f), przesunięcie musi być wielokrotnością 8. Skanery wersji i skrypty nie obsługują fragmentacji

-D decoy1,decoy2,ME Nmap wysyła skanery, ale z innymi adresami IP jako źródłowymi, w ten sposób ukrywasz swoje. Jeśli dodasz ME do listy, nmap umieści cię tam, lepiej dodać 5 lub 6 przed tobą, aby całkowicie ukryć swoją tożsamość. Można generować losowe adresy IP za pomocą RND:<numer> Aby wygenerować <numer> losowych adresów IP. Nie działają z wykrywaniem wersji bez połączenia TCP. Jeśli jesteś w sieci, lepiej użyć aktywnych adresów IP, w przeciwnym razie będzie łatwo ustalić, że jesteś jedynym aktywnym.

Aby użyć losowych adresów IP: nmap-D RND: 10 Cel_IP

-S IP Gdy Nmap nie wykrywa twojego adresu IP, musisz go podać za pomocą tego. Może również sprawić, że wydaje się, że inny cel skanuje ich.

-e <interfejs> Do wyboru interfejsu

Wielu administratorów pozostawia otwarte porty wejściowe, aby wszystko działało poprawnie i łatwiej jest im znaleźć inne rozwiązanie. Mogą to być porty DNS lub FTP... aby znaleźć tę podatność, nmap zawiera: --source-port <numerportu>;-g <numerportu> Są równoważne

--data <ciąg szesnastkowy> Do wysyłania tekstu szesnastkowego: --data 0xdeadbeef and --data \xCA\xFE\x09

--data-string <ciąg> Do wysyłania zwykłego tekstu: --data-string "Skan przeprowadzony przez Security Ops, numer wewnętrzny 7192"

--data-length <liczba> Nmap wysyła tylko nagłówki, dzięki temu dodajemy do nich określoną liczbę dodatkowych bajtów (które zostaną wygenerowane losowo)

Aby skonfigurować pakiet IP w pełni, użyj --ip-options

Jeśli chcesz zobaczyć opcje w wysyłanych i otrzymywanych pakietach, określ --packet-trace. Aby uzyskać więcej informacji i przykłady korzystania z opcji IP z Nmap, zobacz http://seclists.org/nmap-dev/2006/q3/52.

--ttl <wartość>

--randomize-hosts Aby atak był mniej oczywisty

--spoof-mac <adresMAC, prefiks lub nazwa producenta> Do zmiany adresu MAC, przykłady: Apple, 0, 01:02:03:04:05:06, deadbeefcafe, 0020F2, and Cisco --proxies <Lista oddzielonych przecinkami adresów proxy> Aby korzystać z proxy, czasami proxy nie utrzymuje tylu otwartych połączeń, ile nmap chce, dlatego należy dostosować równoległość: --max-parallelism

-sP Do odkrywania hostów w sieci, w której się znajdujemy za pomocą ARP

Wielu administratorów tworzy regułę w firewallu, która pozwala na przepuszczanie wszystkich pakietów pochodzących z określonego portu (np. 20, 53 i 67), możemy powiedzieć nmapowi, aby wysyłał nasze pakiety z tych portów: nmap --source-port 53 Ip

Wyjścia

-oN plik Normalne wyjście

-oX plik Wyjście XML

-oS plik Wyjście dla script kiddies

-oG plik Wyjście w formacie grepable

-oA plik Wszystkie oprócz -oS

-v poziom szczegółowość

-d poziom debugowanie

--reason Powód hosta i stan

--stats-every czas Co jakiś czas pokazuje postęp

--packet-trace Aby zobaczyć, jakie pakiety są wysyłane, można określić filtry, takie jak: --version-trace lub --script-trace

--open pokazuje otwarte, otwarte|filtrowane i niezfiltrowane

--resume plik Tworzy podsumowanie

Różne

-6 Pozwala na IPv6

-A To samo co -O -sV -sC --traceroute

Czas działania

Podczas działania nmap możemy zmieniać opcje:

v / V Zwiększ / zmniejsz poziom szczegółowości

d / D Zwiększ / zmniejsz poziom debugowania

p / P Włącz / wyłącz śledzenie pakietów

? Wyświetl pomoc interakcji w czasie rzeczywistym

Vulscan

Skrypt nmapa, który sprawdza wersje usług uzyskane z bazy danych offline (pobieranej z innych bardzo ważnych) i zwraca potencjalne podatności

Używane bazy danych to:

  1. Scipvuldb.csv | http://www.scip.ch/en/?vuldb
  2. Cve.csv | http://cve.mitre.org
  3. Osvdb.csv | http://www.osvdb.org
  4. Securityfocus.csv | http://www.securityfocus.com/bid/
  5. Securitytracker.csv | http://www.securitytracker.com
  6. Xforce.csv | http://xforce.iss.net
  7. Exploitdb.csv | http://www.exploit-db.com
  8. Openvas.csv | http://www.openvas.org

Aby pobrać i zainstalować go w folderze Nmap:

wget http://www.computec.ch/projekte/vulscan/download/nmap_nse_vulscan-2.0.tar.gz && tar -czvf nmap_nse_vulscan-2.0.tar.gz vulscan/ && sudo cp -r vulscan/ /usr/share/nmap/scripts/

Należy również pobrać pakiety z baz danych i dodać je do /usr/share/nmap/scripts/vulscan/

Użycie:

Aby użyć wszystkich: sudo nmap -sV --script=vulscan HOST_A_ESCANEAR

Aby użyć konkretnej bazy danych: sudo nmap -sV --script=vulscan --script-args vulscandb=cve.csv HOST_A_ESCANEAR

Przyspieszenie skanowania usług Nmap x16

Zgodnie z tym postem można przyspieszyć analizę usług nmap, modyfikując wszystkie wartości totalwaitms w /usr/share/nmap/nmap-service-probes na 300 i tcpwrappedms na 200.

Ponadto sondy, które nie mają zdefiniowanej wartości servicewaitms, używają domyślnej wartości 5000. Dlatego możemy albo dodać wartości do każdej z sond, albo skompilować nmap samodzielnie i zmienić domyślną wartość w service_scan.h.

Jeśli nie chcesz w ogóle zmieniać wartości totalwaitms i tcpwrappedms w pliku /usr/share/nmap/nmap-service-probes, można zmodyfikować kod parsowania tak, aby te wartości w pliku nmap-service-probes były całkowicie ignorowane.

{% embed url="https://websec.nl/" %}

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks: