# Nmap Podsumowanie (ESP) {{#include ../../banners/hacktricks-training.md}} ``` nmap -sV -sC -O -n -oA nmapscan 192.168.0.1/24 ``` ## Parametry ### IP do skanowania - **`,`:** Wskazuje bezpośrednio adresy IP - **`-iL `:** list_IPs - **`-iR `**: Liczba losowych adresów IP, możesz wykluczyć możliwe adresy IP za pomocą `--exclude ` lub `--excludefile `. ### Odkrywanie sprzętu Domyślnie Nmap uruchamia fazę odkrywania składającą się z: `-PA80 -PS443 -PE -PP` - **`-sL`**: Nie jest inwazyjne, wymienia cele, wykonując **DNS** zapytania w celu rozwiązania nazw. Jest przydatne, aby wiedzieć, czy na przykład www.prueba.es/24 wszystkie adresy IP są naszymi celami. - **`-Pn`**: **Brak pingu**. Jest to przydatne, jeśli wiesz, że wszystkie są aktywne (jeśli nie, możesz stracić dużo czasu, ale ta opcja również produkuje fałszywe negatywy mówiące, że nie są aktywne), zapobiega fazie odkrywania. - **`-sn`** : **Brak skanowania portów**. Po zakończeniu fazy rozpoznania, nie skanuje portów. Jest stosunkowo dyskretne i pozwala na małe skanowanie sieci. Z uprawnieniami wysyła ACK (-PA) do 80, SYN(-PS) do 443 oraz żądanie echa i żądanie znacznika czasu, bez uprawnień zawsze kończy połączenia. Jeśli celem jest sieć, używa tylko ARP(-PR). Jeśli używane z inną opcją, tylko pakiety innej opcji są odrzucane. - **`-PR`**: **Ping ARP**. Jest używane domyślnie podczas analizy komputerów w naszej sieci, jest szybsze niż używanie pingów. Jeśli nie chcesz używać pakietów ARP, użyj `--send-ip`. - **`-PS `**: Wysyła pakiety SYN, na które jeśli odpowiada SYN/ACK, jest otwarty (na które odpowiada RST, aby nie zakończyć połączenia), jeśli odpowiada RST, jest zamknięty, a jeśli nie odpowiada, jest niedostępny. W przypadku braku uprawnień automatycznie używane jest całkowite połączenie. Jeśli nie podano portów, wysyła do 80. - **`-PA `**: Jak poprzednia, ale z ACK, łącząc je, daje lepsze wyniki. - **`-PU `**: Cel jest przeciwny, są wysyłane do portów, które mają być zamknięte. Niektóre zapory ogniowe sprawdzają tylko połączenia TCP. Jeśli jest zamknięty, odpowiada portem niedostępnym, jeśli odpowiada innym icmp lub nie odpowiada, pozostaje jako niedostępny cel. - **`-PE, -PP, -PM`** : ICMP PINGS: echo replay, timestamp i addresmask. Są uruchamiane, aby dowiedzieć się, czy cel jest aktywny. - **`-PY`**: Wysyła SCTP INIT proby do 80 domyślnie, INIT-ACK(open) lub ABORT(closed) lub nic lub ICMP unreachable(inactive) mogą być odpowiedzią. - **`-PO `**: 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 pozostałych tylko nagłówek IP. Celem tego jest, aby z powodu zniekształcenia nagłówków, odpowiedzi na protokół niedostępny lub odpowiedzi tego samego protokołu były odpowiedzią, aby wiedzieć, czy jest aktywny. - **`-n`**: Brak DNS - **`-R`**: DNS zawsze ### Techniki skanowania portów - **`-sS`**: Nie kończy połączenia, więc nie pozostawia śladów, bardzo dobre, jeśli można to użyć. (uprawnienia) Jest to domyślnie używane. - **`-sT`**: Kończy połączenie, więc pozostawia ślad, ale można to użyć na pewno. 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 niedostępny), filtrowane (inny ICMP), otwarte/filtrowane (nic). W przypadku otwarte/filtrowane, -sV wysyła liczne zapytania, aby wykryć dowolną z wersji, które nmap obsługuje i może wykryć prawdziwy stan. Zwiększa to znacznie 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 ogniowe i wydobywać informacje. Opierają się na tym, że standardowe maszyny zgodne powinny odpowiadać RST na wszystkie zapytania, które nie mają SYN, RST lub ACK. Odpowiedzi: otwarte/filtrowane(nic), zamknięte(RST), filtrowane (ICMP niedostępny). Niezawodne na Windows, Cisco, BSDI i OS/400. Na unixie tak. - **`-sM`**: Skanowanie Maimon: Wysyła flagi FIN i ACK, używane dla BSD, obecnie zwróci wszystko jako zamknięte. - **`-sA, sW`**: ACK i Window, używane do wykrywania zapór ogniowych, aby wiedzieć, 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 okno = 0), filtrowane (ICMP niedostępny 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 jest kilka otwartych, działa dobrze, a jeśli jest wiele otwartych i kilka zamkniętych, działa odwrotnie. - **`-sI`:** Skanowanie Idle. W przypadkach, gdy istnieje aktywna zapora ogniowa, ale wiemy, że nie filtruje do określonego IP (lub gdy po prostu chcemy anonimowości), możemy użyć skanera zombie (działa dla wszystkich portów), aby szukać możliwych zombie, możemy użyć skryptu ipidseq lub exploita auxiliary/scanner/ip/ipidseq. Ten skaner opiera się na numerze IPID pakietów IP. - **`--badsum`:** Wysyła złą sumę, komputery odrzucą pakiety, ale zapory ogniowe mogą odpowiedzieć na coś, jest używane do wykrywania zapór ogniowych. - **`-sZ`:** "Dziwny" skaner SCTP, podczas wysyłania prób z fragmentami cookie echo powinny być odrzucane, jeśli są otwarte lub odpowiadać ABORT, jeśli zamknięte. Może przejść przez zapory ogniowe, przez które init nie przechodzi, złe jest to, że nie rozróżnia między filtrowanymi a otwartymi. - **`-sO`:** Skanowanie protokołu IP. Wysyła złe i puste nagłówki, w których czasami nie można nawet rozróżnić protokołu. Jeśli przychodzi ICMP niedostępny protokół, jest zamknięty, jeśli przychodzi niedostępny port, jest otwarty, jeśli przychodzi inny błąd, filtrowany, jeśli nic nie przychodzi, otwarty|filtrowany. - **`-b `:** FTPhost--> Używane do skanowania hosta z innego, odbywa się to przez połączenie z ftp innej maszyny i poproszenie jej o wysłanie plików do portów, które chcesz skanować z innej maszyny, w zależności od odpowiedzi będziemy wiedzieć, czy są otwarte, czy nie. \[\:\@]\\[:\] Prawie wszystkie serwery ftps już nie pozwalają na to i dlatego ma to małe praktyczne zastosowanie. ### **Analiza Skupienia** **-p:** Używane do określenia portów do skanowania. Aby wybrać wszystkie 65,335 portów: **-p-** lub **-p all**. Nmap ma wewnętrzną klasyfikację opartą na popularności. Domyślnie używa 1000 najpopularniejszych portów. Z **-F** (szybkie skanowanie) analizuje 100 najpopularniejszych. Z **--top-ports ** analizuje tę liczbę najpopularniejszych portów (od 1 do 65,335). Sprawdza porty w losowej kolejności; aby temu zapobiec, użyj **-r**. Możemy również wybrać konkretne porty: 20-30,80,443,1024- (to ostatnie oznacza, że szuka od 1024 wzwyż). 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 popularnych portach Nmap: -p [-1024] analizuje do portu 1024 z tych zawartych w nmap-services. **--port-ratio ** Analizuje najczęściej używane porty w ramach stosunku między 0 a 1 **-sV** Skanowanie wersji, intensywność można regulować od 0 do 9, domyślnie wynosi 7. **--version-intensity ** Regulujemy intensywność, tak aby im niższa, tym tylko najprawdopodobniejsze próby będą uruchamiane, ale nie wszystkie. Dzięki temu możemy znacznie skrócić czas skanowania UDP **-O** Wykrywanie systemu operacyjnego **--osscan-limit** Do prawidłowego skanowania hosta potrzebny jest przynajmniej jeden otwarty port i jeden zamknięty port. Jeśli ten warunek nie jest spełniony i ustawiliśmy to, nie podejmie próby przewidywania systemu operacyjnego (oszczędza czas) **--osscan-guess** Gdy wykrywanie systemu operacyjnego nie jest doskonałe, to sprawia, że próbuje bardziej **Skrypty** --script __|__|__|__[,...] Aby użyć domyślnych skryptów, użyj -sC lub --script=default Dostępne typy to: auth, broadcast, default, discovery, dos, exploit, external, fuzzer, intrusive, malware, safe, version i vuln - **Auth:** wykonuje wszystkie dostępne skrypty uwierzytelniające - **Default:** wykonuje podstawowe skrypty domyślne - **Discovery:** pobiera informacje z celu lub ofiary - **External:** skrypt do korzystania z zewnętrznych zasobów - **Intrusive:** używa skryptów uznawanych za inwazyjne dla ofiary lub celu - **Malware:** sprawdza połączenia otwarte przez złośliwy kod lub tylne drzwi - **Safe:** wykonuje skrypty nieinwazyjne - **Vuln:** odkrywa najbardziej znane luki - **All:** wykonuje absolutnie wszystkie dostępne skrypty rozszerzeń NSE Aby wyszukać skrypty: **nmap --script-help="http-\*" -> Te zaczynające się od http-** **nmap --script-help="not intrusive" -> Wszystkie oprócz tych** **nmap --script-help="default or safe" -> Te w jednym lub obu** **nmap --script-help="default and safe" --> Te w obu** **nmap --script-help="(default or safe or intrusive) and not http-\*"** --script-args __=__,__={__=__},__={__,__} --script-args-file __ --script-help __|__|__|__|all[,...] --script-trace ---> Dostarcza informacji o tym, jak postępuje skrypt --script-updatedb **Aby użyć skryptu, wystarczy wpisać: nmap --script Script_Name target** --> Podczas używania skryptu, zarówno skrypt, jak i skaner będą wykonywane, więc opcje skanera można również dodać. Możemy dodać **"safe=1"**, aby wykonać tylko bezpieczne. **Kontrola czasu** **Nmap może modyfikować czas w sekundach, minutach, ms:** --host-timeout arguments 900000ms, 900, 900s, i 15m wszystko robi to samo. Nmap dzieli całkowitą liczbę hostów do skanowania na grupy i analizuje te grupy w blokach, więc nie przechodzi do następnego bloku, dopóki wszystkie nie zostaną przeanalizowane (a użytkownik nie otrzymuje żadnych aktualizacji, dopóki blok nie zostanie przeanalizowany). W ten sposób jest bardziej optymalne dla Nmap używać dużych grup. Domyślnie w klasie C używa 256. Można to zmienić za pomocą **--min-hostgroup** _****_**;** **--max-hostgroup** _****_ (Dostosuj rozmiary grup skanowania równoległego) Możesz kontrolować liczbę równoległych skanerów, ale lepiej tego nie robić (Nmap już wprowadza automatyczną kontrolę w oparciu o status sieci): **--min-parallelism** _****_**;** **--max-parallelism** _****_ Możemy zmodyfikować czas oczekiwania RTT, ale zazwyczaj nie jest to konieczne: **--min-rtt-timeout** _**