Scripts en Nmap

Como comentaba en la anterior entrada sobre Nmap, esta herramienta nos ofrece muchas más posibilidades que el descubrimiento de puertos abiertos. Nmap incorpora un potente sistema de scripts conocido como NSE (Nmap Scripting Engine) que permite a los usuarios extender las capacidades de Nmap usando los diversos scripts que incorpora (actualmente hay más de 500 disponibles) que permiten desde la detección avanzada de versiones a la explotación de vulnerabilidades, o creando nuevos scripts que podemos compartir con el resto de usuarios (para los script se utiliza el lenguaje de programación LUA).

Scripts en Nmap

Para habilitar el uso de script en Nmap usamos la opción -sC (nmap -sC <objetivo>). Con esta opción se seleccionarán todos los scripts NSE que pertenecen a la categoría predeterminada (default) y se ejecutarán contra los objetivos que indiquemos en el comando, por ejemplo:

❯ nmap -sC scanme.nmap.org

En este caso le estamos indicando que habilite el uso de scripts de la categoría predeterminada y Nmap selecciona los script a usar teniendo en cuenta los puertos que encuentra. En este caso se ejecutan los scripts ssh-hostkeyhttp-tittle como podemos ver en los resultados reportados:

Starting Nmap 7.80 ( https://nmap.org ) at 2021-02-22 13:01 CET
Nmap scan report for scanme.nmap.org (45.33.32.156)
Host is up (0.26s latency).
Other addresses for scanme.nmap.org (not scanned): 2600:3c01::f03c:91ff:fe18:bb2f
Not shown: 996 closed ports
PORT      STATE SERVICE
22/tcp    open  ssh
| ssh-hostkey:
|   1024 ac:00:a0:1a:82:ff:cc:55:99:dc:67:2b:34:97:6b:75 (DSA)
|   2048 20:3d:2d:44:62:2a:b0:5a:9d:b5:b3:05:14:c2:a6:b2 (RSA)
|   256 96:02:bb:5e:57:54:1c:4e:45:2f:56:4c:4a:24:b2:57 (ECDSA)
|_  256 33:fa:91:0f:e0:e1:7b:1f:6d:05:a2:b0:f1:54:41:56 (ED25519)
80/tcp    open  http
|_http-title: Go ahead and ScanMe!
9929/tcp  open  nping-echo
31337/tcp open  Elite

Nmap done: 1 IP address (1 host up) scanned in 11.64 seconds

 

Los scripts en NSE se dividen en las siguientes categorías:

  • auth: scripts relacionados con la autenticación de usuarios
  • broadcast: en esta categoría se engloban scripts que utilizan peticiones de transmisión para recopilar información de los host que no se listan por broadcasting
  • brute: esta categoría es para scripts que utilizan el sistema de fuerza bruta para averiguar las credenciales de usuario en un determinado servicio
  • default: estos son los scripts que se ejecutan cuando se ejecuta la opción -sC
  • discovery: scripts relacionados con el descubrimiento de servicios y hosts
  • dos: esta categoría es para scripts relacionados con ataques de denegación de servicio
  • exploit: esta categoría es para scripts que explotan vulnerabilidades de seguridad
  • external: esta categoría es para scripts que utilizan datos o servicios de terceros
  • fuzzer: esta categoría es para scripts NSE que se centran en fuzzing (envían campos inesperados o aleatorios en cada paquete)
  • intrusive: esta categoría es para scripts que pueden bloquear algo o generar mucho ruido en la red
  • malware: scripts relacionados con la detección de malware
  • safe: esta categoría es para scripts que se consideran seguros en todas las situaciones
  • version: esta categoría contiene scripts que extienden la funcionalidad de la detección de versiones
  • vuln: esta categoría es para scripts relacionados con vulnerabilidades de seguridad

Selección de scripts

Podemos seleccionar el script que queremos ejecutar directamente indicando el fichero o podemos seleccionar todos los de una categoría o categorías.

Seleccionar categorías

nmap -sV --script <categoria> <objetivo>

Por ejemplo:

❯ nmap -sV --script version scanme.nmap.org

Ejecutamos los script de la categoría version contra el objetivo scanme.nmap.org:

❯ nmap -sV --script="version,discovery" scanme.nmap.org

Además de los script de la categoría version también se usarán los de la categoría discovery.

❯ nmap -sV --script "not intrusive" scanme.nmap.org

En este caso se ejecutarían todos los script excepto los de la categoría intrusive.

❯ nmap -sV --script "(http-*) and not http-brute" scanme.nmap.org

En este caso se ejecutarían todos los script http excepto http-brute.

Selección de script específico

nmap --script <nombre de fichero> <objetivo>

Por ejemplo:

❯ nmap --script http-title scanme.nmap.org

Se ejecucuta el script http-title contra el objetivo scanme.nmap.org (es posible indicar varios scripts separandolos por comas).

❯ nmap --script /home/david/miscript.nse scanme.nmap.org

Le indicamos que ejecute un script que no se encuentra en los repositorios oficiales y que tenemos en /home/david/miscript.nse.

❯ nmap -p 25 --script smtp-enum-users --script-args smtp-enum-users.methods={RCPT, VRFY} 192.168.122.100

En este caso intentamos una enumeración de usuarios contra un servidor en 192.168.122.100 en el puerto SMTP y le indicamos como parámetros para el script que utilice los solo los métodos RCPT y VRFY.

Con --script-args le podemos indicar argumentos al script que estamos ejecutando.

❯ sudo nmap -sP -P0 -n --script shodan-api --script-args shodan-api.apikey=XXXXX scanme.nmap.org

Consultamos en base de datos de Shodan para obtener información. Shodan en un motor de búsqueda que nos ofrece la posibilidad de buscar servicios que están publicados en Internet, digamos que es una base de datos con los servicios e información del servicio que se recopila en los metadatos en forma de banners que envían los servicios durante el establecimiento de la sesión.

Este plugin nos permite usar los servicios de Shodan directamente en Nmap, de esta forma podemos consultar en la base de datos de Shodan que servicios tiene determinado dominio o ip, sin tener que mandar ningún paquete al objetivo.

Como vemos en el ejemplo, para usar la API de Shodan tenemos que darnos de alta en la web y obtendremos una API-key.

El resultado es que Shodan nos entrega la información del host de su base de datos sin tener que enviar ningún paquete al objetivo:

Starting Nmap 7.80 ( https://nmap.org ) at 2021-02-22 18:11 CET
Nmap scan report for scanme.nmap.org (45.33.32.156)
Host is up.
Other addresses for scanme.nmap.org (not scanned): 2600:3c01::f03c:91ff:fe18:bb2f

Host script results:
| shodan-api: Report for 45.33.32.156 (scanme.nmap.org)
| PORT  PROTO  PRODUCT       VERSION
| 123   udp                  
|_80    tcp    Apache httpd  2.4.7

Actualizar la base de datos de scripts

❯ sudo nmap --script-updatedb

Se actualizarán los script contra la base de datos de Nmap y los script nuevos se guardaran en la ruta por defecto de nuestra instalación.

Conclusión

Hemos arañado nada más la superficie de las capacidades de los scripts de Nmap. Con el NSE la herramienta de escaneo de puertos se transforma en una herramienta multifuncional de escaneo y explotación de vulnerabilidades capaz no solo de localizar servicios en los servidores, también ofrece la posibilidad de detectar vulnerabilidades, realizar ataques de fuerza bruta/diccionario contra diversos protocolos, rastrear servidores web para detectar vulnerabilidades o usar herramientas de terceros para ampliar las capacidades de la aplicación entre otras.... en fin una herramienta para tener siempre a mano en el arsenal del administrador o el auditor de seguridad. Espero que pueda resultar de utilidad.

Modificado por última vez enMartes, 23 Febrero 2021 09:46
(3 votos)
Etiquetado como :

Más en esta categoría:

« Cómo usar Nmap

Deja un comentario

Asegúrese de introducir toda la información requerida, indicada por un asterisco (*). No se permite código HTML.