4 Uso da linea di comando
Questo è il modo più efficiente e veloce di usare Nmap, ed è solo apparentemente più difficile che usare l'interfaccia grafica. In realtà basterà avere a portata di mano l'elenco delle opzioni possibili. Si tenga inoltre presente che non tutte le opzioni sono utilizzabili tramite interfaccia grafica.
Bisogna premettere che per usare al pieno delle possibilità Nmap si deve essere loggati come root, poichè in alcuni casi il programma ha bisogno di usare direttamente alcuni moduli del kernel allo scopo, ad esempio, di modificare gli header dei frame IP o accedere a porte privilegiate.
Il prototipo di utilizzo è il seguente:
> nmap -[tipi di scan] -[opzioni] <host o segmenti di rete>
Per vedere quali sono i TIPI DI SCAN si guardi la sezione 6, e per le OPZIONI la sezione 7.
Ad esempio se io voglio verificare la mia rete ``dall'interno'' posso fare:
> nmap -sT -PI 10.0.0.0/24
che significa: effettua lo scanning della rete 10.0.0.0 con subnetmask 255.255.255.0 (quindi di tipo C con 256 host possibili 10.0.0.0/24), pingando gli IP con pacchetti ``icmp echo'' (-PI) e analizza le porte tramite connessioni complete (-sT).
L'output prodotto potrebbe essere:
Starting nmap 3.95 ( http://www.insecure.org/nmap/ ) at 2004-08-10 21:29 CEST Host 10.0.0.0 seems to be a subnet broadcast address (returned 2 extra pings) Skipping host.
qui Nmap ci dice che ha capito che deve analizzare il segmento di rete identificato tramite l'indirizzo di broadcast e la netmask, e che ha identificato, tramite i ping, 2 host attivi.
Interesting ports on 10.0.0.2: (The 1658 ports scanned but not shown below are in state: closed) PORT STATE SERVICE 80/tcp open http 255/tcp open unknown
qui Nmap ha analizzato il primo host 10.0.0.2 e ci dice che risultano aperte solo 2 porte, la 80 tipicamente dedicata hai servizi http e la 255 sconosciuta.
Interesting ports on marco (10.0.0.7): (The 1652 ports scanned but not shown below are in state: closed) PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 111/tcp open rpcbind 443/tcp open https 3306/tcp open mysql 6000/tcp open X11 6346/tcp open gnutella 10000/tcp open snet-sensor-mgmt MAC Address: 00:70:E0:50:F5:63 (Cobalt Microserver)
qui analizza il secondo host con l'elenco delle porte trovate aperte.
ATTENZIONE !!! il servizio che vediamo abbinato alla porta e al protocollo (tcp/udp) non indica direttamente l'applicativo che lo sta usando, ma solo il servizio ufficialmente abbinato alla stessa dalle norme IANA. Nell'appendice 8.6 vedremo come può fare un utente Linux a sapere EFFETTIVAMENTE quale applicativo sta usando una porta.
E' utile notare come Nmap ha individuato anche il MAC address (cioè l'identificativo univoco hardware) della scheda di rete. Questo è un dato utilissimo, ma disponibile solo in caso di scansione di una rete locale.
Host 10.0.0.255 seems to be a subnet broadcast address (returned 2 extra pings). Skipping host. Nmap run completed - 256 IP addresses (2 hosts up) scanned in 14.639 seconds
Questo è semplicemente il report conclusivo del lavoro svolto.
Come si vede la forma descrittiva dell'analisi delle porte è la seguente:
PORT/Protocol STATE SERVICE
Porta/Protocollo open = aperta nome servizio
numero/ Tcp close = chiusa sconosciuto
Udp filtered = filtrata firewall
Ovviamente è possibile avere molte più informazioni da Nmap, ad esempio se faccio lo stesso scanning usando il seguente comando:
> nmap -sT -sR -sV -I -O -PI -PT -vv 10.0.0.0/24
otterremo come output:
Starting nmap 3.95 ( http://www.insecure.org/nmap/ ) at 2004-08-12 00:35 CEST Host 10.0.0.0 seems to be a subnet broadcast address (returned 1 extra pings). Skipping host. Host 10.0.0.1 appears to be down, skipping it. Host 10.0.0.2 appears to be up ... good. Initiating Connect() Scan against 10.0.0.2 at 00:35 Adding open port 80/tcp Adding open port 255/tcp The Connect() Scan took 1 second to scan 1660 ports. Initiating service scan against 2 services on 1 host at 00:35 The service scan took 100 seconds to scan 2 services on 1 host. For OSScan assuming that port 80 is open and port 1 is closed and neither are firewalled Interesting ports on 10.0.0.2: (The 1658 ports scanned but not shown below are in state: closed)
fino a qui nulla di particolarmente interessante, a parte la spiegazione dettagliata di quello che sta facendo
PORT STATE SERVICE OWNER VERSION 80/tcp open http WindWeb embedded webserver 2.0 (As on NetComm DSL modems; Realm: Home Gateway; Calls itself Hasbani Web Server)
Qui Nmap ha fatto un eccellente lavoro. Ha individuato con precisione in ascolto sulla porta 10.0.0.2:80 un web server piuttosto raro, che in genere viene usato su dispositivi embedded, tipo router, modem, ecc.
255/tcp open unknown MAC Address: 00:30:0A:0B:5A:D2 (Aztech Systems)
Ottimo!!! qui indica addirittura modello e numero di MAC della scheda di rete.
Device type: PBX Running: 3Com embedded OS details: 3Com NBX PBX
Ci dice che si tratta di un apparecchio dedicato alle comunicazioni con un sistema operativo 3com embedded
OS Fingerprint: TSeq(Class=64K%IPID=I%TS=2HZ) T1(Resp=Y%DF=N%W=2000%ACK=S++%Flags=AS%Ops=MNWNNT) T2(Resp=N) T3(Resp=Y%DF=N%W=2000%ACK=O%Flags=A%Ops=NNT) T4(Resp=Y%DF=N%W=2000%ACK=O%Flags=R%Ops=) T5(Resp=Y%DF=N%W=0%ACK=S++%Flags=AR%Ops=) T6(Resp=Y%DF=N%W=0%ACK=O%Flags=R%Ops=) T7(Resp=Y%DF=N%W=0%ACK=S%Flags=AR%Ops=) PU(Resp=Y%DF=N%TOS=0%IPLEN=38%RIPTL=148%RID=F%RIPCK=0%UCK=0%ULEN=134%DAT=E) Uptime 0.004 days (since Thu Aug 12 00:30:32 2004)
Sopra vediamo le cosidette ``fingerprints'', cioè le impronte tramite cui Nmap è in grado di individuare il sistema operativo in funzione.
TCP Sequence Prediction: Class=64K rule Difficulty=1 (Trivial joke) TCP ISN Seq. Numbers: 81E6F5BD 81E9E3BD 81EADDBD 81EBD7BD 81ECD1BD 81EFBFBD IPID Sequence Generation: Incremental
Qua ci dice una cosa che potrebbe essere piuttosto grave, e cioè che il sistema in funzione ha un metodo di determinazione dei codici di identificazione delle connessioni TCP (IPID o ISN) altamente prevedibile, per cui sarebbe esposto ad attacchi di ``spoofing cieco''.
Host 10.0.0.3 appears to be down, skipping it. Host 10.0.0.4 appears to be down, skipping it. Host 10.0.0.5 appears to be down, skipping it. Host 10.0.0.6 appears to be down, skipping it. Host marco (10.0.0.7) appears to be up ... good.
Passa all'altro host attivo.
Initiating Connect() Scan against marco (10.0.0.7) at 00:36 Adding open port 3306/tcp Adding open port 80/tcp Adding open port 22/tcp Adding open port 6000/tcp Adding open port 111/tcp Adding open port 10000/tcp Adding open port 443/tcp The Connect() Scan took 0 seconds to scan 1660 ports. Initiating service scan against 7 services on 1 host at 00:36 The service scan took 10 seconds to scan 7 services on 1 host. Initiating RPCGrind Scan against marco (10.0.0.7) at 00:37 The RPCGrind Scan took 0 seconds to scan 1 ports. For OSScan assuming that port 22 is open and port 1 is closed and neither are firewalled Interesting ports on marco (10.0.0.7): (The 1653 ports scanned but not shown below are in state: closed) PORT STATE SERVICE OWNER VERSION 22/tcp open ssh OpenSSH 3.5p1 (protocol 1.99) 80/tcp open http Apache httpd 2.0.47 111/tcp open rpcbind (rpcbind V2) 2 (rpc #100000) 443/tcp open http Apache httpd 2.0.47 3306/tcp open mysql MySQL 3.23.56-log 6000/tcp open X11 (access denied) 10000/tcp open http Webmin httpd
Anche qui ha individuato con esattezza gli applicativi che utilizzano le porte aperte, con tanto di numero di versione (ricordate questo particolare).
Device type: general purpose Running: Linux 2.4.X|2.5.X OS details: Linux 2.4.0 - 2.5.20
Individuazione del sistema in uso piuttosto generica, ma si spiega... infatti in realtà non credo che esistano due macchine su cui è stato istallato linux che si possano dire eguali.
OS Fingerprint: TSeq(Class=RI%gcd=1%SI=333B41%IPID=Z%TS=100HZ) T1(Resp=Y%DF=Y%W=7FFF%ACK=S++%Flags=AS%Ops=MNNTNW) T2(Resp=N) T3(Resp=Y%DF=Y%W=7FFF%ACK=S++%Flags=AS%Ops=MNNTNW) T4(Resp=Y%DF=Y%W=0%ACK=O%Flags=R%Ops=) T5(Resp=Y%DF=Y%W=0%ACK=S++%Flags=AR%Ops=) T6(Resp=Y%DF=Y%W=0%ACK=O%Flags=R%Ops=) T7(Resp=Y%DF=Y%W=0%ACK=S++%Flags=AR%Ops=) PU(Resp=Y%DF=N%TOS=C0%IPLEN=164%RIPTL=148%RID=E%RIPCK=E%UCK=E%ULEN= 134%DAT=E) Uptime 0.233 days (since Wed Aug 11 19:01:32 2004) TCP Sequence Prediction: Class=random positive increments Difficulty=3357505 (Good luck!)
Questa volta il sistema è molto più solido, ed ha un meccanismo di determinazione dei numeri identificativi delle connessioni TCP molto più sicuro.
TCP ISN Seq. Numbers: C17A5112 C143D335 C16DE676 C0BB989B C0FE90CA
C12B6763
IPID Sequence Generation: All zeros
Host 10.0.0.8 appears to be down, skipping it.
.....
Host 10.0.0.254 appears to be down, skipping it.
Host 10.0.0.255 seems to be a subnet broadcast address (returned 1
extra pings). Skipping host.
Nmap finished: 256 IP addresses (3 hosts up) scanned in 30.632 seconds
Raw packets sent: 7727 (303KB) | Rcvd: 6944 (304KB)
Come abbiamo potuto vedere si tratta di una vera miniera di informazioni.
Comunque la vera forza dell'uso di Nmap da linea di comando è nell'uso in combinazione con la shell o o qualche script. Ad esempio si può filtrare l'output tramite una pipe e il comando grep:
> nmap -sT -sR -sV -I -O -PI -PT -vv 10.0.0.7 | grep http
ci consegnerà la lista delle porte su cui è attivo un servizio http.
Ancora meglio se vogliamo tenere sotto controllo un certo host nel tempo si può fare un script, ad esempio in Perl, che venga azionato tramite crontab, che usi Nmap per scansionare un certo obiettivo ad intervalli periodici e che addirittura modifichi i parametri a seconda delle risposte che riceve.
Dalla versione 3.99 Nmap consente una certa interazione con l'utente durante l'esecuzione da linea di comando. In pratica una volta lanciato ad esempio con:
> nmap -sT -sR -sV -I -O -PI -PT 10.0.0.7
è possibile modificare i seguenti comportamenti digitando dei caratteri nella console o terminale:
- v
- incrementa li livello di verbosità, cioè di particolari riferiti (corrisponde all'opzione -v o -vv, ecc.).
- V
- decrementa il livello di verbosità.
- b
- incrementa la quantità dei messaggi di debug (corrisponde all'opzione -b o -bb, ecc.).
- B
- decrementa la quantità dei messaggi di debug.
- p
- abilità la tracciatura dei pacchetti IP usati. (corrisponde all'opzione -packet_trace).
- P
- disabilita la tracciatura dei pacchetti.
- ?
- mostra l'elenco dei comandi suddetti.
| Indice del sito |
