Riepilogo di Nmap (ESP)

Reading time: 14 minutes

tip

Impara e pratica l'Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica l'Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

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

Parametri

IP da scansionare

  • <ip>,<net/mask>: Indica gli ip direttamente
  • -iL <ips_file>: list_IPs
  • -iR <number>: Numero di Ips casuali, puoi escludere possibili Ips con --exclude <Ips> o --excludefile <file>.

Scoperta dell'attrezzatura

Per impostazione predefinita, Nmap avvia una fase di scoperta composta da: -PA80 -PS443 -PE -PP

  • -sL: Non è invasivo, elenca i target effettuando richieste DNS per risolvere i nomi. È utile sapere se, ad esempio, www.prueba.es/24 tutti gli Ips sono i nostri target.
  • -Pn: Nessun ping. Questo è utile se sai che tutti sono attivi (in caso contrario, potresti perdere molto tempo, ma questa opzione produce anche falsi negativi dicendo che non sono attivi), impedisce la fase di scoperta.
  • -sn : Nessuna scansione delle porte. Dopo aver completato la fase di ricognizione, non scansiona le porte. È relativamente furtivo e consente una piccola scansione di rete. Con privilegi invia un ACK (-PA) a 80, un SYN(-PS) a 443 e una richiesta di echo e una richiesta di Timestamp, senza privilegi completa sempre le connessioni. Se il target è la rete, utilizza solo ARP(-PR). Se usato con un'altra opzione, vengono scartati solo i pacchetti dell'altra opzione.
  • -PR: Ping ARP. Viene utilizzato per impostazione predefinita quando si analizzano i computer nella nostra rete, è più veloce rispetto all'uso dei ping. Se non vuoi utilizzare pacchetti ARP usa --send-ip.
  • -PS <ports>: Invia pacchetti SYN ai quali, se risponde SYN/ACK, è aperto (a cui risponde con RST per non terminare la connessione), se risponde RST è chiuso e se non risponde è irraggiungibile. In caso di mancanza di privilegi, viene utilizzata automaticamente una connessione totale. Se non vengono forniti port, viene inviato a 80.
  • -PA <ports>: Come il precedente ma con ACK, combinando entrambi si ottengono risultati migliori.
  • -PU <ports>: L'obiettivo è l'opposto, vengono inviati a porte che ci si aspetta siano chiuse. Alcuni firewall controllano solo le connessioni TCP. Se è chiusa, viene risposto con porta irraggiungibile, se viene risposto con un altro icmp o non viene risposto, viene lasciato come irraggiungibile.
  • -PE, -PP, -PM : ICMP PINGS: echo replay, timestamp e addresmask. Vengono lanciati per scoprire se il target è attivo.
  • -PY<ports>: Invia probe SCTP INIT a 80 per impostazione predefinita, può rispondere INIT-ACK(aperto) o ABORT(chiuso) o nulla o ICMP irraggiungibile(inattivo).
  • -PO <protocols>: Viene indicato un protocollo negli header, per impostazione predefinita 1(ICMP), 2(IGMP) e 4(Encap IP). Per i protocolli ICMP, IGMP, TCP (6) e UDP (17) vengono inviati gli header del protocollo, per il resto viene inviato solo l'header IP. Lo scopo di questo è che a causa della malformazione degli header, vengono risposte Protocol irraggiungibile o risposte dello stesso protocollo per sapere se è attivo.
  • -n: Nessun DNS
  • -R: DNS sempre

Tecniche di scansione delle porte

  • -sS: Non completa la connessione quindi non lascia tracce, molto buono se può essere usato.(privilegi) È quello utilizzato per impostazione predefinita.
  • -sT: Completa la connessione, quindi lascia una traccia, ma può essere utilizzato con certezza. Per impostazione predefinita senza privilegi.
  • -sU: Più lento, per UDP. Principalmente: DNS(53), SNMP(161,162), DHCP(67 e 68), (-sU53,161,162,67,68): aperto(risposta), chiuso(porta irraggiungibile), filtrato (un altro ICMP), aperto/filtrato (nulla). In caso di aperto/filtrato, -sV invia numerose richieste per rilevare una delle versioni che nmap supporta e può rilevare il vero stato. Aumenta molto il tempo.
  • -sY: Il protocollo SCTP non riesce a stabilire la connessione, quindi non ci sono log, funziona come -PY
  • -sN,-sX,-sF: Null, Fin, Xmas, possono penetrare alcuni firewall ed estrarre informazioni. Si basano sul fatto che le macchine conformi agli standard dovrebbero rispondere con RST a tutte le richieste che non hanno ritardi SYN, RST o ACK: aperto/filtrato(nulla), chiuso(RST), filtrato (ICMP irraggiungibile). Inaffidabile su Windows, Cisco, BSDI e OS/400. Su unix sì.
  • -sM: Scansione Maimon: Invia flag FIN e ACK, utilizzato per BSD, attualmente restituirà tutto come chiuso.
  • -sA, sW: ACK e Window, viene utilizzato per rilevare firewall, per sapere se le porte sono filtrate o meno. Il -sW distingue tra aperto/chiuso poiché quelli aperti rispondono con un valore di finestra diverso: aperto (RST con finestra diversa da 0), chiuso (RST finestra = 0), filtrato (ICMP irraggiungibile o nulla). Non tutti i computer funzionano in questo modo, quindi se è tutto chiuso, non funziona, se è pochi aperti, funziona bene, e se è molti aperti e pochi chiusi, funziona al contrario.
  • -sI: Scansione Idle. Per i casi in cui c'è un firewall attivo ma sappiamo che non filtra a un certo Ip (o quando vogliamo semplicemente anonimato) possiamo utilizzare lo scanner zombie (funziona per tutte le porte), per cercare possibili zombie possiamo usare lo script ipidseq o l'exploit ausiliario/scanner/ip/ipidseq. Questo scanner si basa sul numero IPID dei pacchetti IP.
  • --badsum: Invia la somma errata, i computer scarterebbero i pacchetti, ma i firewall potrebbero rispondere a qualcosa, viene utilizzato per rilevare firewall.
  • -sZ: Scanner SCTP "strano", quando invia probe con frammenti di echo cookie dovrebbero essere scartati se aperti o rispondere con ABORT se chiusi. Può passare attraverso firewall che init non passa, il brutto è che non distingue tra filtrato e aperto.
  • -sO: Scansione del protocollo Ip. Invia header errati e vuoti in cui a volte non può essere nemmeno distinto il protocollo. Se arriva un protocollo ICMP irraggiungibile è chiuso, se arriva una porta irraggiungibile è aperta, se arriva un altro errore, filtrato, se non arriva nulla, aperto|filtrato.
  • -b <server>: FTPhost--> Viene utilizzato per scansionare un host da un altro, questo viene fatto collegando l'ftp di un'altra macchina e chiedendole di inviare file alle porte che vuoi scansionare da un'altra macchina, in base alle risposte sapremo se sono aperte o meno. [<user>:<password>@]<server>[:<port>] Quasi tutti i server ftps non ti permettono più di farlo e quindi è di poco uso pratico.

Analisi Focalizzata

-p: Utilizzato per specificare le porte da scansionare. Per selezionare tutte le 65.335 porte: -p- o -p all. Nmap ha una classificazione interna basata sulla popolarità. Per impostazione predefinita, utilizza le prime 1000 porte. Con -F (scansione veloce) analizza le prime 100. Con --top-ports analizza quel numero di porte principali (da 1 a 65.335). Controlla le porte in ordine casuale; per prevenire questo, usa -r. Possiamo anche selezionare porte specifiche: 20-30,80,443,1024- (quest'ultima significa cercare da 1024 in poi). Possiamo anche raggruppare le porte per protocolli: U:53,T:21-25,80,139,S:9. Possiamo anche scegliere un intervallo all'interno delle porte popolari di Nmap: -p [-1024] analizza fino alla porta 1024 da quelle incluse in nmap-services. --port-ratio Analizza le porte più comuni all'interno di un rapporto tra 0 e 1

-sV Scansione delle versioni, l'intensità può essere regolata da 0 a 9, il valore predefinito è 7.

--version-intensity Regoliamo l'intensità, in modo che più è basso, lancerà solo le probe più probabili, ma non tutte. Con questo, possiamo ridurre notevolmente il tempo di scansione UDP

-O Rilevamento del sistema operativo

--osscan-limit Per una corretta scansione degli host, sono necessarie almeno una porta aperta e una chiusa. Se questa condizione non è soddisfatta e abbiamo impostato questo, non tenterà la previsione del sistema operativo (risparmia tempo)

--osscan-guess Quando il rilevamento del sistema operativo non è perfetto, questo lo fa provare di più

Script

--script |||[,...]

Per utilizzare script predefiniti, usa -sC o --script=default

I tipi disponibili sono: auth, broadcast, default, discovery, dos, exploit, external, fuzzer, intrusive, malware, safe, version e vuln

  • Auth: esegue tutti gli script di autenticazione disponibili
  • Default: esegue gli script degli strumenti di base predefiniti
  • Discovery: recupera informazioni dal target o dalla vittima
  • External: script per utilizzare risorse esterne
  • Intrusive: utilizza script considerati intrusivi per la vittima o il target
  • Malware: controlla le connessioni aperte da codice dannoso o backdoor
  • Safe: esegue script non intrusivi
  • Vuln: scopre le vulnerabilità più conosciute
  • All: esegue assolutamente tutti gli script di estensione NSE disponibili

Per cercare script:

nmap --script-help="http-*" -> Quelli che iniziano con http-

nmap --script-help="not intrusive" -> Tutti tranne quelli

nmap --script-help="default or safe" -> Quelli in uno o entrambi

nmap --script-help="default and safe" --> Quelli in entrambi

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

--script-args =,={=},={,}

--script-args-file

--script-help ||||all[,...]

--script-trace ---> Fornisce informazioni su come sta procedendo lo script

--script-updatedb

Per utilizzare uno script, digita semplicemente: nmap --script Script_Name target --> Quando utilizzi lo script, sia lo script che lo scanner verranno eseguiti, quindi possono essere aggiunte anche opzioni dello scanner. Possiamo aggiungere "safe=1" per eseguire solo quelli sicuri.

Controllo del Tempo

Nmap può modificare il tempo in secondi, minuti, ms: --host-timeout arguments 900000ms, 900, 900s, e 15m fanno tutte la stessa cosa.

Nmap divide il numero totale di host da scansionare in gruppi e analizza questi gruppi a blocchi, quindi non passa al blocco successivo fino a quando tutti sono stati analizzati (e l'utente non riceve aggiornamenti fino a quando il blocco non è stato analizzato). In questo modo, è più ottimale per Nmap utilizzare grandi gruppi. Per impostazione predefinita nella classe C, utilizza 256.

Questo può essere cambiato con --min-hostgroup ; --max-hostgroup (Regola le dimensioni del gruppo di scansione parallela)

Puoi controllare il numero di scanner paralleli, ma è meglio non farlo (Nmap incorpora già un controllo automatico basato sullo stato della rete): --min-parallelism ; --max-parallelism

Possiamo modificare il timeout RTT, ma di solito non è necessario: --min-rtt-timeout , --max-rtt-timeout , --initial-rtt-timeout

Possiamo modificare il numero di tentativi: --max-retries _

Possiamo modificare il tempo di scansione di un host: --host-timeout _

Possiamo modificare il tempo tra ciascun test per rallentarlo: --scan-delay ; --max-scan-delay _

Possiamo modificare il numero di pacchetti al secondo: --min-rate ; --max-rate _

Molte porte impiegano molto tempo a rispondere quando sono filtrate o chiuse. Se siamo interessati solo a quelle aperte, possiamo andare più veloci con: --defeat-rst-ratelimit

Per definire quanto aggressivo vogliamo che sia Nmap: -T paranoid|sneaky|polite|normal|aggressive|insane

-T (0-1)

-T0 --> Scansiona solo 1 porta alla volta e aspetta 5min fino alla successiva

-T1 e T2 --> Molto simili ma aspettano solo 15 e 0.4sec rispettivamente tra ciascun test

-T3 --> Operazione predefinita, include scansione parallela

-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

Non consentono l'accesso alle porte e analizzano i pacchetti.

-f Per frammentare i pacchetti, per impostazione predefinita li frammenta in 8byte dopo l'header, per specificare quella dimensione usiamo ..mtu (con questo, non usare -f), l'offset deve essere un multiplo di 8. Gli scanner di versioni e gli script non supportano la frammentazione

-D decoy1,decoy2,ME Nmap invia scanner ma con altri indirizzi IP come origine, in questo modo ti nascondono. Se metti ME nella lista, Nmap ti posizionerà lì, è meglio mettere 5 o 6 prima di te per mascherarti completamente. Gli IP casuali possono essere generati con RND: Per generare di IP casuali. Non funzionano con i rilevatori di versioni TCP senza connessione. Se sei all'interno di una rete, ti interessa utilizzare IP attivi, altrimenti sarà molto facile capire che sei l'unico attivo.

Per utilizzare IP casuali: nmap -D RND:10 Target_IP

-S IP Per quando Nmap non cattura il tuo indirizzo IP devi fornirlo con questo. Serve anche per far pensare che un altro target ti sta scansionando.

-e Per scegliere l'interfaccia

Molti amministratori lasciano porte di ingresso aperte affinché tutto funzioni correttamente ed è più facile per loro che trovare un'altra soluzione. Queste possono essere porte DNS o porte FTP... per trovare questa vulnerabilità Nmap incorpora: --source-port ;-g Sono equivalenti

--data Per inviare testo esadecimale: --data 0xdeadbeef e --data \xCA\xFE\x09

--data-string Per inviare testo normale: --data-string "Scansione condotta da Security Ops, estensione 7192"

--data-length Nmap invia solo header, con questo otteniamo di aggiungere un numero di byte in più (che verranno generati casualmente)

Per configurare completamente il pacchetto IP usa --ip-options

Se desideri vedere le opzioni nei pacchetti inviati e ricevuti, specifica --packet-trace. Per ulteriori informazioni ed esempi sull'uso delle opzioni IP con Nmap, vedere http://seclists.org/nmap-dev/2006/q3/52.

--ttl

--randomize-hosts Per rendere l'attacco meno ovvio

--spoof-mac <MAC address, prefix, or vendor name> Per cambiare il MAC esempi: Apple, 0, 01:02:03:04:05:06, deadbeefcafe, 0020F2, e Cisco

--proxies Per utilizzare proxy, a volte un proxy non mantiene tante connessioni aperte quante Nmap desidera, quindi il parallelismo dovrebbe essere modificato: --max-parallelism

-sP Per scoprire host nella nostra rete tramite ARP

Molti amministratori creano una regola firewall che consente a tutti i pacchetti provenienti da una particolare porta di passare (come 20,53 e 67), possiamo dire a Nmap di inviare i nostri pacchetti da queste porte: nmap --source-port 53 IP

Output

-oN file Output normale

-oX file Output XML

-oS file Output script kiddies

-oG file Output greppable

-oA file Tutto tranne -oS

-v level verbosità

-d level debug

--reason Perché dell'host e stato

--stats-every time Ogni quel tempo ci dice come sta andando

--packet-trace Per vedere quali pacchetti escono, possono essere specificati filtri come: --version-trace o --script-trace

--open mostra aperto, aperto|filtrato e non filtrato

--resume file Fornisce un riepilogo

Varie

-6 Consente IPv6

-A è lo stesso di -O -sV -sC --traceroute

Tempo di esecuzione

Mentre Nmap è in esecuzione possiamo cambiare opzioni:

v / V Aumenta / diminuisci il livello di verbosità

d / D Aumenta / diminuisci il livello di debug

p / P Accendi / spegni il tracciamento dei pacchetti

? Stampa uno schermo di aiuto per l'interazione in tempo reale

Vulscan

Script Nmap che guarda le versioni dei servizi ottenute in un database offline (scaricato da altri molto importanti) e restituisce possibili vulnerabilità

I DB che utilizza sono:

  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

Per scaricare e installare nella cartella 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/

Dovresti anche scaricare i pacchetti DB e aggiungerli a /usr/share/nmap/scripts/vulscan/

Utilizzo:

Per utilizzare tutto: sudo nmap -sV --script=vulscan HOST_TO_SCAN

Per utilizzare un DB specifico: sudo nmap -sV --script=vulscan --script-args vulscandb=cve.csv HOST_TO_SCAN

Accelerare la scansione dei servizi Nmap x16

Secondo questo post puoi accelerare l'analisi dei servizi nmap modificando tutti i valori totalwaitms in /usr/share/nmap/nmap-service-probes a 300 e tcpwrappedms a 200.

Inoltre, le probe che non hanno un servicewaitms specificamente definito utilizzano un valore predefinito di 5000. Pertanto, possiamo aggiungere valori a ciascuna delle probe, oppure possiamo compilare nmap noi stessi e cambiare il valore predefinito in service_scan.h.

Se non vuoi cambiare i valori di totalwaitms e tcpwrappedms affatto nel file /usr/share/nmap/nmap-service-probes, puoi modificare il codice di parsing in modo che questi valori nel file nmap-service-probes vengano completamente ignorati.

tip

Impara e pratica l'Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica l'Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Supporta HackTricks