Utilizar Nmap Scripting Engine

NmapNmapBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderá a utilizar el Motor de Scripting de Nmap. El laboratorio aborda la ejecución de scripts predeterminados, el uso de scripts específicos, la adición de argumentos a los scripts, la actualización de scripts, la prueba de múltiples scripts y la visualización de la salida del script en la terminal Xfce. Ejecutará comandos como nmap -sC, nmap --script y nmap --script-updatedb contra direcciones IP objetivo para realizar varios escaneos y recopilar información.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) nmap/NmapGroup -.-> nmap/output_formats("Output Formats") nmap/NmapGroup -.-> nmap/port_scanning("Port Scanning Methods") nmap/NmapGroup -.-> nmap/service_detection("Service Detection") nmap/NmapGroup -.-> nmap/scripting_basics("Scripting Engine Basics") nmap/NmapGroup -.-> nmap/script_management("Script Categories and Updating") subgraph Lab Skills nmap/output_formats -.-> lab-530187{{"Utilizar Nmap Scripting Engine"}} nmap/port_scanning -.-> lab-530187{{"Utilizar Nmap Scripting Engine"}} nmap/service_detection -.-> lab-530187{{"Utilizar Nmap Scripting Engine"}} nmap/scripting_basics -.-> lab-530187{{"Utilizar Nmap Scripting Engine"}} nmap/script_management -.-> lab-530187{{"Utilizar Nmap Scripting Engine"}} end

Ejecutar scripts predeterminados con nmap -sC 192.168.1.1

En este paso, exploraremos cómo usar Nmap para ejecutar su conjunto predeterminado de scripts en un objetivo. Los scripts de Nmap son herramientas poderosas que pueden automatizar una amplia variedad de tareas, desde la identificación de vulnerabilidades hasta la recopilación de información sobre un sistema objetivo. La opción -sC le indica a Nmap que use la categoría de scripts "predeterminados". Esta categoría incluye scripts que se consideran seguros y útiles para escanos de uso general.

Antes de comenzar, asegúrate de estar en el directorio correcto.

cd ~/project

Ahora, ejecutemos Nmap con la opción -sC en la dirección IP objetivo 192.168.1.1. Esta dirección IP es un marcador de posición. En un escenario real, la reemplazarías con la dirección IP real del objetivo que desees escanear. Para este entorno de laboratorio, asumiremos que 192.168.1.1 es un objetivo válido.

sudo nmap -sC 192.168.1.1

Este comando realizará un escaneo estándar de Nmap, incluyendo un escaneo de puertos y detección de servicios, y luego ejecutará los scripts predeterminados en cualquier puerto abierto. La salida mostrará los resultados del escaneo de puertos, detección de servicios y cualquier información recopilada por los scripts.

La salida se verá más o menos así (la salida exacta variará según el sistema objetivo):

Starting Nmap 7.80 ( https://nmap.org ) at ...
Nmap scan report for 192.168.1.1
Host is up (0.00028s latency).
Not shown: 999 filtered ports
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu)
| ssh-hostkey:
|   2048 ... (RSA)
| ssh-rsa ...
|_ssh-algorithm: ...
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Host script results:
|_clock-skew: mean: -1s, deviation: 0s, median: -1s
|_nbstat: NetBIOS name: ..., NetBIOS user: ..., NetBIOS MAC: ... (unknown)
| smb-os-discovery:
|   OS: Unix
|   ...
|_  System time: ...

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

En este ejemplo, la salida muestra que el puerto 22 está abierto y ejecutando SSH. El script ssh-hostkey ha identificado la clave del host SSH, y el script ssh-algorithm ha identificado los algoritmos admitidos. El script clock-skew ha detectado una ligera desviación de reloj en el sistema objetivo. Los scripts nbstat y smb-os-discovery han recopilado información sobre los servicios NetBIOS y SMB, respectivamente.

En este paso, aprenderemos a usar un script específico de Nmap. Nmap tiene una gran biblioteca de scripts que se pueden utilizar para realizar diversas tareas. Usaremos el script banner, que intenta recuperar el banner de un servicio que se ejecuta en un host objetivo. Los banners a menudo contienen información sobre la versión del software y otros detalles que pueden ser útiles para la reconocimiento.

Primero, asegúrate de estar en el directorio ~/project:

cd ~/project

Ahora, usemos el comando nmap con la opción --script para especificar el script banner y apuntar a la dirección IP del localhost, 127.0.0.1.

sudo nmap --script banner 127.0.0.1

Este comando le indica a Nmap que ejecute el script banner en todos los puertos abiertos en 127.0.0.1. La salida mostrará los resultados del script, incluyendo cualquier banner que se haya recuperado.

La salida puede ser similar a esta (la salida exacta dependerá de los servicios que se ejecuten en su localhost):

Starting Nmap 7.80 ( https://nmap.org ) at ...
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000028s latency).
Other addresses for localhost (not scanned): ::1

PORT     STATE SERVICE
22/tcp   open  ssh
111/tcp  open  rpcbind
631/tcp  open  ipp
5900/tcp open  vnc
8000/tcp open  http
8080/tcp open  http

Host script results:
|_banner: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.5
|_banner: 111/tcp:  rpcbind version 2-4
|_banner: 631/tcp: CUPS v2.4.1
|_banner: 5900/tcp: RFB 003.008
|_banner: 8000/tcp: Werkzeug/2.0.1 Python/3.9.7
|_banner: 8080/tcp: Jetty(9.4.44.v20210927)

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

En este ejemplo, el script banner recuperó con éxito banners de varios servicios que se ejecutan en 127.0.0.1, incluyendo servidores SSH, rpcbind, CUPS, VNC y HTTP. Los banners proporcionan información sobre las versiones del software que se están utilizando.

Agregar argumentos con nmap --script http-title --script-args http.useragent=Test 192.168.1.1

En este paso, aprenderemos cómo pasar argumentos a los scripts de Nmap. Algunos scripts requieren o permiten que se personalicen los argumentos. Usaremos el script http-title y modificaremos su argumento http.useragent. El script http-title recupera el título de un servidor HTTP. El argumento http.useragent especifica la cadena User-Agent que el script usará al realizar solicitudes HTTP.

Primero, navegemos a nuestro directorio de trabajo:

cd ~/project

Ahora, ejecutemos Nmap con la opción --script para especificar el script http-title y la opción --script-args para establecer el argumento http.useragent en Test. Usaremos la dirección IP objetivo 192.168.1.1. Recuerda que en un escenario real, reemplazarías esto con la dirección IP real de un objetivo que ejecuta un servidor HTTP.

sudo nmap --script http-title --script-args http.useragent=Test 192.168.1.1

Este comando le indica a Nmap que ejecute el script http-title en cualquier puerto HTTP abierto en 192.168.1.1, usando "Test" como la cadena User-Agent.

La salida puede ser similar a esta (la salida exacta dependerá del sistema objetivo y su configuración de servidor HTTP):

Starting Nmap 7.80 ( https://nmap.org ) at ...
Nmap scan report for 192.168.1.1
Host is up (0.00028s latency).
Not shown: 999 filtered ports
PORT   STATE SERVICE VERSION
80/tcp open  http    nginx 1.18.0
|_http-title: Test

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

En este ejemplo, el script http-title recuperó con éxito el título del servidor HTTP que se ejecuta en el puerto 80 de 192.168.1.1. El argumento http.useragent se usó para establecer la cadena User-Agent en "Test" en la solicitud HTTP. El servidor puede registrar esta cadena User-Agent, lo que puede ser útil para identificar los escaneos. Si el objetivo no tiene el puerto 80 abierto, verás una salida diferente.

Actualizar scripts con nmap --script-updatedb

En este paso, actualizaremos la base de datos de scripts de Nmap. El Motor de Scripting de Nmap (NSE) depende de una base de datos de scripts. Con el tiempo, se agregan nuevos scripts y se actualizan los existentes. Para asegurarse de tener los últimos scripts, debe actualizar periódicamente la base de datos de scripts.

Primero, asegúrese de estar en el directorio ~/project:

cd ~/project

Ahora, usemos el comando nmap con la opción --script-updatedb para actualizar la base de datos de scripts.

sudo nmap --script-updatedb

Este comando descargará la información más reciente de los scripts y actualizará la base de datos. La salida mostrará el progreso de la actualización.

La salida puede ser similar a esta:

Starting Nmap 7.80 ( https://nmap.org ) at ...
NSE: Updating rule database.
NSE: Using nmap.org/svn/nse_svn to download the latest scripts.
Downloaded nmap-mac-prefixes.lua
Downloaded nselib/data/nmap-services.
Downloaded nselib/data/service-ports.
Downloaded scripts/script.db
NSE: Script database updated.
Nmap done: 0 IP addresses (0 hosts up) scanned in ... seconds

Esta salida indica que la base de datos de scripts se ha actualizado con éxito. Ahora tiene los últimos scripts de Nmap disponibles para su uso.

Probar múltiples scripts con nmap --script banner,http-title 127.0.0.1

En este paso, ejecutaremos múltiples scripts de Nmap simultáneamente. Esto te permite recopilar más información sobre un objetivo en un solo escaneo. Usaremos los scripts banner y http-title contra el objetivo 127.0.0.1.

Primero, navegemos a nuestro directorio de trabajo:

cd ~/project

Ahora, ejecutemos Nmap con la opción --script, especificando tanto los scripts banner y http-title, separados por una coma. Usaremos la dirección IP objetivo 127.0.0.1, que se refiere a la máquina local.

sudo nmap --script banner,http-title 127.0.0.1

Este comando le indica a Nmap que ejecute tanto los scripts banner y http-title en cualquier puerto abierto en 127.0.0.1. El script banner intenta recuperar las banderas de servicio, mientras que el script http-title recupera el título de cualquier servidor HTTP.

La salida puede ser similar a esta (la salida exacta dependerá de los servicios que se ejecuten en 127.0.0.1):

Starting Nmap 7.80 ( https://nmap.org ) at ...
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000018s latency).
Loopback interface ignored
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.1 (Ubuntu)
| banner: SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.1
|_ssh-hostkey:
80/tcp open  http    nginx 1.18.0
|_http-title: Welcome to nginx!

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

En este ejemplo, el script banner recuperó la bandera SSH del puerto 22, y el script http-title recuperó el título del servidor HTTP que se ejecuta en el puerto 80. Si el objetivo no tiene estos puertos abiertos, verás una salida diferente.

Ver la salida de los scripts en la terminal Xfce

En este paso, nos centraremos en ver la salida de los scripts de Nmap dentro de la terminal Xfce. La terminal Xfce es el emulador de terminal predeterminado en el entorno de la máquina virtual LabEx. Ya la has estado utilizando en los pasos anteriores. Este paso se trata más de entender cómo interpretar la salida y menos de ejecutar un nuevo comando.

La salida de los scripts de Nmap se muestra directamente en la terminal una vez que finaliza el escaneo. El formato de la salida depende del propio script. Algunos scripts proporcionan una salida de texto simple, mientras que otros pueden proporcionar datos más estructurados.

Volvamos al comando del paso anterior:

sudo nmap --script banner,http-title 127.0.0.1

Cuando ejecutas este comando, la salida se imprime directamente en la terminal Xfce. Puedes desplazarte por la salida de la terminal para revisar los resultados de los scripts banner y http-title.

Por ejemplo, la salida puede incluir:

  • Información de la bandera: El script banner intenta recuperar las banderas de servicio de los puertos abiertos. Esto puede revelar la versión del software que se ejecuta en un puerto determinado.
  • Título HTTP: El script http-title recupera el título de la página web servida por un servidor HTTP.

Lo importante es examinar detenidamente la salida en busca de cualquier información útil. La terminal Xfce proporciona una forma simple y directa de ver esta información. También puedes usar herramientas estándar de Linux como grep para filtrar la salida si es necesario. Por ejemplo, para encontrar solo las líneas que contengan "http-title", podrías redirigir la salida del comando nmap a grep:

sudo nmap --script banner,http-title 127.0.0.1 | grep "http-title"

Este comando ejecutará el mismo escaneo de Nmap que antes, pero solo mostrará las líneas de la salida que contengan la cadena "http-title". Esto puede ser útil para centrarse en partes específicas de la salida.

Este paso se trata principalmente de observación y comprensión. No hay un solo comando para ejecutar, sino más bien un enfoque en cómo interpretar los resultados que ya has generado en los pasos anteriores en el entorno de la terminal Xfce.

Resumen

En este laboratorio, los participantes aprendieron a utilizar el Motor de Scripting de Nmap a través de varios comandos. Comenzaron ejecutando scripts predeterminados con nmap -sC contra una dirección IP objetivo, lo que incluye scripts seguros y útiles para escanear generalmente. También aprendieron a usar un script específico con nmap --script, agregar argumentos a los scripts con --script-args, actualizar los scripts con --script-updatedb y probar múltiples scripts a la vez. Finalmente, vieron la salida de los scripts en la terminal Xfce.