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


escanee puertos abiertos y servicios que se ejecutan en esos hosts, y mucho más.

Una de las características interesantes de Nmap es Nmap Script Engine (NSE), que le brinda 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.

Hay cuatro tipos de scripts NSE, a saber:

  • Scripts de prerregulación: son scripts que se ejecutan antes de cualquiera de las operaciones de escaneo de Nmap, se ejecutan cuando Nmap aún no ha recopilado ninguna información sobre un objetivo.
  • Secuencias de comandos de host: son secuencias de comandos 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 SO contra un host de destino.
  • Scripts de servicio: son scripts que se ejecutan en servicios específicos que escuchan en un host de destino.
  • Scripts posteriores: 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 las de autenticación (auth), descubrimiento de hosts (transmisión), ataques de fuerza bruta para adivinar las credenciales de autenticación (bruta), descubrir más sobre una red (descubrimiento), causar una denegación de servicio (dos ), aprovechando alguna vulnerabilidad (exploit), etc. Varios scripts pertenecen a la categoría predeterminada.

Nota: Antes de continuar, debe tomar nota de estos puntos clave:

  • No ejecute scripts de terceros sin examinarlos críticamente o solo si confía en los autores. Esto se debe a que estos scripts no se ejecutan en una caja de arena y, por lo tanto, podrían dañar su sistema de manera inesperada o maliciosa o invadir su privacidad.
  • En segundo lugar, muchas de estas secuencias de comandos posiblemente se ejecuten como una secuencia de comandos previa o posterior a la regla. Teniendo esto en cuenta, se recomienda utilizar una regla previa para fines de coherencia.
  • Nmap utiliza la base de datos scripts/script.db para determinar las categorías y los scripts 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 de NSE se cargan usando el indicador --script , que también le permite ejecutar sus propios scripts al proporcionar 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 , el último se utiliza para proporcionar un nombre de archivo en lugar de un argumento de línea de comandos.

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

$ nmap -sC scanme.nmap.org
OR
$ nmap --script=default scanme.nmap.org
OR
$ nmap --script default scanme.nmap.org
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 que nada, puede obtener una breve descripción de lo que realmente hace, por ejemplo, encabezados http.

$ nmap --script-help http-headers scanme.nmap.org
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 de NSE para realizar análisis de Nmap

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

Una vez que sepa lo que hace un script, puede realizar un escaneo usándolo. Puede utilizar un script o ingresar una lista de nombres de script 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

También puede cargar scripts de una categoría o de una lista de categorías separadas por comas. En este ejemplo, estamos usando todos los scripts en 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

Esto es útil cuando desea seleccionar scripts 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

También puede seleccionar scripts usando expresiones booleanas que puede construir usando 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á los scripts de las categorías predeterminadas o de difusión.

$ nmap --script "default or broadcast" 192.168.56.10

Que es equivalente 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, dejando de lado 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

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, use 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 de la prueba comparativa CIS MySQL v1.0.2. También puede crear sus propios archivos de auditoría personalizados ú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

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

En este artículo, le presentamos el motor de secuencias de comandos de Nmap y vimos cómo encontrar y utilizar las distintas secuencias de comandos disponibles en diferentes categorías. Si tiene alguna pregunta, no dude en escribirnos a través del formulario de comentarios a continuación.