Saltar al contenido principal

Nmap

Network Scanner7.9xRed Team

El escáner de redes y puertos más usado en el mundo. Permite descubrir hosts activos, puertos abiertos, servicios, versiones y sistemas operativos mediante técnicas de fingerprinting, además de extender su funcionalidad con el motor de scripts NSE.

Nmap: el estándar de descubrimiento de redes

Arquitectura, capacidades y casos de uso

Nmap ("Network Mapper") es la herramienta de referencia para reconocimiento de redes desde 1997. Es usada por administradores de sistemas, equipos de respuesta a incidentes y pentesters para entender qué hay realmente expuesto en una red.

¿Qué puede hacer Nmap? • Descubrimiento de hosts activos (host discovery) • Escaneo de puertos TCP y UDP con múltiples técnicas • Detección de servicios y versiones (-sV) • Fingerprinting de sistema operativo (-O) • Motor de scripts NSE para más de 600 scripts de detección • Generación de reportes en múltiples formatos (texto, XML, grepable) • Zenmap: interfaz gráfica oficial para visualizar topologías de red

Filosofía de diseño: Nmap está pensado para ser preciso, flexible y rápido a la vez. Por eso ofrece decenas de combinaciones de flags: desde un escaneo silencioso de un solo puerto hasta un barrido agresivo de toda una red /16.

Nmap vs herramientas similares: Masscan es más rápido para escaneos masivos pero menos preciso en detección de servicios. Nmap prioriza la calidad del fingerprinting sobre la velocidad bruta, por lo que suele combinarse: Masscan para descubrir rápido, Nmap para profundizar.

bash
# ── INSTALACIÓN ───────────────────────────────────────
sudo apt install nmap            # Ubuntu/Debian
sudo dnf install nmap            # Fedora/RHEL
brew install nmap                # macOS
# Windows: instalador en https://nmap.org/download.html (incluye Zenmap)
 
# Verificar instalación:
nmap --version
 
# ── SINTAXIS BÁSICA ────────────────────────────────────
nmap [opciones de escaneo] [opciones de detección] <objetivo>
 
# Objetivos posibles:
nmap 192.168.1.10                 # Host único
nmap 192.168.1.1-50               # Rango
nmap 192.168.1.0/24               # Subred completa (CIDR)
nmap scanme.nmap.org              # Por nombre de dominio
nmap -iL objetivos.txt            # Lista desde archivo
 
# ── ZENMAP (GUI) ───────────────────────────────────────
zenmap &
# Permite construir comandos visualmente y ver topología de red

💡scanme.nmap.org es un host oficial que los propios desarrolladores de Nmap mantienen para practicar escaneos de forma legal y autorizada.

Host Discovery: encontrar sistemas activos

Identificar qué hosts están realmente "vivos" antes de escanear puertos

Antes de escanear puertos, normalmente quieres saber qué hosts existen en una red. Nmap ofrece varias técnicas porque muchos firewalls bloquean el ping ICMP tradicional.

Técnicas de descubrimiento: • ICMP Echo (ping clásico): rápido pero frecuentemente bloqueado • ARP scan: en redes locales (LAN), prácticamente infalible porque ARP no se filtra • TCP SYN/ACK ping: envía paquetes a puertos comunes para inferir si el host responde • -Pn: omite el descubrimiento y asume que todos los hosts están activos (útil cuando el ICMP está bloqueado pero sabes que el host existe)

¿Cuándo usar cada una? En LAN, el ARP scan (-PR, activado por defecto en redes locales) es el más confiable. Para hosts en internet, suele ser necesario combinar varias técnicas o usar -Pn directamente si el objetivo está detrás de un firewall agresivo.

bash
# ── PING SCAN: solo descubrir hosts, sin escanear puertos ──
nmap -sn 192.168.1.0/24
 
# ── ARP SCAN (automático en LAN) ───────────────────────
sudo nmap -PR -sn 192.168.1.0/24
 
# ── DESCUBRIMIENTO CON TÉCNICAS TCP/ICMP ESPECÍFICAS ──
nmap -PS22,80,443 192.168.1.0/24    # TCP SYN ping a puertos específicos
nmap -PA80,443 192.168.1.0/24       # TCP ACK ping
nmap -PE 192.168.1.0/24             # ICMP Echo clásico
nmap -PU53,161 192.168.1.0/24       # UDP ping
 
# ── SALTAR EL DESCUBRIMIENTO ────────────────────────────
nmap -Pn 192.168.1.10                # Asume que el host está activo
 
# ── COMBINAR DESCUBRIMIENTO + LISTAR SIN ESCANEAR ──────
nmap -sL 192.168.1.0/24              # Solo lista objetivos (DNS reverso)

💡En redes locales, evita -PE solo: muchos hosts modernos (Windows con firewall activo) ignoran ICMP pero sí responden a sondas TCP.

Técnicas de escaneo de puertos

TCP Connect, SYN, UDP y escaneos de evasión básica

El núcleo de Nmap es determinar el estado de los puertos: open, closed, filtered o unfiltered. Cada técnica de escaneo tiene un trade-off entre sigilo, velocidad y privilegios requeridos.

Tipos principales: • TCP Connect (-sT): completa el handshake TCP de tres vías. No requiere privilegios root pero es más detectable (aparece en logs de aplicación). • TCP SYN (-sS): el "stealth scan" clásico. Envía solo el SYN y nunca completa la conexión. Requiere privilegios root/admin. • UDP Scan (-sU): mucho más lento porque UDP no tiene confirmación de conexión; Nmap infiere el estado por ausencia/presencia de respuestas ICMP. • FIN/NULL/Xmas (-sF/-sN/-sX): escaneos que envían banderas TCP inusuales para evadir firewalls stateless simples (no funcionan contra firewalls modernos con inspección de estado). • ACK Scan (-sA): no detecta puertos abiertos, sino que mapea qué reglas de firewall existen (filtered vs unfiltered).

Selección de puertos: Por defecto Nmap escanea los 1000 puertos TCP más comunes. Para auditorías completas conviene especificar rangos más amplios.

bash
# ── ESCANEOS BÁSICOS ───────────────────────────────────
sudo nmap -sS 192.168.1.10            # SYN scan (requiere root)
nmap -sT 192.168.1.10                 # Connect scan (sin privilegios)
sudo nmap -sU 192.168.1.10            # UDP scan
 
# ── ESCANEOS DE EVASIÓN BÁSICA ─────────────────────────
sudo nmap -sF 192.168.1.10            # FIN scan
sudo nmap -sN 192.168.1.10            # NULL scan
sudo nmap -sX 192.168.1.10            # Xmas scan
sudo nmap -sA 192.168.1.10            # ACK scan (mapeo de firewall)
 
# ── SELECCIÓN DE PUERTOS ───────────────────────────────
nmap -p 80 192.168.1.10               # Un puerto
nmap -p 22,80,443 192.168.1.10        # Lista de puertos
nmap -p 1-1000 192.168.1.10           # Rango
nmap -p- 192.168.1.10                 # Los 65535 puertos
nmap -p u:53,161,T:21-25 192.168.1.10 # Mezclar TCP y UDP
nmap -F 192.168.1.10                  # Solo puertos "rápidos" más comunes
nmap --top-ports 100 192.168.1.10     # Los 100 puertos más usados
 
# ── VELOCIDAD: escaneo completo de la red local ────────
sudo nmap -sS -p- -T4 192.168.1.0/24 -oA escaneo_completo

💡El SYN scan (-sS) es el más usado en auditorías reales: es relativamente rápido, no completa conexiones (menos ruido en logs de aplicación) y funciona contra la mayoría de configuraciones.

Detección de servicios, versiones y sistema operativo

Identificar exactamente qué corre detrás de cada puerto abierto

Saber que el puerto 80 está abierto no dice mucho; saber que corre "Apache 2.4.41 en Ubuntu" sí. Nmap usa una base de firmas extensa para identificar versiones exactas de software y sistemas operativos.

Detección de versión (-sV): Nmap envía sondas específicas por protocolo y compara las respuestas contra su base de datos nmap-service-probes. Puede identificar no solo el software sino, en muchos casos, la versión exacta.

Fingerprinting de OS (-O): Analiza características sutiles de la pila TCP/IP (TTL inicial, tamaño de ventana, opciones TCP) para inferir el sistema operativo. Requiere al menos un puerto abierto y uno cerrado para mayor precisión.

Modo agresivo (-A): Combina -sV -O --traceroute y ejecuta scripts NSE básicos de detección. Es el flag más usado en auditorías iniciales porque da una visión completa en un solo comando, a costa de ser más ruidoso y lento.

bash
# ── DETECCIÓN DE VERSIONES ─────────────────────────────
nmap -sV 192.168.1.10
nmap -sV --version-intensity 9 192.168.1.10   # Más sondas, más preciso, más lento
nmap -sV --version-light 192.168.1.10         # Solo sondas rápidas
 
# ── FINGERPRINTING DE SISTEMA OPERATIVO ────────────────
sudo nmap -O 192.168.1.10
sudo nmap -O --osscan-guess 192.168.1.10      # Forzar el mejor intento aunque no haya certeza
 
# ── MODO AGRESIVO (todo en uno) ────────────────────────
sudo nmap -A 192.168.1.10
 
# ── EJEMPLO DE SALIDA TÍPICA (resumida) ────────────────
# PORT     STATE SERVICE     VERSION
# 22/tcp   open  ssh         OpenSSH 8.2p1 Ubuntu
# 80/tcp   open  http        Apache httpd 2.4.41
# 3306/tcp open  mysql       MySQL 8.0.27
# Device type: general purpose
# Running: Linux 5.X
# OS details: Linux 5.0 - 5.4
 
# ── COMBINAR CON ESCANEO COMPLETO DE PUERTOS ───────────
sudo nmap -p- -sV -O -T4 192.168.1.10 -oA fingerprint_completo

💡El fingerprinting de OS necesita idealmente un puerto abierto y uno cerrado en el objetivo; si todos los puertos están filtrados, la precisión baja considerablemente.

NSE — Nmap Scripting Engine

Extender Nmap con más de 600 scripts de detección

NSE permite ejecutar scripts en Lua que automatizan tareas que van desde reconocimiento simple hasta detección de configuraciones vulnerables. Es lo que transforma a Nmap de "escáner de puertos" a "plataforma de reconocimiento".

Categorías de scripts: • auth: prueba credenciales por defecto o bypass de autenticación • discovery: extrae información adicional del servicio (ej: títulos de páginas web, comparticiones SMB) • vuln: verifica si un servicio es vulnerable a problemas conocidos y públicamente documentados • brute: fuerza bruta de credenciales contra servicios • safe: scripts que no deberían causar impacto ni denegación de servicio • intrusive: pueden afectar el funcionamiento del servicio objetivo, usar con precaución

Buscar y usar scripts: Los scripts están en /usr/share/nmap/scripts/ y se documentan con nmap --script-help . Se pueden combinar varios scripts o categorías completas en un mismo escaneo.

bash
# ── LISTAR SCRIPTS DISPONIBLES ─────────────────────────
ls /usr/share/nmap/scripts/ | head -20
nmap --script-help http-title
 
# ── EJECUTAR SCRIPTS POR CATEGORÍA ─────────────────────
nmap --script discovery 192.168.1.10
nmap --script "default,safe" 192.168.1.10
nmap -sV --script vuln 192.168.1.10           # Verificación de vulnerabilidades conocidas
 
# ── SCRIPTS ESPECÍFICOS ────────────────────────────────
nmap --script http-title 192.168.1.10 -p 80
nmap --script http-headers 192.168.1.10 -p 80,443
nmap --script smb-os-discovery 192.168.1.10 -p 445
nmap --script ssl-cert 192.168.1.10 -p 443
nmap --script dns-brute example.com
 
# ── PASAR ARGUMENTOS A SCRIPTS ─────────────────────────
nmap --script http-brute --script-args userdb=users.txt,passdb=pass.txt 192.168.1.10 -p 80
 
# ── ACTUALIZAR LA BASE DE SCRIPTS ──────────────────────
sudo nmap --script-updatedb
 
# ── COMBINAR TODO: reconocimiento completo de un host ──
sudo nmap -sV -sC -p- 192.168.1.10 -oA recon_completo
# -sC equivale a --script default

💡Los scripts vuln solo reportan exposición a problemas ya conocidos y documentados públicamente (no descubren fallas nuevas); siempre conviene confirmar manualmente cualquier hallazgo.

Control de timing y formatos de salida

Ajustar velocidad del escaneo y exportar resultados

Nmap permite controlar qué tan agresivo es su timing (relevante en redes con IDS/IPS o enlaces lentos) y exportar resultados en formatos reutilizables por otras herramientas del flujo de trabajo.

Plantillas de timing (-T0 a -T5): Van desde T0 (paranoico, un paquete cada varios minutos, pensado para evadir IDS) hasta T5 (insano, máxima velocidad, alto riesgo de falsos negativos por timeouts). T3 es el valor por defecto; T4 es el más usado en auditorías autorizadas con buena conectividad.

Formatos de salida: • -oN: texto normal legible • -oX: XML, ideal para parsear con otras herramientas o importar a Metasploit • -oG: formato grepable, útil para scripts con grep/awk • -oA: genera los tres formatos a la vez con el mismo nombre base

Integración con el flujo de trabajo: El XML de Nmap puede importarse directamente en Metasploit (db_import) o en herramientas de gestión de vulnerabilidades para correlacionar hallazgos.

bash
# ── PLANTILLAS DE TIMING ───────────────────────────────
nmap -T0 192.168.1.10     # Paranoico (muy lento, evasión de IDS)
nmap -T2 192.168.1.10     # Sigiloso
nmap -T3 192.168.1.10     # Normal (default)
nmap -T4 192.168.1.10     # Agresivo (común en auditorías autorizadas)
nmap -T5 192.168.1.10     # Insano (máxima velocidad)
 
# ── CONTROL FINO DE TIMING ─────────────────────────────
nmap --min-rate 500 192.168.1.0/24       # Mínimo de paquetes por segundo
nmap --max-retries 1 192.168.1.10        # Reducir reintentos
nmap --host-timeout 30s 192.168.1.10     # Abandonar host lento
 
# ── FORMATOS DE SALIDA ─────────────────────────────────
nmap -oN resultado.txt 192.168.1.10       # Texto plano
nmap -oX resultado.xml 192.168.1.10       # XML
nmap -oG resultado.gnmap 192.168.1.10     # Grepable
nmap -oA resultado 192.168.1.10           # Los tres formatos a la vez
 
# ── PROCESAR SALIDA GREPABLE CON GREP/AWK ──────────────
grep "open" resultado.gnmap | awk '{print $2}'
 
# ── IMPORTAR RESULTADOS XML A METASPLOIT ───────────────
# (Dentro de msfconsole, con la base de datos inicializada)
# db_import resultado.xml
# hosts
# services

💡Para auditorías formales, -oA es el flag más práctico: genera texto legible, XML para automatización y grepable para scripting, todo con un solo comando.

Labs Prácticos

Básico 15 min

Lab 1: Escaneo de red y detección de servicios

Objetivo

Identificar hosts activos en una subred y determinar las versiones de los servicios que ejecutan.

Escenario

Acabas de conectarte a una red corporativa. Necesitas mapear el segmento 192.168.1.0/24 para identificar posibles objetivos.

Pasos

1

Escanear la red buscando hosts activos (Ping Sweep)

2

Realizar un escaneo de puertos SYN en un host específico

3

Detectar versiones de servicios y sistema operativo

4

Guardar los resultados en múltiples formatos

bash — práctica
# PING SWEEP (Descubrimiento rápido)
nmap -sn 192.168.1.0/24

# ESCANEO DETALLADO (Top ports + Versiones)
nmap -sV -sC -O 192.168.1.100

# ESCANEO AGRESIVO (Todo en uno)
nmap -A 192.168.1.100

# GUARDAR RESULTADOS
nmap -oA scan_results 192.168.1.100

Resultado esperado

Obtendrás una lista de puertos abiertos, el nombre y versión del software (ej: Apache 2.4.41) y una estimación del SO.

Aviso legal: Este contenido es estrictamente educativo. CyberFlows no apoya actividades ilegales. Úsalo solo en entornos autorizados.