Nmap Summary (ESP)
Last updated
Last updated
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
<ip>,<net/mask>
: Indica gli ip direttamente
-iL <ips_file>
: list_IPs
-iR <number>
: Numero di IP casuali, puoi escludere possibili IP con --exclude <Ips>
o --excludefile <file>
.
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 IP 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 usare 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, INIT-ACK(aperto) o ABORT(chiuso) o nulla o ICMP irraggiungibile(inattivo) possono essere restituiti.
-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 unreachable o risposte dello stesso protocollo per sapere se è attivo.
-n
: Nessun DNS
-R
: DNS sempre
-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 notevolmente 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 usare 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 Protocol Ip. Invia header errati e vuoti in cui a volte non può nemmeno essere 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 si desidera 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 fare questo e quindi è di poco uso pratico.
-p: Serve per specificare le porte da scansionare. Per selezionare i 65335: -p- o -p all. Nmap ha una classificazione interna in base alla sua popolarità. Per impostazione predefinita utilizza i 1000 principali. Con -F (scansione veloce) analizza i 100 principali. Con --top-ports <numero> Analizza quel numero di principali (da 1 fino a 65335). Controlla le porte in ordine casuale, per evitare che ciò accada -r. Possiamo anche selezionare porte: 20-30,80,443,1024- Questo ultimo significa che guarda oltre il 1024. 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 al 1024 di quelli inclusi in nmap-services. --port-ratio <ratio> Analizza le porte più comuni che un rapporto deve essere compreso tra 0 e 1
-sV Scansione della versione, si può regolare l'intensità da 0 a 9, per impostazione predefinita 7.
--version-intensity <numero> Regoliamo l'intensità, in modo che quanto più basso lancerà solo le sonde più probabili, ma non tutte. Con questo possiamo ridurre notevolmente il tempo di scansione UDP
-O Rilevamento del sistema operativo
--osscan-limit Per scansionare bene un host è necessario che ci sia almeno 1 porta aperta e un'altra chiusa, se non si verifica questa condizione e abbiamo impostato questo, non tenta di fare previsioni sul sistema operativo (risparmia tempo)
--osscan-guess Quando il rilevamento del sistema operativo non è perfetto questo fa sì che si sforzi di più
Scripts
--script <filename>|<category>|<directory>|<expression>[,...]
Per usare quelli di default basta con -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 i suoi scripts disponibili per l'autenticazione
Default: esegue gli scripts di base per impostazione predefinita dello strumento
Discovery: recupera informazioni dal target o vittima
External: script per utilizzare risorse esterne
Intrusive: utilizza scripts considerati intrusivi per la vittima o target
Malware: controlla se ci sono connessioni aperte da codici dannosi o backdoors (porte posteriori)
Safe: esegue scripts che non sono intrusivi
Vuln: scopre le vulnerabilità più conosciute
All: esegue assolutamente tutti gli scripts con estensione NSE disponibili
Per cercare script:
nmap --script-help="http-*" -> Quelli che iniziano per http-
nmap --script-help="not intrusive" -> Tutti tranne quelli
nmap --script-help="default or safe" -> Quelli che sono in uno o nell'altro o in entrambi
nmap --script-help="default and safe" --> Quelli che sono in entrambi
nmap --script-help="(default or safe or intrusive) and not http-*"
--script-args <n1>=<v1>,<n2>={<n3>=<v3>},<n4>={<v4>,<v5>}
--script-args-file <filename>
--script-help <filename>|<category>|<directory>|<expression>|all[,...]
--script-trace ---> Fornisce informazioni su come va lo script
--script-updatedb
Per usare uno script basta scrivere: namp --script Nome_del_script obiettivo --> Al mettere lo script verrà eseguito sia lo script che lo scanner, quindi possono essere aggiunte anche opzioni dello scanner, possiamo aggiungere “safe=1” affinché vengano eseguiti 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 in blocchi in modo che fino a quando non sono stati analizzati tutti, non passa al blocco successivo (e l'utente non riceve alcun aggiornamento fino a quando il blocco non è stato analizzato) in questo modo, è più ottimale per nmap utilizzare gruppi grandi. Per impostazione predefinita in classe C utilizza 256.
Può essere cambiato con --min-hostgroup <numhosts>; --max-hostgroup <numhosts> (Regola le dimensioni del gruppo di scansione parallelo)
Può essere controllato il numero di scanner in parallelo ma è meglio non farlo (nmap già incorpora un controllo automatico in base allo stato della rete): --min-parallelism <numprobes>; --max-parallelism <numprobes>
Possiamo modificare il timeout rtt, ma di solito non è necessario: --min-rtt-timeout <time>, --max-rtt-timeout <time>, --initial-rtt-timeout <time>
Possiamo modificare il numero di tentativi:--max-retries <numtries>
Possiamo modificare il tempo di scansione di un host: --host-timeout <time>
Possiamo modificare il tempo tra ogni prova per farla andare lentamente: --scan-delay <time>; --max-scan-delay <time>
Possiamo modificare il numero di pacchetti al secondo: --min-rate <number>; --max-rate <number>
Molte porte impiegano molto tempo a rispondere essendo filtrate o chiuse, se ci interessano solo 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 --> Viene scansionato solo 1 porto alla volta e si aspetta 5min fino al successivo
-T1 e T2 --> Molto simili ma aspettano solo 15 e 0,4 secondi rispettivamente tra ogni prova
-T3 --> Funzionamento predefinito, include in parallelo
-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 lasciano passare porte e analizzano pacchetti.
-f Per frammentare pacchetti, per impostazione predefinita li frammenta in 8byte dopo l'intestazione, per specificare quella dimensione usiamo ..mtu (con questo, non usare -f), l'offset deve essere un multiplo di 8. Scanner di versione e 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 farti completamente mascherare. Possono essere generate IP casuali con RND:<numero> Per generare <numero> di IP casuali. Non funzionano con il rilevatore di versioni senza connessione TCP. Se sei all'interno di una rete, ti interessa usare IP che siano attivi, altrimenti sarà molto facile scoprire che sei l'unico attivo.
Per usare IP casuali: nmap-D RND: 10 Ip_obiettivo
-S IP Per quando Nmap non rileva il tuo indirizzo IP devi fornirlo con questo. Serve anche per far pensare che ci sia un altro obiettivo che li sta scansionando.
-e <interface> Per scegliere l'interfaccia
Molti amministratori lasciano porte di ingresso aperte affinché tutto funzioni correttamente e per loro è più facile che cercare un'altra soluzione. Queste possono essere le porte DNS o quelle di FTP... per cercare questa vulnerabilità nmap incorpora: --source-port <portnumber>;-g <portnumber> Sono equivalenti
--data <hex string> Per inviare testo esadecimale: --data 0xdeadbeef e --data \xCA\xFE\x09
--data-string <string> Per inviare un testo normale: --data-string "Scansione condotta da Security Ops, estensione 7192"
--data-length <number> Nmap invia solo intestazioni, con questo riusciamo a farne aggiungere a queste un numero di byte in più (che verranno generati casualmente)
Per configurare completamente il pacchetto IP usare --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 <value>
--randomize-hosts Per rendere l'attacco meno ovvio
--spoof-mac <MAC address, prefix, or vendor name> Per cambiare la mac esempi: Apple, 0, 01:02:03:04:05:06, deadbeefcafe, 0020F2, e Cisco
--proxies <Comma-separated list of proxy URLs> Per usare proxy, a volte un proxy non mantiene tante connessioni aperte quante nmap vuole quindi bisognerebbe modificare il parallelismo: --max-parallelism
-sP Per scoprire host nella rete in cui ci troviamo tramite ARP
Molti amministratori creano una regola nel firewall che consente il passaggio di tutti i pacchetti provenienti da una porta particolare (come il 20,53 e 67), possiamo dire a nmap di inviare i nostri pacchetti da quelle porte: nmap --source-port 53 Ip
Uscite
-oN file Uscita normale
-oX file Uscita XML
-oS file Uscita di script kiddies
-oG file Uscita grepable
-oA file Tutti tranne -oS
-v level verbosità
-d level debug
--reason Perché dell'host e stato
--stats-every time Ogni quel tempo ci dice come va
--packet-trace Per vedere quali pacchetti escono si possono specificare filtri come: --version-trace o --script-trace
--open mostra gli aperti, aperti|filtrati e i non filtrati
--resume file Fornisce un riepilogo
Miscellanea
-6 Permette 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 Attiva / disattiva il tracciamento dei pacchetti
? Stampa una schermata di aiuto per l'interazione in tempo reale
Vulscan
Script di nmap che controlla le versioni dei servizi ottenuti in un database offline (che scarica da altri molto importanti) e restituisce le possibili vulnerabilità
I database che utilizza sono:
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
Per scaricarlo e installarlo nella cartella di 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 dai database e aggiungerli a /usr/share/nmap/scripts/vulscan/
Uso:
Per usare tutti: sudo nmap -sV --script=vulscan HOST_A_ESCANEAR
Per usare un database specifico: sudo nmap -sV --script=vulscan --script-args vulscandb=cve.csv HOST_A_ESCANEAR
Secondo questo post puoi velocizzare 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 sonde che non hanno un servicewaitms
specificamente definito utilizzano un valore predefinito di 5000
. Pertanto, possiamo aggiungere valori a ciascuna delle sonde, 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
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.
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)