Nmap Summary (ESP)
Last updated
Last updated
Ucz się i praktykuj Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i praktykuj Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
<ip>,<net/mask>
: Wskazuje bezpośrednio adresy IP
-iL <ips_file>
: lista_IPs
-iR <number>
: Liczba losowych adresów IP, można wykluczyć możliwe adresy IP za pomocą --exclude <Ips>
lub --excludefile <file>
.
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 używane z inną opcją, odrzucane są tylko pakiety z innej opcji.
-PR
: Ping ARP. 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 poprzedni, ale z ACK, połączenie obu daje lepsze wyniki.
-PU <ports>
: Celem jest przeciwny, wysyłane są do portów, które powinny być zamknięte. Niektóre firewalle 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ą wysyłane, aby dowiedzieć się, czy cel jest aktywny.
-PY<ports>
: Wysyła sondy SCTP INIT do 80 domyślnie, INIT-ACK(otwarty) lub ABORT(zamknięty) lub nic albo ICMP unreachable(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 niedostępny protokół lub odpowiedzi tego samego protokołu są wysyłane, aby dowiedzieć się, czy jest dostępny.
-n
: Brak DNS
-R
: Zawsze DNS
-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
: Wolniejszy, dla UDP. Głównie: DNS(53), SNMP(161,162), DHCP(67 i 68), (-sU53,161,162,67,68): otwarty(odpowiedź), zamknięty(port nieosiągalny), filtrowany (inny ICMP), otwarty/filtrowany (nic). W przypadku otwarto/filtrowany, -sV wysyła liczne żądania, aby wykryć któreś 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 firewalle i wydobywać informacje. Opierają się na fakcie, że zgodne z normą maszyny powinny odpowiadać RST na wszystkie żądania, które nie mają podniesionych flag SYN, RST lub ACK: otwarty/filtrowany(nic), zamknięty(RST), filtrowany (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 firewalle, aby dowiedzieć się, czy porty są filtrowane czy nie. -sW rozróżnia między otwarte/zamknięte, ponieważ otwarte odpowiadają inną wartością okna: otwarty (RST z oknem innym niż 0), zamknięty (RST z oknem = 0), filtrowany (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 aktywny firewall, ale wiemy, że nie filtrował 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/skaner/ip/ipidseq. Ten skaner opiera się na numerze IPID pakietów IP.
--badsum
: Wysyła błędne sumy, komputery odrzuciłyby pakiety, ale firewalle mogą odpowiedzieć czymś, służy do wykrywania firewalle.
-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 firewalle, przez które nie przechodzi init, 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.
-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. Z -F (szybkie skanowanie) analizuje 100 głównych. Z --top-ports <numero> Analizuje tę liczbę głównych (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 sprawdza od 1024 w górę. 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 wysyła tylko najbardziej prawdopodobne sondy, ale nie wszystkie. Dzięki temu możemy znacznie skrócić czas skanowania UDP
-O Wykrywanie systemu operacyjnego
--osscan-limit Aby dobrze zeskanować hosta, potrzebny jest co najmniej jeden otwarty i jeden zamknięty port, 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 opcja ta zmusza Nmap do większego wysiłku.
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 korzystający z zewnętrznych zasobów
Intrusive: używa skryptów uznawanych za inwazyjne dla celu
Malware: sprawdza, czy istnieją otwarte połączenia złośliwego oprogramowania lub tylnych drzwi (backdoor)
Safe: wykonuje skrypty, które nie są inwazyjne
Vuln: odkrywa najbardziej znane podatności
All: wykonuje wszystkie dostępne skrypty z rozszerzeniem 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 dodaniu skryptu zostanie wykonany zarówno skrypt, jak i skaner, dlatego 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, tak że dopóki wszystkie nie zostaną zanalizowane, nie przechodzi do następnego bloku (i użytkownik nie otrzymuje aktualizacji, dopóki blok nie zostanie zanalizowany). Dlatego dla Nmapa bardziej optymalne jest używanie dużych grup. Domyślnie w klasie C używa 256.
Można to 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ż wbudowany automatyczny kontroler na podstawie stanu sieci): --min-parallelism <numprobes>; --max-parallelism <numprobes>
Można zmieniać czas oczekiwania na rtt, ale zazwyczaj nie jest to konieczne: --min-rtt-timeout <time>, --max-rtt-timeout <time>, --initial-rtt-timeout <time>
Można zmieniać liczbę prób:--max-retries <numtries>
Można zmieniać czas skanowania hosta: --host-timeout <time>
Można zmieniać czas między każdym testem, aby działać wolniej: --scan-delay <time>; --max-scan-delay _<time>
Można zmieniać 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 testem
-T3 --> Działanie domyślne, obejmuje równoległe działanie
-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 ukrywa twoje. Jeśli dodasz ME do listy, Nmap umieści cię tam, lepiej dodać 5 lub 6 przed tobą, aby całkowicie ukryć twoją tożsamość. Można generować losowe adresy IP z RND:<numer> Aby wygenerować <numer> losowych adresów IP. Nie działają z detektorem 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 wykryje twojego adresu IP, musisz go podać za pomocą tej opcji. 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ę bajtów więcej (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 w 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 chce nmap, 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 poziom szczegółowości
-d poziom debugowanie
--reason Powód hosta i stan
--stats-every czas Co jakiś czas informuje nas o postępie
--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 (pobranej z innych bardzo ważnych) i zwraca potencjalne podatności
Używane bazy danych to:
Scipvuldb.csv | http://www.scip.ch/en/?vuldb
Cve.csv | http://cve.mitre.org
Osvdb.csv | http://www.osvdb.org
Securityfocus.csv | http://www.securityfocus.com/bid/
Securitytracker.csv | http://www.securitytracker.com
Xforce.csv | http://xforce.iss.net
Exploitdb.csv | http://www.exploit-db.com
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ć określonej bazy danych: sudo nmap -sV --script=vulscan --script-args vulscandb=cve.csv HOST_A_ESCANEAR
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ć nmapa 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żesz edytować kod analizy tak, aby te wartości w pliku nmap-service-probes
były całkowicie ignorowane.
Dowiedz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Dowiedz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)