Nmap a fondo:
el arte del escaneo de redes
Serie Red Team | unfantasmaenelsistema.com
Si hay una herramienta que define el trabajo del pentester más que cualquier otra, esa es Nmap. Network Mapper lleva más de 25 años siendo la herramienta de escaneo de redes de referencia. Viene preinstalada en Kali Linux, aparece en prácticamente todos los CTFs y writeups de HackTheBox, y es la primera herramienta que ejecuta cualquier auditor sobre un objetivo nuevo.
Pero Nmap es mucho más que nmap <IP>. Tiene ocho tipos diferentes de escaneo TCP, detección de versiones de servicios, fingerprinting del sistema operativo, un motor de scripts con más de 600 scripts incluidos, técnicas de evasión de firewalls e IDS, y capacidad de generar reportes en múltiples formatos. Este artículo lo cubre todo.
¿Qué aprenderás en este artículo?
Cómo funciona Nmap a nivel de protocolo TCP/IP: qué ocurre realmente en la red · Los tipos de escaneo más importantes: SYN, TCP Connect, UDP, ACK, NULL, FIN, Xmas · Detección de servicios y versiones: de un puerto abierto a un CVE concreto · Detección del sistema operativo: cómo Nmap adivina el OS por el comportamiento de la pila TCP · Nmap Scripting Engine (NSE): automatizar auditorías con scripts · Técnicas de evasión: cómo pasar desapercibido ante firewalls e IDS · Optimización de velocidad: de T0 a T5, timing y paralelización · Salida de resultados: XML, grepable, HTML para informes
⚠ Nmap y la legalidad
Nmap es una herramienta legítima de administración de redes incluida en la mayoría de distribuciones Linux. Sin embargo, escanear redes o sistemas sin autorización explícita del propietario es ilegal en la mayoría de países, incluyendo España (art. 264 del Código Penal). Usa Nmap exclusivamente en: tu propia infraestructura, redes de laboratorio (como la que montamos en el artículo de VirtualBox), o sistemas de terceros con autorización escrita. Los ejemplos de este artículo usan 192.168.56.0/24, el rango de red interna del laboratorio.
1. Fundamentos: el handshake TCP y los estados de puerto
Para entender por qué Nmap tiene distintos tipos de escaneo y qué ventajas tiene cada uno, primero hay que entender cómo funciona una conexión TCP. Los diferentes tipos de escaneo de Nmap se basan en enviar paquetes TCP con distintas combinaciones de flags y analizar las respuestas.
FUNDAMENTO: EL HANDSHAKE TCP DE 3 VÍAS Para entender los tipos de escaneo de Nmap, primero hay que entender cómo funciona una conexión TCP. CONEXIÓN TCP NORMAL (3-way handshake): Cliente Servidor | | |—— SYN ————————————————————————————>| 'Quiero conectarme' |<———————————————————————— SYN+ACK ——| 'De acuerdo, adelante' |—— ACK ————————————————————————————>| 'Confirmado' | CONEXIÓN ESTABLECIDA | |—— DATA ———————————————————————————>| |<——————————————————————————— DATA ——| |—— FIN ————————————————————————————>| 'Cerrando' |<——————————————————————— FIN+ACK ———| PUERTO CERRADO (respuesta RST): Cliente Servidor |—— SYN ————————————————————————————>| |<——————————————————————— RST+ACK ———| 'No hay nadie aquí' PUERTO FILTRADO (firewall): Cliente Servidor |—— SYN ————————————————————————————>| | (sin respuesta) | El firewall descarta el paquete | (timeout tras espera) | Nmap interpreta estas respuestas para determinar el estado de cada puerto: open, closed, filtered.
2. Tipos de escaneo: cuál usar en cada situación
| Tipo | Flag | Cómo funciona | Cuándo usarlo |
|---|---|---|---|
| SYN scan (Half-open) | -sS | Envía SYN, espera respuesta. Si SYN+ACK: abierto (envía RST sin completar). Nunca completa el handshake. | El más usado. Rápido, discreto (no completa conexión), requiere root. |
| TCP Connect | -sT | Completa el handshake TCP completo usando la syscall connect() del SO. | Sin privilegios root. Más lento y ruidoso que SYN. Deja logs en el objetivo. |
| UDP scan | -sU | Envía paquetes UDP. Puerto abierto: respuesta del servicio. Cerrado: ICMP port unreachable. | Para descubrir servicios UDP: DNS(53), SNMP(161), DHCP(67). Muy lento. |
| ACK scan | -sA | Envía paquetes ACK. No detecta puertos abiertos: detecta si hay firewall y qué filtra. | Mapear reglas de firewall: RST = sin filtrar. Sin respuesta = filtrado. |
| NULL scan | -sN | Sin flags TCP. Puerto cerrado: RST. Puerto abierto o filtrado: sin respuesta. | Evasión de firewalls simples. No funciona en Windows (responde RST siempre). |
| FIN scan | -sF | Solo flag FIN. Mismo comportamiento que NULL. Explota comportamiento RFC. | Evasión. Más discreto que SYN en algunos entornos. |
| Xmas scan | -sX | Flags FIN+PSH+URG activos (como un árbol de Navidad encendido). | Evasión. Igual que NULL y FIN: no funciona en Windows. |
| Ping scan | -sn | Solo descubrimiento de hosts: ICMP echo + TCP SYN al 80 + TCP ACK al 443. | Descubrir qué hosts están activos en una red antes de escanear puertos. |
El escaneo SYN (-sS) es el rey por tres razones: es el más rápido, es el más discreto (no completa el handshake, por lo que no queda en los logs de la aplicación aunque sí en los del firewall), y es el que mejor detecta puertos filtrados. Su único requisito es ejecutarse como root porque necesita crear paquetes TCP sin procesar (raw sockets).
3. Comandos básicos de escaneo
# —— ESCANEOS BÁSICOS —————————————————————————— # Escaneo de un host (1000 puertos más comunes, SYN scan): nmap 192.168.56.101 # Escaneo SYN explícito (requiere root): sudo nmap -sS 192.168.56.101 # Escaneo TCP Connect (sin root): nmap -sT 192.168.56.101 # Escanear toda una red (descubrir hosts activos): nmap -sn 192.168.56.0/24 # Escanear múltiples hosts: nmap 192.168.56.101 192.168.56.102 192.168.56.103 nmap 192.168.56.101-103 # Escanear todos los puertos (1-65535): sudo nmap -p- 192.168.56.101 # Escanear puertos específicos: nmap -p 22,80,443,3306,8080 192.168.56.101 # Escanear un rango de puertos: nmap -p 1-1024 192.168.56.101 # Escanear puertos más comunes (top N): nmap --top-ports 100 192.168.56.101 nmap --top-ports 1000 192.168.56.101 # Escaneo UDP (lento): sudo nmap -sU 192.168.56.101 sudo nmap -sU --top-ports 20 192.168.56.101 # Combinar TCP y UDP: sudo nmap -sS -sU -p T:80,443,22,U:53,161 192.168.56.101
# Comandos copiables nmap 192.168.56.101 sudo nmap -sS 192.168.56.101 nmap -sT 192.168.56.101 nmap -sn 192.168.56.0/24 nmap 192.168.56.101 192.168.56.102 192.168.56.103 nmap 192.168.56.101-103 sudo nmap -p- 192.168.56.101 nmap -p 22,80,443,3306,8080 192.168.56.101 nmap -p 1-1024 192.168.56.101 nmap --top-ports 100 192.168.56.101 nmap --top-ports 1000 192.168.56.101 sudo nmap -sU 192.168.56.101 sudo nmap -sU --top-ports 20 192.168.56.101 sudo nmap -sS -sU -p T:80,443,22,U:53,161 192.168.56.101
4. Detección de versiones y sistema operativo
Saber que el puerto 80 está abierto es el principio. Saber que hay un Apache httpd 2.4.6 en CentOS es lo que permite buscar CVEs específicos. La detección de versiones (-sV) es el paso que convierte un escaneo de inventario en un escaneo de auditoría.
DETECCIÓN DE SERVICIOS Y VERSIONES: -sV Sin -sV: Nmap solo sabe que un puerto está abierto. Con -sV: Nmap envía probes específicos a cada puerto abierto y analiza las respuestas para identificar el servicio y versión. EJEMPLO DE OUTPUT SIN -sV: PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 3306/tcp open mysql EJEMPLO DE OUTPUT CON -sV: PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.4 (protocol 2.0) 80/tcp open http Apache httpd 2.4.6 ((CentOS)) 3306/tcp open mysql MySQL 5.5.60-MariaDB CON LAS VERSIONES EXACTAS SE PUEDE: ▸ Buscar CVEs en: nvd.nist.gov, exploit-db.com ▸ Apache 2.4.6 → CVE-2017-7679, CVE-2017-9788 (críticos) ▸ MySQL 5.5.60 → CVE-2018-2562 (escalada de privilegios) ▸ OpenSSH 7.4 → CVE-2018-15919 (enumeración de usuarios) INTENSIDAD DE DETECCIÓN (--version-intensity 0-9): 0 = solo probes más ligeros (rápido, menos preciso) 5 = por defecto 9 = todos los probes posibles (lento, máxima precisión) --version-light = intensidad 2 (rápido) --version-all = intensidad 9 (exhaustivo)
# —— DETECCIÓN DE VERSIONES Y SISTEMA OPERATIVO —————————— # Detección de versiones de servicios: sudo nmap -sV 192.168.56.101 # Detección de versiones con máxima intensidad: sudo nmap -sV --version-intensity 9 192.168.56.101 # Detección del sistema operativo: sudo nmap -O 192.168.56.101 # Output típico de -O: # OS details: Linux 3.2 - 4.9 # Network Distance: 1 hop # Forzar la detección de OS aunque no haya suficiente información: sudo nmap -O --osscan-guess 192.168.56.101 # El combo más completo: versiones + OS + scripts por defecto: sudo nmap -sV -O -sC 192.168.56.101 # El flag -A hace todo a la vez (Aggressive): # -sV + -O + -sC + traceroute sudo nmap -A 192.168.56.101 # Escaneo completo típico de pentesting: sudo nmap -sS -sV -O -sC -p- --open 192.168.56.101 # --open: mostrar solo puertos abiertos (ignorar filtered/closed)
# Comandos copiables sudo nmap -sV 192.168.56.101 sudo nmap -sV --version-intensity 9 192.168.56.101 sudo nmap -O 192.168.56.101 sudo nmap -O --osscan-guess 192.168.56.101 sudo nmap -sV -O -sC 192.168.56.101 sudo nmap -A 192.168.56.101 sudo nmap -sS -sV -O -sC -p- --open 192.168.56.101
El flag -A (Aggressive) activa simultáneamente la detección de versiones, OS, scripts por defecto y traceroute. Es conveniente para el laboratorio y para escaneos donde no importa el ruido, pero en auditorías reales es preferible separar las fases para tener más control sobre lo que se ejecuta.
5. Nmap Scripting Engine (NSE): automatizar auditorías
El NSE transforma Nmap de un escáner de puertos en una plataforma de auditoría completa. Los scripts se ejecutan sobre los resultados del escaneo y pueden hacer desde algo tan simple como leer el título de una página web hasta detectar vulnerabilidades específicas como EternalBlue o ejecutar ataques de fuerza bruta.
NMAP SCRIPTING ENGINE (NSE): AUTOMATIZAR AUDITORÍAS NSE permite ejecutar scripts Lua sobre los resultados del escaneo. Hay más de 600 scripts incluidos en Nmap. Ubicación en Kali: /usr/share/nmap/scripts/ CATEGORÍAS DE SCRIPTS NSE: auth → Prueba credenciales por defecto o sin contraseña brute → Fuerza bruta de autenticación discovery → Descubrir más información sobre servicios exploit → Explotar vulnerabilidades directamente vuln → Detectar vulnerabilidades conocidas safe → Scripts que no dañan el objetivo intrusive → Scripts que pueden afectar al objetivo default → Conjunto básico de scripts seguros (-sC) -sC ejecuta todos los scripts de la categoría 'default' Es equivalente a: --script=default SCRIPTS MÁS ÚTILES EN AUDITORÍA: http-title → Título de páginas web en puertos HTTP http-headers → Cabeceras HTTP del servidor ssl-cert → Información del certificado TLS smb-vuln-ms17-010 → Detectar EternalBlue (WannaCry) smb-vuln-ms08-067 → MS08-067 (Conficker) ftp-anon → Acceso FTP anónimo ssh-hostkey → Clave pública SSH del servidor mysql-empty-password → MySQL sin contraseña de root http-robots.txt → Contenido del robots.txt dns-zone-transfer → Intentar transferencia de zona DNS
# —— NSE: SCRIPTS DE NMAP —————————————————————————— # Scripts por defecto (-sC): sudo nmap -sC 192.168.56.101 # Scripts de una categoría: sudo nmap --script=vuln 192.168.56.101 sudo nmap --script=auth 192.168.56.101 sudo nmap --script=discovery 192.168.56.101 # Script específico: sudo nmap --script=http-title 192.168.56.101 sudo nmap --script=ftp-anon 192.168.56.101 -p 21 sudo nmap --script=smb-vuln-ms17-010 192.168.56.101 -p 445 # Múltiples scripts: sudo nmap --script=http-title,http-headers 192.168.56.101 -p 80 # Scripts con wildcard: sudo nmap --script=http-* 192.168.56.101 -p 80,443,8080 sudo nmap --script=smb-* 192.168.56.101 -p 445 # Script con argumentos: sudo nmap --script=http-brute --script-args userdb=users.txt,passdb=pass.txt 192.168.56.101 -p 80 # Detectar vulnerabilidades conocidas (potencialmente intrusivo): sudo nmap --script=vuln 192.168.56.101 # Ver información de un script antes de usarlo: nmap --script-help=smb-vuln-ms17-010 # Buscar scripts relacionados con un servicio: ls /usr/share/nmap/scripts/ | grep mysql ls /usr/share/nmap/scripts/ | grep http
# Comandos copiables sudo nmap -sC 192.168.56.101 sudo nmap --script=vuln 192.168.56.101 sudo nmap --script=auth 192.168.56.101 sudo nmap --script=discovery 192.168.56.101 sudo nmap --script=http-title 192.168.56.101 sudo nmap --script=ftp-anon 192.168.56.101 -p 21 sudo nmap --script=smb-vuln-ms17-010 192.168.56.101 -p 445 sudo nmap --script=http-title,http-headers 192.168.56.101 -p 80 sudo nmap --script=http-* 192.168.56.101 -p 80,443,8080 sudo nmap --script=smb-* 192.168.56.101 -p 445 sudo nmap --script=http-brute --script-args userdb=users.txt,passdb=pass.txt 192.168.56.101 -p 80 nmap --script-help=smb-vuln-ms17-010 ls /usr/share/nmap/scripts/ | grep mysql ls /usr/share/nmap/scripts/ | grep http
Una advertencia sobre –script=vuln: esta categoría incluye scripts que intentan activamente explotar vulnerabilidades. Algunos pueden crashear servicios o dejar trazas significativas. En auditorías de producción, revisar qué scripts concretos incluye esa categoría antes de ejecutarlos, y obtener autorización explícita para pruebas intrusivas.
6. Timing y optimización de velocidad
La velocidad del escaneo es siempre un compromiso entre rapidez y precisión (a más velocidad, más probabilidad de perder puertos por timeout) y entre rapidez y sigilo (a más velocidad, más fácil de detectar por un IDS). Las plantillas de timing de Nmap abstraen este equilibrio en seis niveles.
OPTIMIZACIÓN DE VELOCIDAD: PLANTILLAS DE TIMING (-T) T0 — Paranoid: muy lento, evita IDS (1 probe cada 5 min) T1 — Sneaky: lento, evasión (1 probe cada 15 seg) T2 — Polite: más lento que por defecto, reduce carga de red T3 — Normal: por defecto, equilibrio velocidad/discreción T4 — Aggressive: más rápido, asume red rápida y fiable T5 — Insane: máxima velocidad, puede perder resultados CUÁNDO USAR CADA UNO: T0-T1: cuando el IDS es sensible y la discreción es crítica T2: redes lentas o inestables T3: uso general (por defecto) T4: laboratorio o red interna controlada T5: solo en tu propio laboratorio, acepta falsos negativos PARÁMETROS DE TIMING INDIVIDUALES: --min-rate N mínimo N paquetes por segundo --max-rate N máximo N paquetes por segundo --min-parallelism N mínimo N sondas en paralelo --max-parallelism N máximo N sondas en paralelo --host-timeout T tiempo máximo por host (ej: 30m) --scan-delay T espera entre sondas (ej: 1s, 500ms) EJEMPLO PRÁCTICO: Escaneo rápido en laboratorio: sudo nmap -T4 --min-rate 1000 -p- 192.168.56.101 Escaneo sigiloso en red corporativa: sudo nmap -T1 --scan-delay 2s -p 80,443,22 192.168.56.101
Output: guardar resultados en múltiples formatos
# —— TIMING, RENDIMIENTO Y OUTPUT —————————————————— # Escaneo rápido (lab/red interna): sudo nmap -T4 192.168.56.101 # Escaneo con rate mínimo garantizado: sudo nmap -T4 --min-rate 5000 -p- 192.168.56.101 # Escaneo sigiloso con delay: sudo nmap -T2 --scan-delay 1s 192.168.56.101 # —— FORMATOS DE SALIDA —————————————————————————— # Guardar en formato normal (legible por humanos): sudo nmap -oN resultado.txt 192.168.56.101 # Guardar en formato XML (para importar en otras herramientas): sudo nmap -oX resultado.xml 192.168.56.101 # Guardar en formato grepable: sudo nmap -oG resultado.gnmap 192.168.56.101 # Guardar en los tres formatos a la vez: sudo nmap -oA resultado 192.168.56.101 # Genera: resultado.nmap + resultado.xml + resultado.gnmap # Generar reporte HTML desde XML (con xsltproc): xsltproc resultado.xml -o resultado.html # Mostrar solo hosts con puertos abiertos: sudo nmap --open 192.168.56.0/24 # Verbose: ver progreso en tiempo real: sudo nmap -v 192.168.56.101 sudo nmap -vv 192.168.56.101 # Ver paquetes enviados y recibidos: sudo nmap -d 192.168.56.101
# Comandos copiables sudo nmap -T4 192.168.56.101 sudo nmap -T4 --min-rate 5000 -p- 192.168.56.101 sudo nmap -T2 --scan-delay 1s 192.168.56.101 sudo nmap -oN resultado.txt 192.168.56.101 sudo nmap -oX resultado.xml 192.168.56.101 sudo nmap -oG resultado.gnmap 192.168.56.101 sudo nmap -oA resultado 192.168.56.101 xsltproc resultado.xml -o resultado.html sudo nmap --open 192.168.56.0/24 sudo nmap -v 192.168.56.101 sudo nmap -vv 192.168.56.101 sudo nmap -d 192.168.56.101
7. Evasión de firewalls e IDS
En auditorías de entornos con sistemas de detección de intrusos (IDS) o firewalls con inspección de paquetes, las técnicas de evasión de Nmap pueden ser la diferencia entre un escaneo que se detecta inmediatamente y uno que pasa desapercibido. Ninguna técnica es infalible, pero combinadas con un timing bajo pueden reducir significativamente la probabilidad de detección.
TÉCNICAS DE EVASIÓN DE FIREWALLS E IDS FRAGMENTACIÓN DE PAQUETES (-f): Divide los paquetes TCP en fragmentos de 8 bytes. Algunos firewalls e IDS no reensamblan fragmentos para inspeccionarlos. sudo nmap -f 192.168.56.101 DECOYS (señuelos) (-D): Mezcla el escaneo real con escaneos falsos desde IPs inventadas. El IDS ve múltiples IPs escaneando simultáneamente. sudo nmap -D 10.0.0.1,10.0.0.2,ME 192.168.56.101 'ME' indica la posición de la IP real en la lista. SPOOFING DE DIRECCIÓN MAC (--spoof-mac): Cambia la MAC address aparente. Útil en redes locales. sudo nmap --spoof-mac 00:11:22:33:44:55 192.168.56.101 sudo nmap --spoof-mac Apple 192.168.56.101 sudo nmap --spoof-mac 0 192.168.56.101 (MAC aleatoria) PUERTOS FUENTE (--source-port / -g): Algunos firewalls permiten tráfico desde puertos específicos. sudo nmap -g 53 192.168.56.101 (parecer DNS) sudo nmap -g 80 192.168.56.101 (parecer HTTP) IDLE SCAN (-sI): el escaneo más sigiloso Usa un host 'zombie' como intermediario. El tráfico del escaneo parece venir del zombie, no de ti. sudo nmap -sI 192.168.56.200 192.168.56.101 Requiere encontrar un host con IP ID predecible.
# —— EVASIÓN DE FIREWALLS E IDS —————————————————— # Fragmentar paquetes: sudo nmap -f 192.168.56.101 sudo nmap -ff 192.168.56.101 # Usar decoys (señuelos): sudo nmap -D 10.0.0.1,10.0.0.2,ME 192.168.56.101 sudo nmap -D RND:10 192.168.56.101 # Cambiar puerto fuente: sudo nmap -g 53 192.168.56.101 sudo nmap --source-port 80 192.168.56.101 # Spoof MAC address: sudo nmap --spoof-mac 0 192.168.56.101 sudo nmap --spoof-mac Apple 192.168.56.101 # Escaneo de puertos con ACK (mapear firewall): sudo nmap -sA 192.168.56.101 # Idle scan (requiere zombie con IPID predecible): sudo nmap -sI 192.168.56.200 192.168.56.101 # Añadir datos basura a los paquetes: sudo nmap --data-length 25 192.168.56.101 # Desactivar resolución DNS (más rápido, menos ruido): nmap -n 192.168.56.101 # Usar resolución DNS inversa (para hostnames): nmap -R 192.168.56.101
# Comandos copiables sudo nmap -f 192.168.56.101 sudo nmap -ff 192.168.56.101 sudo nmap -D 10.0.0.1,10.0.0.2,ME 192.168.56.101 sudo nmap -D RND:10 192.168.56.101 sudo nmap -g 53 192.168.56.101 sudo nmap --source-port 80 192.168.56.101 sudo nmap --spoof-mac 0 192.168.56.101 sudo nmap --spoof-mac Apple 192.168.56.101 sudo nmap -sA 192.168.56.101 sudo nmap -sI 192.168.56.200 192.168.56.101 sudo nmap --data-length 25 192.168.56.101 nmap -n 192.168.56.101 nmap -R 192.168.56.101
8. El workflow completo en pentesting
Un error frecuente es ejecutar un solo escaneo exhaustivo desde el principio. El enfoque profesional es escalonar los escaneos: primero rápido y superficial para tener una visión general, luego más profundo y dirigido sobre los objetivos interesantes. Esto ahorra tiempo y genera menos ruido.
WORKFLOW COMPLETO DE NMAP EN PENTESTING
FASE 1: DESCUBRIMIENTO DE HOSTS (rápido, sin escanear puertos)
sudo nmap -sn 192.168.56.0/24 -oG hosts_activos.gnmap
grep 'Up' hosts_activos.gnmap | cut -d' ' -f2 > ips_activas.txt
→ Lista de IPs activas para la siguiente fase
FASE 2: ESCANEO RÁPIDO (puertos comunes, sin versiones)
sudo nmap -sS -T4 --top-ports 1000 -iL ips_activas.txt -oA scan_rapido
→ Visión general: qué puertos están abiertos en qué hosts
FASE 3: ESCANEO COMPLETO (todos los puertos)
sudo nmap -sS -T4 -p- -iL ips_activas.txt -oA scan_completo
→ Descubrir servicios en puertos no estándar
FASE 4: DETECCIÓN DE VERSIONES Y OS (solo puertos abiertos)
# Extraer puertos abiertos del scan completo:
grep 'open' scan_completo.nmap | awk '{print $1}' | cut -d'/' -f1 | sort -u | tr '\n' ',' > puertos.txt
sudo nmap -sV -O -sC -p $(cat puertos.txt) -iL ips_activas.txt -oA scan_detallado
FASE 5: SCRIPTS ESPECÍFICOS (por servicio)
# Para cada servicio encontrado, ejecutar scripts relevantes:
sudo nmap --script=smb-vuln-* -p 445 -iL ips_activas.txt
sudo nmap --script=http-* -p 80,8080,443 -iL ips_activas.txt
sudo nmap --script=ftp-anon -p 21 -iL ips_activas.txt
FASE 6: ANÁLISIS Y REPORTE
xsltproc scan_detallado.xml -o reporte_nmap.html
→ Revisar versiones contra NVD/ExploitDB
→ Documentar hallazgos con evidencia9. Interpretar los resultados
| Estado del puerto | Significado | Qué hacer |
|---|---|---|
| open | El puerto está abierto y hay un servicio escuchando. Responde a la sonda. | Identificar el servicio y versión. Buscar CVEs. Probar acceso. |
| closed | El puerto es accesible pero no hay servicio. Responde con RST. | Registrar. Si es un puerto de servicio conocido: el servicio está caído. |
| filtered | Un firewall, filtro de paquetes o ACL está bloqueando las sondas. | Probar técnicas de evasión. Probar otros tipos de escaneo. |
| open|filtered | Nmap no puede determinar si está abierto o filtrado. Sin respuesta. | Común en UDP. Probar con versiones específicas de sonda. |
| unfiltered | El puerto es accesible pero Nmap no puede determinar si está abierto. | Aparece en escaneos ACK. Hacer SYN scan para confirmar estado. |
10. Práctica: escaneo completo sobre Metasploitable 2
Con el laboratorio de VirtualBox montado (ver el artículo de la serie), Metasploitable 2 es el objetivo perfecto para practicar todos los tipos de escaneo. Tiene decenas de servicios vulnerables intencionalmente, todos documentados, en una red completamente aislada.
# —— ESCANEO COMPLETO SOBRE METASPLOITABLE 2 (LAB) —————————— # PASO 1: Verificar que Metasploitable está activo: ping -c 3 192.168.56.101 # PASO 2: Escaneo rápido para ver puertos abiertos: sudo nmap -sS -T4 192.168.56.101 # PASO 3: Escaneo completo con versiones y scripts: sudo nmap -sS -sV -sC -O -p- -T4 192.168.56.101 -oA metasploitable_full # PASO 4: Scripts de vulnerabilidades: sudo nmap --script=vuln 192.168.56.101 # PASO 5: Scripts específicos para servicios encontrados: sudo nmap --script=ftp-anon -p 21 192.168.56.101 sudo nmap --script=smb-vuln-ms17-010 -p 445 192.168.56.101 sudo nmap --script=mysql-empty-password -p 3306 192.168.56.101 sudo nmap --script=http-title,http-headers -p 80 192.168.56.101 # PASO 6: Generar reporte HTML: xsltproc metasploitable_full.xml -o reporte_metasploitable.html # Puertos que encontrarás abiertos en Metasploitable 2: # 21/ftp vsftpd 2.3.4 (backdoor conocido) # 22/ssh OpenSSH 4.7 # 23/telnet Linux telnetd # 25/smtp Postfix # 80/http Apache 2.2.8 # 139/445 Samba 3.0.20 (vulnerable a CVE-2007-2447) # 3306/mysql MySQL 5.0.51a (sin contraseña de root) # 5432/postgresql # 6667/irc UnrealIRCd (backdoor conocido) # 8180/http Apache Tomcat 5.5
# Comandos copiables ping -c 3 192.168.56.101 sudo nmap -sS -T4 192.168.56.101 sudo nmap -sS -sV -sC -O -p- -T4 192.168.56.101 -oA metasploitable_full sudo nmap --script=vuln 192.168.56.101 sudo nmap --script=ftp-anon -p 21 192.168.56.101 sudo nmap --script=smb-vuln-ms17-010 -p 445 192.168.56.101 sudo nmap --script=mysql-empty-password -p 3306 192.168.56.101 sudo nmap --script=http-title,http-headers -p 80 192.168.56.101 xsltproc metasploitable_full.xml -o reporte_metasploitable.html
11. Parsear y procesar resultados
En auditorías con muchos hosts, procesar los resultados de Nmap manualmente no es viable. El formato XML (-oX) y grepable (-oG) permiten extraer información específica con herramientas estándar o escribir scripts de procesamiento.
# —— PARSEAR RESULTADOS DE NMAP ——————————————————
# Extraer solo IPs con puertos abiertos (formato grepable):
grep 'open' resultado.gnmap | cut -d' ' -f2
# Extraer todos los puertos abiertos de un host:
grep 'open' resultado.nmap | awk '{print $1}'
# Extraer hosts con puerto 445 abierto (SMB):
grep '445/open' resultado.gnmap | cut -d' ' -f2
# Extraer versiones de servicios:
grep 'open' resultado.nmap | grep -v '^#'
# Con Python: parsear XML de Nmap:
pip install python-nmap
# Script Python básico para parsear resultados:
# import nmap
# nm = nmap.PortScanner()
# nm.scan('192.168.56.101', '1-1024', '-sV')
# for host in nm.all_hosts():
# for proto in nm[host].all_protocols():
# ports = nm[host][proto].keys()
# for port in ports:
# print(f'{host}:{port} - {nm[host][proto][port]["name"]} {nm[host][proto][port]["version"]}')
# Herramienta: nmapAutomator (automatiza todo el workflow):
# github.com/21y4d/nmapAutomator
nmapAutomator.sh 192.168.56.101 All# Comandos copiables
grep 'open' resultado.gnmap | cut -d' ' -f2
grep 'open' resultado.nmap | awk '{print $1}'
grep '445/open' resultado.gnmap | cut -d' ' -f2
grep 'open' resultado.nmap | grep -v '^#'
pip install python-nmap
nmapAutomator.sh 192.168.56.101 AllConclusión
Nmap es una de esas herramientas que se aprenden en un día y se dominan en años. La diferencia entre un usuario básico y un auditor experimentado no está en conocer más flags, sino en saber cuándo usar cada tipo de escaneo, cómo interpretar los resultados en contexto, y cómo combinar Nmap con las herramientas siguientes del workflow: la detección de versiones lleva a la búsqueda de CVEs, los scripts NSE confirman vulnerabilidades, y los resultados XML alimentan herramientas como Metasploit o Nexpose.
El siguiente artículo de la serie cubre la escalada de privilegios en Linux: una vez que Nmap identifica los servicios expuestos y sus versiones vulnerables, el siguiente paso es ganar acceso y escalar privilegios hasta root. Todo empieza con un buen escaneo.
Recursos
Nmap Reference Guide (nmap.org/book): documentación oficial completa con ejemplos de cada opción · Nmap NSE Scripts (nmap.org/nsedoc): catálogo de todos los scripts con descripción y ejemplos · nmapAutomator (github.com/21y4d/nmapAutomator): script que automatiza el workflow completo de Nmap · Nmap Network Scanning (Gordon Lyon, gratis online): el libro de referencia escrito por el creador de Nmap · VulnHub / HackTheBox: entornos donde practicar escaneos sobre máquinas diseñadas para ello
unfantasmaenelsistema.com | Seguridad, sistemas y todo lo que no debería funcionar (pero funciona)

