NSE, argumentos y tracing
Nmap Scripting Engine (NSE) ejecuta scripts Lua después o durante fases concretas del escaneo. Un script puede descubrir información, autenticar, probar credenciales, consultar un servicio externo, enviar un exploit o modificar estado. La unidad de selección es el script revisado, no una categoría recordada.
Esta página se revisó contra el catálogo distribuido con Nmap 7.99. Los mapas por servicio, como automatización y NSE para SMTP, registran qué scripts concretos aportan valor después de conocer el protocolo.
Cómo participa un script
Sección titulada «Cómo participa un script»Un script declara una regla que determina cuándo puede ejecutarse:
prerule: antes del descubrimiento y sin un host concretohostrule: una vez conocido el hostportrule: cuando un puerto cumple número, protocolo, servicio o estadopostrule: después de terminar el escaneo
La función action implementa la interacción. Las librerías de nselib aportan sockets, TLS, credenciales, protocolos y formato de output. Dos scripts de la misma categoría pueden tener reglas, argumentos y efectos completamente distintos.
La detección de versiones influye en portrule. Un script que acepta el servicio smtp puede ejecutarse sobre un puerto no estándar después de -sV, aunque el número no sea 25, 465 o 587. Sin detección, puede depender solo de esos puertos.
Localizar la versión efectiva
Sección titulada «Localizar la versión efectiva»nmap --version identifica el motor. El directorio de datos depende del paquete y puede cambiar mediante NMAPDIR o --datadir DIR. Localiza scripts/script.db, el archivo .nse y las librerías en la instalación real. No copies un argumento de la documentación web sin comprobar el script distribuido.
La base script.db indexa nombre y categorías. --script-updatedb la reconstruye después de instalar o modificar scripts:
sudo nmap --script-updatedbEl comando modifica el índice del directorio de datos. No es necesario para usar los scripts incluidos por el paquete.
Consultar antes de ejecutar
Sección titulada «Consultar antes de ejecutar»--script-help evalúa la misma expresión que aceptaría --script, pero muestra nombre, categorías, descripción y enlace:
nmap --script-help smtp-commandsnmap --script-help 'default and safe'Lee también el código cuando la decisión dependa de:
- comandos de protocolo enviados
- valores predeterminados de dominio, usuario o destinatario
- servicios externos consultados
- número de intentos
- archivos leídos
- condiciones que activan explotación o escritura
- diferencias entre puertos con TLS implícito y STARTTLS
La descripción no siempre enumera todas las ramas de la implementación.
Selección explícita
Sección titulada «Selección explícita»-sC equivale a --script default. La categoría default es una selección mantenida por el proyecto, no una garantía de interacción pasiva. Ejecuta scripts concretos cuando ya sabes qué pregunta quieres responder:
sudo nmap -sV -n -Pn -p 25 \ --script smtp-commands TARGET_IP--script acepta:
- nombre exacto:
smtp-commands - glob:
smtp-* - categoría:
discovery - archivo o directorio
- expresión booleana:
'default and safe and not external'
Un glob como smtp-* incluye en Nmap 7.99 scripts brute, intrusive, external, vuln y exploit. No lo ejecutes como abreviatura de «enumerar SMTP».
Categorías
Sección titulada «Categorías»Las categorías son metadatos de selección y un script puede pertenecer a varias:
| Categoría | Qué agrupa | Pregunta previa |
|---|---|---|
auth |
autenticación, credenciales o bypass | ¿usa una identidad o enumera cuentas? |
broadcast |
descubrimiento de capa local | ¿qué terceros recibirán el broadcast? |
brute |
intentos repetidos | ¿cuál es la política de bloqueo y el límite? |
default |
selección de uso general | ¿qué scripts exactos selecciona en esta versión? |
discovery |
información adicional | ¿qué solicitud y datos produce? |
dos |
prueba de denegación de servicio | ¿puede interrumpir o degradar el servicio? |
exploit |
explotación activa | ¿qué estado, proceso o datos cambia? |
external |
consulta a terceros | ¿qué identificador del objetivo abandona el entorno? |
fuzzer |
entradas inesperadas | ¿cuántos casos y qué estabilidad se espera? |
intrusive |
interacción apreciable | ¿qué volumen, autenticación o cambio implica? |
malware |
indicios de malware o backdoor | ¿qué falso positivo conserva? |
safe |
baja probabilidad de daño según el autor | ¿qué conexiones y logs crea de todos modos? |
version |
apoyo a detección de versiones | ¿qué fingerprint intenta obtener? |
vuln |
comprobación de vulnerabilidad | ¿detecta versión, condición o explotabilidad? |
safe no significa sin tráfico ni sin artefactos. vuln no significa prueba concluyente. Revisa el script.
Argumentos
Sección titulada «Argumentos»--script-args NAME=VALUE pasa valores al registro compartido. Usa el nombre cualificado para evitar colisiones:
sudo nmap -sV -n -Pn -p 25 \ --script smtp-commands \ --script-args smtp-commands.domain=example.test \ TARGET_IPLas listas y tablas usan sintaxis Lua:
sudo nmap -sV -n -Pn -p 25 \ --script smtp-enum-users \ --script-args 'smtp-enum-users.methods={RCPT,VRFY,EXPN},userdb=users.txt' \ TARGET_IPLas comillas evitan que la shell interprete llaves y comas. Antes del comando debe existir una política de intentos y una lista saneada. --script-args-file FILE carga argumentos desde un archivo, pero los secretos siguen disponibles para el proceso y pueden aparecer en registros u outputs. Protege sus permisos y almacenamiento, y documenta su eliminación.
Credenciales compartidas
Sección titulada «Credenciales compartidas»Muchas librerías usan el registro de credenciales de NSE. Argumentos como user, pass, userdb, passdb o los específicos del protocolo pueden alimentar varios scripts. No supongas que un script probará una sola combinación. Lee la ayuda y el código.
La opción --script-args creds.snmp=COMMUNITY es un ejemplo de argumento de librería:
sudo nmap -sU -sV -n -Pn -p 161 \ --script snmp-sysdescr \ --script-args creds.snmp=COMMUNITY \ TARGET_IPTracing y depuración
Sección titulada «Tracing y depuración»--script-trace muestra datos enviados y recibidos por las comunicaciones del script:
sudo nmap -sV -n -Pn -p 25 \ --script smtp-commands --script-trace TARGET_IPPuede exponer credenciales, tokens y contenido de aplicación en el transcript. --packet-trace muestra paquetes de Nmap de forma más general. -d aumenta debug del motor. Usa tracing sobre un host, puerto y script para que el resultado siga siendo interpretable.
--script-timeout TIME limita la ejecución de cada script. Un timeout evita que un script quede pendiente, pero también produce resultados incompletos:
sudo nmap -n -Pn -p PORT \ --script SCRIPT_NAME --script-timeout 30s TARGET_IPRegistra el timeout como limitación. No conviertas «sin output» en resultado negativo.
Salida y validación
Sección titulada «Salida y validación»NSE puede devolver tablas, texto, estados LIKELY VULNERABLE o datos sin un marcador explícito. Conserva XML y examina:
- script y versión de Nmap
- puerto y servicio que activó la regla
- argumentos efectivos
- ramas omitidas por autenticación, timeout o error
- petición y respuesta cuando sean necesarias
- condición que el script realmente probó
Reproduce manualmente la interacción crítica. Si el script enumera un comando, ejecútalo mediante el cliente del protocolo. Si infiere una vulnerabilidad por versión, comprueba configuración y condición. Si prueba relay, valida destinatario, envelope y aceptación sin depender solo de un código intermedio.
Scripts propios
Sección titulada «Scripts propios»Un script local necesita:
- descripción y documentación de argumentos
- regla acotada
- timeouts
- límites de concurrencia
- output estructurado
- casos positivos, negativos y fallos
- revisión de las librerías que usa
No coloques automáticamente código de terceros en el directorio global. Revisa procedencia, licencia, commits, dependencias y cambios de estado. Ejecuta con una ruta explícita durante la evaluación inicial.