Búsqueda de sitios web

Cómo utilizar los scripts de Nmap Script Engine (NSE) en Linux


Nmap es una herramienta de exploración y escáner de seguridad de red de línea de comandos popular, potente y multiplataforma. También puede ayudarle a obtener una descripción general de los sistemas que conectaron su red; puede usarlo para averiguar todas las direcciones IP de hosts activos, escanear puertos abiertos y servicios que se ejecutan en esos hosts, y mucho más.

Una de las características interesantes de Nmap es el Nmap Script Engine (NSE), que le aporta aún más flexibilidad y eficiencia. Le permite escribir sus propios scripts en el lenguaje de programación Lua y posiblemente compartir estos scripts con otros usuarios de Nmap.

Lea también: 29 ejemplos prácticos de comandos de Nmap para Linux

Hay cuatro tipos de scripts NSE, a saber:

  • Scripts previos a la regla: son scripts que se ejecutan antes de cualquiera de las operaciones de escaneo de Nmap y se ejecutan cuando Nmap aún no ha recopilado ninguna información sobre un objetivo.
  • Scripts de host: son scripts que se ejecutan después de que Nmap haya realizado operaciones normales, como descubrimiento de host, escaneo de puertos, detección de versiones y detección de sistema operativo en un host de destino.
  • Scripts de servicio: son scripts que se ejecutan en servicios específicos que escuchan en un host de destino.
  • Scripts Postrule: son scripts que se ejecutan después de que Nmap haya escaneado todos sus hosts de destino.

Luego, estos scripts se agrupan en varias categorías, incluidas aquellas para autenticación (auth), descubrimiento de hosts (broadcast), ataques de fuerza bruta para adivinar las credenciales de autenticación (brute<), descubrir más sobre una red (descubrimiento), provocar una denegación de servicio (dos), explotar alguna vulnerabilidad (exploit) , etc. Varios scripts pertenecen a la categoría predeterminada.

Nota: antes de continuar, debes tomar nota de estos puntos clave:

  • No ejecute scripts de terceros sin revisarlos críticamente o solo si confía en los autores. Esto se debe a que estos scripts no se ejecutan en un entorno limitado y, por lo tanto, podrían dañar su sistema de forma inesperada o maliciosa o invadir su privacidad.
  • En segundo lugar, es posible que muchos de estos scripts se ejecuten como script prerule o postrule. Teniendo esto en cuenta, se recomienda utilizar una prerregla por motivos de coherencia.
  • Nmap utiliza la base de datos scripts/script.db para determinar los scripts y categorías predeterminados disponibles.

Para ver la ubicación de todos los scripts NSE disponibles, ejecute la utilidad de localización en el terminal, así:

locate *.nse

/usr/share/nmap/scripts/acarsd-info.nse
/usr/share/nmap/scripts/address-info.nse
/usr/share/nmap/scripts/afp-brute.nse
/usr/share/nmap/scripts/afp-ls.nse
/usr/share/nmap/scripts/afp-path-vuln.nse
/usr/share/nmap/scripts/afp-serverinfo.nse
/usr/share/nmap/scripts/afp-showmount.nse
/usr/share/nmap/scripts/ajp-auth.nse
/usr/share/nmap/scripts/ajp-brute.nse
/usr/share/nmap/scripts/ajp-headers.nse
/usr/share/nmap/scripts/ajp-methods.nse
/usr/share/nmap/scripts/ajp-request.nse
/usr/share/nmap/scripts/allseeingeye-info.nse
/usr/share/nmap/scripts/amqp-info.nse
/usr/share/nmap/scripts/asn-query.nse
...

Los scripts NSE se cargan usando el indicador --script, que también le permite ejecutar sus propios scripts proporcionando categorías, nombres de archivos de script o el nombre de los directorios donde se encuentran sus scripts.

La sintaxis para habilitar scripts es la siguiente:

nmap -sC target     #load default scripts
OR
nmap --script filename|category|directory|expression,...   target    

Puede ver una descripción de un script con la opción --script-help. Además, puede pasar argumentos a algunos scripts a través de las opciones --script-args y --script-args-file; este último se utiliza para proporcionar un nombre de archivo en lugar de un argumento de línea de comando.

Para realizar un escaneo con la mayoría de los scripts predeterminados, use el indicador -sC o, alternativamente, use --script=default como se muestra.

nmap -sC scanme.nmap.org
OR
nmap --script=default scanme.nmap.org
OR
nmap --script default scanme.nmap.org
Salida de muestra
Starting Nmap 7.01 ( https://nmap.org ) at 2017-11-15 10:36 IST
Nmap scan report for scanme.nmap.org (45.33.32.156)
Host is up (0.0027s latency).
Not shown: 999 filtered ports
PORT   STATE SERVICE
80/tcp open  http
|_http-title: Go ahead and ScanMe!

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

Para utilizar un script para el propósito apropiado, primero puede obtener una breve descripción de lo que realmente hace, por ejemplo, http-headers.

nmap --script-help http-headers scanme.nmap.org
Salida de muestra
Starting Nmap 7.01 ( https://nmap.org ) at 2017-11-15 10:37 IST

http-headers
Categories: discovery safe
https://nmap.org/nsedoc/scripts/http-headers.html
  Performs a HEAD request for the root folder ("/") of a web server and displays the HTTP headers returned.

Carga de scripts NSE para realizar escaneos de Nmap

Puede seleccionar o cargar scripts para realizar un escaneo con los diferentes métodos que se explican a continuación.

Usando el nombre del script

Una vez que sepa qué hace un script, puede realizar un escaneo usándolo. Puede utilizar un script o ingresar una lista de nombres de scripts separados por comas. El siguiente comando le permitirá ver los encabezados HTTP configurados en el servidor web en el host de destino.

nmap --script http-headers scanme.nmap.org
Starting Nmap 7.01 ( https://nmap.org ) at 2017-11-15 10:39 IST
Nmap scan report for scanme.nmap.org (45.33.32.156)
Host is up (0.27s latency).
Not shown: 996 closed ports
PORT      STATE    SERVICE
22/tcp    open     ssh
80/tcp    open     http
| http-headers: 
|   Date: Wed, 15 Nov 2017 05:10:04 GMT
|   Server: Apache/2.4.7 (Ubuntu)
|   Accept-Ranges: bytes
|   Vary: Accept-Encoding
|   Connection: close
|   Content-Type: text/html
|   
|_  (Request type: HEAD)
179/tcp   filtered bgp
31337/tcp open     Elite

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

Usando categorías

También puede cargar scripts de una categoría o de una lista de categorías separadas por comas. En este ejemplo, utilizamos todos los scripts de la categoría predeterminada y de transmisión para realizar un escaneo en el host 192.168.56.1.

nmap --script default,broadcast 192.168.56.1

Usando * comodín

Esto es útil cuando desea seleccionar secuencias de comandos con un patrón de nombre determinado. Por ejemplo, para cargar todos los scripts con nombres que comiencen con ssh, ejecute el siguiente comando en la terminal:

nmap --script "ssh-*" 192.168.56.1

Usar expresiones booleanas

También puede seleccionar secuencias de comandos que utilizan expresiones booleanas que puede crear utilizando los operadores y, o y no. Y los nombres en una expresión booleana pueden ser una categoría, un nombre de archivo de script.db o todos.

El siguiente comando cargará scripts de las categorías predeterminadas o de transmisión.

nmap --script "default or broadcast" 192.168.56.10

Lo que equivale a:

nmap --script default,broadcast 192.168.56.10

Para cargar todos los scripts omitiendo los de la categoría vuln, ejecute este comando en la terminal.

nmap --script "not vuln" 192.168.56.10

El siguiente comando parece un poco complicado pero es fácil de entender, selecciona scripts en las categorías predeterminadas o de transmisión, omitiendo aquellos con nombres que comienzan con ssh-:

nmap --script "(default or broadcast) and not ssh-*" 192.168.56.10

Es importante destacar que es posible combinar categorías, nombres de secuencias de comandos, un directorio que contenga sus secuencias de comandos personalizadas o una expresión booleana para cargar secuencias de comandos, como esta:

nmap --script broadcast,vuln,ssh-auth-methods,/path/to/custom/scripts 192.168.56.10

Pasar argumentos a scripts NSE

A continuación se muestra un ejemplo que muestra cómo pasar argumentos a scripts con la opción –script-args:

nmap --script mysql-audit --script-args "mysql-audit.username='root', \
mysql-audit.password='password_here', mysql-audit.filename='nselib/data/mysql-cis.audit'"

Para pasar un número de puerto, utilice la opción -p nmap:

nmap -p 3306 --script mysql-audit --script-args "mysql-audit.username='root', \ 
mysql-audit.password='password_here' , mysql-audit.filename='nselib/data/mysql-cis.audit'"

El comando anterior ejecuta una auditoría de la configuración de seguridad del servidor de la base de datos MySQL contra partes del benchmark CIS MySQL v1.0.2. También puede crear sus propios archivos de auditoría personalizados y útiles para otras auditorías de MySQL.

Eso es todo por ahora. Puede encontrar más información en la página de manual de Nmap o consultar Uso de NSE.

Para comenzar a escribir sus propios scripts NSE, consulte esta guía: https://nmap.org/book/nse-tutorial.html

Conclusión

Nmap es una herramienta realmente poderosa y útil que todo administrador de sistemas o redes necesita en su arsenal de seguridad; NSE simplemente le agrega más eficiencia.

En este artículo, le presentamos el Nmap Script Engine y analizamos cómo encontrar y utilizar los distintos scripts disponibles en diferentes categorías. Si tiene alguna pregunta, no dude en escribirnos a través del formulario de comentarios a continuación.