Saltar al contenido

Nmap a fondo: el arte del escaneo de redes

    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

    TipoFlagCómo funcionaCuándo usarlo
    SYN scan (Half-open)-sSEnví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-sTCompleta 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-sUEnví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-sAEnví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-sNSin 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-sFSolo flag FIN. Mismo comportamiento que NULL. Explota comportamiento RFC.Evasión. Más discreto que SYN en algunos entornos.
    Xmas scan-sXFlags FIN+PSH+URG activos (como un árbol de Navidad encendido).Evasión. Igual que NULL y FIN: no funciona en Windows.
    Ping scan-snSolo 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 evidencia

    9. Interpretar los resultados

    Estado del puertoSignificadoQué hacer
    openEl puerto está abierto y hay un servicio escuchando. Responde a la sonda.Identificar el servicio y versión. Buscar CVEs. Probar acceso.
    closedEl puerto es accesible pero no hay servicio. Responde con RST.Registrar. Si es un puerto de servicio conocido: el servicio está caído.
    filteredUn firewall, filtro de paquetes o ACL está bloqueando las sondas.Probar técnicas de evasión. Probar otros tipos de escaneo.
    open|filteredNmap no puede determinar si está abierto o filtrado. Sin respuesta.Común en UDP. Probar con versiones específicas de sonda.
    unfilteredEl 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 All

    Conclusió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)

    Resumen de privacidad

    Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.