Introducció
Nmap és una eina per a la detecció de serveis d’internet i l’exploració de xarxa.
Quan inicia una exploració, NMap envia paquets a una o més IPs i espera la resposta. Això permet que NMap determini si els sistemes de destinació responen al trànsit de xarxa i en quins ports.
En examinar en detall les característiques del trànsit, NMap també pot endevinar el sistema operatiu de la màquina que està darrere de la IP.
La funcionalitat de NMap s’ha ampliat amb més de 550 scripts que s’executen mitjançant el motor de scripts NMap.
Ves amb compte quan executes un script que hagis trobat per Internet perquè molts necessiten permisos de root.
Primer mira exactament que està fent!
Entorn de treball
Crea una màquina virtual a Isard.
La màquina han de ser “Ubuntu 24.04 Server” amb 8 CPU, 16 GB de RAM i una interfície de l’institut.
Activa la interfície enp3s0 amb una IP fixa, on XX és el número del teu ordinador:
Instal.la nmap :
&& Escanejar un host
Important! Tingues en compte que quan estem escanejant sistemes reals els teus resultats poden ser diferents perquè les coses canvien.
Per provar amb finalitat educativa, podem escanejar l’amfitrió scanme.nmap.org.
Aquest permís només inclou l’escaneig mitjançant Nmap, sense exploits o atacs de denegació de servei.
A continuació escaneja tots els ports TCP reservats (de l’1 al 1024) de l’amfitrió que hi ha darrere l’adreça web scanme.nmap.org:
El resultat mostra que:
- L’adreça
scanme.nmap.orgresol a l’adreça45.33.32.156. - El servidor té 4 serveis accessibles als ports
22/tcp,80/tcp9929/tcpi31337/tcp. - El nom del servei és orientatiu (en molts casos està equivocat)
Si vols saber per què tarda tant a obtenir la informació, executa la mateixa comanda amb l’opció -v per activar el mode detallat:
L’amfitrió scanme.nmap.org resolt a la IP 45.33.32.156
Pots veure que darrere la IP 45.33.32.156 hi ha un servidor ssh al port 22.
Pots tractar de connectar-te a veure què passa:
El sistema no és molt segur perquè permet fer un inici de sessió amb l’usuari root amb contrasenya i no fa servir només claus criptogràfiques.
També té un servei web. Anem a veure que respon.
Instal.la un navegador:
I mira que respon el servidor web:
Però recorda, una cosa és explorar una mica que no és il·legal, i altra cosa és fer exploracions intrusives i exploits que només es poden fer amb autorització.
Anem a veure què respon la IP 194.224.167.58 al port 80
Com que és un servei http farem servir lynx:
;
Com que som informàtics farem servir la supereina curl, a veure que està passant:
Mirar que l’adreça web està ben resolta amb nslookup:
Com que l’amfitrió també té un servei https al port 443 provarem aquest servei amb l’eina curl:
El servei respon que no té un certifcat per la IP 192.224.167.58.
Podem dir a curl de que res, que tiri endavant amb l’opció -k:
Ara l’error és en el protocol Transport Layer Security
Potser és millor dir les coses pel seu nom, en aquest cas www.santander.es:
|
El lloc web és de l’Ajuntament de Santander.
Al final es tractava de dir les coses pel seu nom.
Si faig un curl al port 80 amb el nom correcte, llavors sí que em respon amb una resposta 302 Moved Temporarily al servei https:
Encara queden molts serveis per descobrir, explorar i aprendre en aquestes IP, però ara no tenim temps.
Per cert, com a alumne quan un docent et demana que escanejis un amfitrió i només ensenyes la sortida de nmap, ja saps quina avaluació et farà de la teva tasca.
Escanejar una xarxa
En l’exemple anterior hem escanejat l’amfitrió 192.224.167.58 en què està la web de l’Ajuntament de Santander, però això no vol dir que l’amfitrió sigui de l’Ajuntament de Santander.
És molt freqüent que darrere un amfitrió hi hagi molts dominis d’Internet.
;
Si busques a google “minerva hostmaster” apareixerà una web d’un proveïdor de hosting: https://www.minervahosting.com/
Això és molt important, perquè quan estàs escanejant un amfitrió, a qui estàs afectant és al propietari dels equips i la xarxa, en aquest cas segurament serà Minerva Hosting i no pas l’Ajuntament de Santander.
Mentre ens mantinguem dins dels límits podem seguir treballant, i en aquest cas anirem al límit del qual es considera permès.
En aquest exemple llançem una exploració SYN furtiva contra cada host que es troba en rang /30, les 4 adreces continues on resideix el host www.santander.es.
També intentem determinar quin sistema operatiu s’està executant a cada host que està en funcionament.
Això requereix privilegis de root perquè nmap manipula els paquets SYN per poder detectar el sistema operatiu.
||
|||
Si proves la IP 194.224.167.59 pots veure que també hi ha un servei de l’Ajuntament de Santander:
Tingues en compte que estem just al límit del que està permés: el procediment anterior es molt utilitzat per entrar a un host “per la porta del veí”.
Normalment el paquet d’IPs pertanyen a un mateix CPD, i si el host en que vull penetrar està molt ben protegit potser el del costat que estan en la mateixa LAN no.
Per tant, el millor és entrar dins de la LAN per el host més dèbil i a partir d’aquest host seguir penetrant dins de la xarxa.
Si visc en un edifici la porta d’entrada a l’edifici és compartida amb els altres veïns, i encara que tingui una porta blindada a cas si el veí no la te i compartim terrassa poden entrar pel pìs del veí.
Per això, el que hem fet ara es pot interpretar com el primer pas d’un atac d’intrusió que intenta accedir al host més dèbil.
Port
Una IP pot hostetjar diversos serveis d’internet, però cada servei necessita una direcció única.
És per això que un servei a més d’escoltar en una IP també escolta en un port.
I és per aquest motiu que l’adreça d’un servei d’Internet es compon d’IP:PORT!!
Hi ha un conveni respecte a quins ports ha d’utilitzar cada servei que es coneix com “well-know ports”, però només és un conveni: un servei pot escoltar en qualsevol port (sempre que ja no estigui ocupat).
Instal.la Docker:
| Arrenca 4 servidors nginx en 4 ports diferents.
Com que estem en el nostre servidor no tenim restriccions, amb un nmap senzill fariem, però anem a totes:
Pots veure que:
- El nom dels serveis que dona
nmappels ports81,82i83no són correctes. - El nostre kernel no és un
Linux 2.6.X
En el port 83/tcp hi ha un servei web:
|
El nostre kernel és més modern:
Fases
Una exploració nmap es realitza en fases, on cada fase comença on acaba l’altre.
Com pots veure a continuació, nmap no només es dedica a escanejar ports.
Resolució IPs
Nmap escaneja IPs, però per facilitar la tasca als usuaris també accepta noms de host
Per tant, el primer pas és resoldre els hosts mitjançant DNS
Si passes les opcions -sL -n , nmap imprimirà les IPs objectiu i no realitzarà cap exploració adicional:
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-11-21 07:54 UTC
Nmap scan report for www.caixabank.es (172.64.155.160)
Other addresses for www.caixabank.es (not scanned): 104.18.32.96 2606:4700:4400::6812:2060 2606:4700:4400::ac40:9ba0
Nmap done: 1 IP address (0 hosts up) scanned in 0.01 secondsLa IP de www.caixabank.es es 172.64.155.160, encara que hi ha altres adreces.
Descobriment de l’amfitrió
Les exploracions de la xarxa solen començar per descobrir quins objectius de la xarxa estan en línia i, per tant, val la pena investigar-ho més a fons. Aquest procés s’anomena descobriment d’amfitrió o exploració de ping.
Nmap ofereix moltes tècniques de descobriment d’amfitrions, que van des de peticions ARP ràpides fins a combinacions elaborades de TCP, ICMP, i altres tipus de sondes.
Aquesta fase s’executa de manera predeterminada, tot i que la pots saltar amb l’opció -PN si estàs segur que totes les IP de destinació estan actives.
Per exemple, si executo aquest nmap:
La resposta és que l’amfitrió sembla que no està actiu.
Però si dic a nmap que tiri endavant:
Si només vol conèixer quins amfitrions estan en línia i res més, utilitza les opcions -sP -n:
Resolució DNS inversa
Un cop Nmap ha determinat quins amfitrions s’han d’escanejar, cerca els noms DNS inversos de tots els amfitrions trobats en línia per l’exploració de ping.
De vegades, el nom d’un amfitrió proporciona pistes sobre la seva funció, i els noms fan que el resultat sigui més llegible que proporcionar només números IP.
Aquest pas es pot saltar amb l’opció -n (sense resolució):
Escaneig de ports
Aquesta és l’operació fonamental de Nmap.
S’envien sondes i les respostes (o no respostes) a aquestes sondes s’utilitzen per classificar els ports remots en estats com ara open, closed o filtered
L’exploració de ports es realitza de manera predeterminada, tot i que la pots ometre per realitzar algunes de les fases posteriors de traceroute i Nmap Scripting Engine especificant les seves opcions de línia d’ordres particulars (com ara --traceroute i --script) juntament amb una exploració de ping (-sP).
Detecció de versions
Si es troben alguns ports en estat open, Nmap pot ser capaç d’intentar determinar quin programari de servidor s’està executant al sistema remot.
Ho fa enviant una varietat de sondes i fent coincidir les respostes amb una base de dades de milers de signatures de servei conegudes.
La detecció de versions s’activa amb l’opció -sV.
De totes maneres sabem que darrere està Cloudfare, que és un dels CDN (“Content Distribute Networks”) més utilitzats.
Quan has fet aquest escaneix l’has fet a Cloudflare, hi ha qui has molestat es a Cloudflare no a CaixaBank.
CaixaBank pot tenir un CPD propi, que és un dels motius pels quals fa servir Cloudflare.
Per exemple en el cas de BBVA fa servir Akamai com a CDN, encara que gran part de la seva infraestructura la té a Google Cloud.
En aquest cas la signatura del servei està a la base de dades i pots obtenir informació sobre com funciona aquest servei i les vulnerabilitats que té a Google o llocs web específics.
Per exemple, pots mirar aquest article: Akamai vulnerability could have let hackers attack millions of sites
Detecció del sistema operatiu
Amb l’opció -O pots demanar a nmap que detecti el sistema operatiu.
Els diferents sistemes operatius implementen estàndards de xarxa de maneres subtilment diferents. Mesurant aquestes diferències sovint és possible determinar el sistema operatiu que s’executa en un host remot.
Nmap combina les respostes a un conjunt estàndard de sondes amb una base de dades de més de mil respostes conegudes de sistemes operatius.
Prova de nou amb l’opció -sSU tal com et suggereixen.
Prova amb www.barcelona.cat.
Traceroute
Enlloc de traceroute pots utilitzar l’opció --traceroute amb nmap.
Scripts
Nmap té un motor d’execució de scripts (NSE) que permet escriure scripts per executar amb nmap amb el llenguatge Lua.
Els scripts, que pots trobar a Internet (ves amb compte) s’executen amb l’opció --script.
Sortida
Finalment, Nmap recull tota la informació que ha recopilat i per defecte l’escriu a la pantalla
També pot escriure el resultat en un fitxer per ser processat posteriorment:
Descobrir un host
List scan
Amb l’opció -sLp ens limitem a resoldre els noms dels amfitrions a adreces IP, i la resolució inversa DNS:
També podem veure els registres rDNS que estan a les IP properes a www.renfe.es:
Ping scan
Amb l’opció -sP ens limitem a detectar hosts actius sense realitzar un escaneig de ports:
Això és útil per saber quins són els teus veïns de xarxa:
|
L’opció -T indica el nivell de rapidesa de l’escàner (de l’1 al 5).
A partir dels noms de domini queda clar que www.lwn.net utilitza el proveïdor https://www.linode.com.
Per tant, si algú volgués atacar aquest servei podria intentar entrar en una màquina veïna per realitzar un ataca local ethernet amb eines com Ettercap o Dsniff.
Si l’usuari té privilegis de root, -sP envia una sol·licitud echo ICMP i un paquet TCP ACK al port 80 o sol·licituts ARP en una xarxa ethernet local.
En cas contrari s’envia un paquet SYN.
No ping scan
Ping scan permet filtra quins amfitrions estan actius, però molts tallafocs fan que els amfitrions siguin invisibles.
Pots utilitzar l’opció (-pn) per desactivar aquest filtre.
Docker
Per fer proves amb nmap, pots configurar xarxes amb docker que et permeten fer simulacions ràpides i fàcils de crear.
Mira Compose
Una xarxa
Crea el fitxer docker-compose.yml:
services:
cassandra:
image: cassandra:3.7
nginx:
image: nginx:1.22
postgres:
image: postgres:14.5-alpine
environment:
- POSTGRES_PASSWORD=password
redis:
image: redis:alpineExecuta el fitxer:
Fes un escàner de la xarxa privada:
|
La IP de l’amfitrió és 172.23.0.5.
Show solution
&&
;
;
SF-Port5432-TCP:V=7.80=7=11/21=673FB61B=x86_64-pc-linux-gnu(S
Explica la topologia:
Show solution
Les IPs poden ser diferents, depenent dels contenidors que tinguis en execució.
| IP | Port | Service | Image |
|---|---|---|---|
| 172.23.0.2 | 6379/tcp | Redis key-value store 7.4.1 | redis:alpine |
| 172.23.0.3 | 80/tcp | nginx 1.22.1 | nginx:1.22 |
| 172.23.0.4 | 5432/tcp | PostgreSQL DB 9.6.0 or later | postgres:14.5-alpine |
| 172.23.0.5 | 7000/tcp | afs3-fileserver? | cassandra:3.7 |
| 172.23.0.5 | 9042/tcp | Apache Cassandra 3.0.0 - 3.9 (native protocol version 3-4) | cassandra:3.7 |
Elimina tots els contenidors:
Vàries xarxes
Modifica el fitxer docker-compose.yml:
services:
apache:
image: httpd:2.4.55
networks:
hub:
pg_1:
image: postgres:14.5-alpine
environment:
- POSTGRES_PASSWORD=password
networks:
hub:
postgres:
pg_2:
image: postgres:14.5-alpine
environment:
- POSTGRES_PASSWORD=password
networks:
postgres:
redis_1:
image: redis:7.0.8-alpine
networks:
hub:
redis:
redis_2:
image: redis:7.0.8-alpine
networks:
redis:
networks:
hub:
postgres:
redis:Crear els contenidors:
Escaneja les xarxes i explica la topologia:
Show solution
&&
| IP | Port | Service | Image |
|---|---|---|---|
| 172.25.0.3 | 80/tcp | Apache httpd 2.4.55 | httpd:2.4.55 |
| 172.25.0.4 | 5432/tcp | PostgreSQL DB 9.6.0 or later | postgres:14.5-alpine |
Continua Google Docs - Nmap
Traceroute
Escaneja a www.nytimes.com amb l’opció --traceroute i explica la informació que has trobat:
Encara que el “New York Times” és un diari de Nova York (Estats Units) el seu servidor està molt aprop.
Instal·la el paquet geoip-bin:
Mira on està la IP:
Activitat. Fes un nmap a Isard per saber on està el centre de dades, etc.
Python
Instal.la Poetry:
| Surt i torna a obrir un altre shell.
Crea un projecte scan, instal.la la dependència i arrenca un entorn virtual:
Crea el fixer scan.py:
=
=
El resultat és un dict:
: : ,
: : : ,
: ,
}
},
: : ,
: ,
: ,
: ,
: ,
},
},
: : : ,
,
],
: ,
: ,
: ,
: 80: : ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
},
443: : ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
},
},
}
},
}Aquest dict el pots processar per obtenir els resultats que tu vols utilitzar.
Per exemple, si vols les IP:
=
=
# print result
81.42.248.211O vols les IP i els ports:
=
=
=
80 :
443 : També pots fer un script que busqui els amfitrions que tenen ssh:
=
=
# print result
=
Activitat
Fes un script que a més de localitzar els nodes amb ssh, també intenti fer un inici de sessió amb un usuari i una contrasenya.
Per això has d’utilitzar la llibreria paramiko tal com s’explica a SSH
Aquest activitat l’has de probar amb les màquines dels altres alumnes que estan connectats a la xarxa de l’Institut.
Més informació
Segueix llegint -> Integración de Python con Nmap
Aquí tens alguns articles que expliquen com fer servir nmap des de Python:
- Using Nmap Port Scanner with Python
- Nmap con Python 3
- Descubriendo la red con Python y Nmap - Parte 1
- Improve Nmap Performance with These Brilliant Scripts
- Python Nmap Module Fully Explained with 8 Programs
Script
PENDENT
Activitats
Està en aquest document: Google Docs - Nmap