Port Scanning (Nmap)
Antes de atacar nada hay que saber qué escucha en la máquina. Un puerto TCP/UDP abierto es un servicio esperando conexiones, y cada servicio es una superficie de ataque potencial. El escaneo de puertos es el primer paso de todo el proceso, y la forma de hacerlo condiciona lo que se encuentra: un escaneo pobre deja servicios sin ver y cierra vías antes de empezar.
La estrategia estándar son dos fases: un barrido rápido de los 65535 puertos para descubrir cuáles están abiertos y, sobre esos (y solo esos), un escaneo dirigido y más lento que identifica el servicio y su versión. Descubrir es barato; perfilar es caro, así que se perfila solo lo que existe.
# Fase 1: barrido completo de los 65535 puertos TCP, rápido
sudo nmap -sS -n -Pn -p- --min-rate 5000 --open 10.10.10.10
# Fase 2: sobre los puertos abiertos, servicio + versión + scripts por defecto
nmap -p22,80,445 -sCV 10.10.10.10 -oN targetedScanQué hace cada flag (y por qué).
-p-escanea los 65535 puertos, no solo los 1000 más comunes que nmap mira por defecto. Muchos laboratorios (y sistemas reales) esconden servicios en puertos altos o poco habituales; sin-p-se pierden.-sSes un escaneo SYN o "medio abierto": envía elSYN, ve si respondeSYN/ACK(abierto) oRST(cerrado) y no completa el handshake con elACKfinal. Es más rápido y algo más discreto que unconnectcompleto (-sT), pero necesita privilegios de root para forjar los paquetes.-Pnomite el descubrimiento de host (el ping ICMP previo). Muchos equipos, sobre todo Windows y todo lo que hay tras un cortafuegos, descartan el ping; sin-Pn, nmap los daría por caídos y no escanearía nada.-Pnasume que el host está vivo y escanea igual.-ndesactiva la resolución DNS inversa. No aporta nada al escaneo de puertos y ahorra el tiempo (y el ruido) de consultar un DNS por cada IP.--min-rate 5000fija un mínimo de paquetes por segundo, forzando a nmap a no ir despacio: es lo que convierte un barrido de 65535 puertos de minutos a segundos. En redes frágiles conviene bajarlo.--opendeja la salida solo con los puertos abiertos, quitando el ruido declosed/filtered.-sCVcombina-sV(detección de versión: interroga al servicio para averiguar producto y versión exactos) con-sC(los scripts NSE por defecto, que sacan títulos HTTP, cabeceras, certificados, sesiones nulas SMB...). El resultado de esta fase es lo que decide el siguiente paso: una versión concreta se busca en exploits públicos, un título revela un CMS, unjive-*delata el software real bajo un banner engañoso.
El escaneo UDP: por qué y cuándo. Los servicios que hablan UDP no aparecen en ningún escaneo TCP, por muy completo que sea, así que una máquina puede parecer casi vacía y tener el vector escuchando ahí. Para verlos hace falta -sU:
sudo nmap -sU -n -Pn --top-ports 100 --min-rate 5000 10.10.10.10Es mucho más lento que el TCP, y la razón está en el protocolo: TCP tiene handshake, así que un SYN siempre provoca respuesta (SYN/ACK abierto, RST cerrado) y el estado se decide con un paquete. UDP no tiene nada de eso: si el puerto está abierto, lo normal es que el servicio no conteste a un paquete vacío, y el silencio es idéntico al de un puerto filtrado por un cortafuegos. nmap tiene que esperar timeouts y reintentar, y depende de que llegue un ICMP port unreachable para marcar "cerrado" (mensaje que además suele estar limitado en frecuencia). De ahí que aparezcan tantos open|filtered: no es un fallo del escaneo, es que sin respuesta no se puede distinguir.
Por eso no se barren los 65535 puertos UDP: se lanza un --top-ports (100 o 1000) a la vez que el TCP, y se mira con más detalle si el TCP no da vector. Lo que vive ahí merece la pena: SNMP en 161 (con comunidad public filtra usuarios, procesos y a veces credenciales), DNS en 53, NTP en 123, TFTP en 69 (sin autenticación), mDNS en 5353, IKE/IPsec en 500, y el 111 de rpcbind que delata NFS. En un controlador de dominio el trío 53/123/389 es prácticamente una firma.
La regla práctica: el barrido UDP corto va siempre, y cuando el TCP no ofrece vector, el UDP deja de ser opcional.
Por qué importa. El escaneo es la base de todo lo que viene después: cada puerto abierto es una hipótesis de ataque. Saltarse -p- o -Pn es la causa más común de un pentest que se atasca "sin vector": el vector estaba en un puerto que nunca se llegó a mirar. Y la fase de versión (-sV) no es un trámite, es la que convierte "hay algo en el 8080" en "hay un Tomcat 9.0.30 vulnerable a X".
Cómo detectarlo. Un escaneo deja una firma de red clara: muchos intentos de conexión a puertos numerosos o secuenciales desde una sola IP en pocos segundos. El SYN scan (-sS) se delata por SYN sin el ACK final (conexiones medio abiertas) y una ráfaga de RST; el barrido UDP, por una tanda de ICMP port unreachable. Los IDS/IPS (Suricata/Snort/Zeek) traen umbrales de port scan para esto, y el cortafuegos registra los múltiples puertos denegados desde el mismo origen. Un --min-rate alto y -p- hacen el patrón aún más evidente.
Defensa. Reducir la superficie: exponer solo los puertos imprescindibles, filtrar el resto en el cortafuegos y no confiar en la oscuridad de un puerto alto. La detección de versión se alimenta de los banners: minimizarlos (o falsearlos) ralentiza al atacante, aunque no lo detiene.
Máquinas donde se aplica
- AccessProving Grounds Practice
- ActiveHackTheBox
- AdministratorHackTheBox
- AdmirerHackTheBox
- AlertHackTheBox
- AlgernonProving Grounds Practice
- AmaterasuProving Grounds Play
- AmbassadorHackTheBox
- ApexProving Grounds Practice
- ArcticHackTheBox
- AstronautProving Grounds Practice
- AtomHackTheBox
- AuthByProving Grounds Practice
- BackdoorHackTheBox
- BackendHackTheBox
- BartHackTheBox
- BastardHackTheBox
- BBSecuteProving Grounds Play
- BigPivotingDockerLabs
- BillybossProving Grounds Practice
- BitforgeProving Grounds Practice
- BlackMarket 1VulnHub
- BlueHackTheBox
- BoardLightHackTheBox
- BookHackTheBox
- BountyHackTheBox
- BountyHunterHackTheBox
- BratarinaProving Grounds Practice
- BreaksshDockerLabs
- BuffHackTheBox
- BullyboxProving Grounds Practice
- BuscaloveDockerLabs
- CascadeHackTheBox
- CelestialHackTheBox
- Cereal 1VulnHub
- ChatterboxHackTheBox
- ChemistryHackTheBox
- ChocolateLoversDockerLabs
- CicadaHackTheBox
- ClamAVProving Grounds Practice
- ClueProving Grounds Practice
- CockpitProving Grounds Practice
- CompiledHackTheBox
- ConsolelogDockerLabs
- CraftProving Grounds Practice
- CraftyHackTheBox
- Dance-SambaDockerLabs
- Darkhole 2VulnHub
- DC-1VulnHub
- DevelHackTheBox
- DockerlabsDockerLabs
- DomainDockerLabs
- DVR4Proving Grounds Practice
- EvilCupsHackTheBox
- ExfiltratedProving Grounds Practice
- ExpresswayHackTheBox
- ExtplorerProving Grounds Practice
- FanatasticProving Grounds Practice
- FiredProving Grounds Practice
- FishProving Grounds Practice
- FluProving Grounds Practice
- ForestHackTheBox
- GrandpaHackTheBox
- GrannyHackTheBox
- GreenHornHackTheBox
- Hacker Kid 1.0.1VulnHub
- HawatProving Grounds Practice
- HeadlessHackTheBox
- HealHackTheBox
- HeistHackTheBox
- HepetProving Grounds Practice
- HetemitProving Grounds Practice
- HokkaidoProving Grounds Practice
- HunitProving Grounds Practice
- Infovore 1VulnHub
- InstantHackTheBox
- InternalProving Grounds Practice
- JackoProving Grounds Practice
- KevinProving Grounds Practice
- LaboratoryHackTheBox
- LateHackTheBox
- LaVitaProving Grounds Practice
- LegacyHackTheBox
- LevramProving Grounds Practice
- LinkVortexHackTheBox
- LolyProving Grounds Play
- MailingHackTheBox
- MantisProving Grounds Practice
- MarketingProving Grounds Practice
- MedJedProving Grounds Practice
- MiceProving Grounds Practice
- MonitorsThreeHackTheBox
- MonsterProving Grounds Practice
- MyExpense 1VulnHub
- MzeeavProving Grounds Practice
- NagoyaProving Grounds Practice
- NetmonHackTheBox
- NibblesProving Grounds Practice
- NickelProving Grounds Practice
- NorCDockerLabs
- NukemProving Grounds Practice
- OpenSourceHackTheBox
- OptimumHackTheBox
- PandoraHackTheBox
- PayDayProving Grounds Practice
- PCProving Grounds Practice
- PebblesProving Grounds Practice
- PelicanProving Grounds Practice
- PeppoProving Grounds Practice
- PermXHackTheBox
- PhotobombHackTheBox
- PostfishProving Grounds Practice
- PotatoProving Grounds Play
- PsychoDockerLabs
- QuackerJackProving Grounds Practice
- ReadysProving Grounds Practice
- RedPandaHackTheBox
- ResourceHackTheBox
- RoquefortProving Grounds Practice
- SaunaHackTheBox
- ScrutinyProving Grounds Practice
- SeaHackTheBox
- ServmonHackTheBox
- ShenziProving Grounds Practice
- ShoppyHackTheBox
- SickOs 1.2VulnHub
- SightlessHackTheBox
- SlortProving Grounds Practice
- SnookumsProving Grounds Practice
- SorcererProving Grounds Practice
- SpiderSocietyProving Grounds Practice
- SPXProving Grounds Practice
- SquashedHackTheBox
- SquidProving Grounds Practice
- StaplerProving Grounds Play
- SupportHackTheBox
- SwagShopHackTheBox
- SybarisProving Grounds Practice
- Symfonos 1 & 2VulnHub
- Symfonos 3VulnHub
- Symfonos 5VulnHub
- Symfonos 6VulnHub
- TeacherHackTheBox
- TimelapseHackTheBox
- TrickHackTheBox
- TricksterHackTheBox
- UnderPassHackTheBox
- VaultProving Grounds Practice
- VmdakProving Grounds Practice
- Vulnerable Lab (1 · 4 · 5)VulnHub
- WallaProving Grounds Practice
- WallpaperHubProving Grounds Practice
- WomboProving Grounds Practice
- WorkaholicProving Grounds Practice
- XposedAPIProving Grounds Practice
- YummyHackTheBox
- ZabProving Grounds Practice
- ZenPhotoProving Grounds Practice
- ZipperProving Grounds Practice