Con el uso de NSE podemos llevar las capacidades de Nmap al límite ya que podemos realizar en teoría lo que queramos con la información recolectada en el escaneo de puertos, mediante la utilizacioń de LUA como lenguaje de programación, se nos permite escribir scripts para automatizar y completar tareas más avanzadas como lo pueden llegar a ser: Detección de vulneravilidades, Detección de malware, entre otras.

La excelente comunidad de Nmap ha compartido una variedad de scripts (437 hoy en día) distribuidos en diferentes categorías. El objetivo de este post es dar una breve introducción al uso de los scripts incluidos en la instalación de Nmap.

Uso (–script)

Como caso de estudio vamos a usar el script llamado http-title, el cual tiene una sencilla función y es mostrarnos el título de una página web en caso de encontrar un servidor web en el escaneo, para hacer uso de NSE indicamos la opción –script precedida del nombre del script:

# nmap -p T:80 --script http-title scanme.nmap.org

Starting Nmap 6.26SVN ( http://nmap.org ) ...
Nmap scan report for scanme.nmap.org (74.207.244.221)
Host is up (0.16s latency).
PORT   STATE SERVICE
80/tcp open  http
|_http-title: Go ahead and ScanMe!
 
Nmap done: 1 IP address (1 host up) scanned in 1.17 seconds

Se puede observar que debajo del reporte del puerto 80 se indica el resultado del script, en este caso el título de la página web: “Go ahead and ScanMe!”. Se pueden indicar más scripts separados por coma en caso de ser necesario.

Parámetros (–script-args)

Cada uno de los scripts pueden recibir parámetros para ser procesados en su ejecución, para tal fin usamos la opción –script-args para después indicar el parámetro y su valor. En este ejemplo vamos a cambiar el User agent ya que en las peticiónes HTTP que se realizan desde Nmap se usa el siguiente por defecto:

User-Agent: Mozilla/5.0 (compatible; Nmap Scripting Engine; http://nmap.org...)

Aunque en la documentación de http-title no se indica ningún parámetro para el script, lo que sí observamos es que depende de la librería http, si miramos la documentación de ésta se observan diferentes parámetros y entre ellos http.useragent, con el que podemos indicar el User-agent deseado de la siguiente manera:

# nmap -p T:80 --script http-title --script-args http.useragent="Spoof UA" scanme.nmap.org

Se hace necesario entonces explorar la documentación de los scripts así como de las dependencias que usen para sacarles el mejor provecho. Se pueden indicar más parámetros separados por una coma.

Scripts útiles

A continuación enumero una serie de scripts que pueden llegar a ser útiles (mucho más que el anterior script usado como ejemplo) al momento de interactuar con servidores web, todos ellos aportados por la comunidad de Nmap:

  • http-enum: Enumera directorios usados por aplicaciones web conocidas.
  • http-headers: Realiza una petición HTTP usando el método HEAD e imprime las cabeceras enviadas por el servidor.
  • http-joomla-brute: Realiza ataques de fuerza bruta a usuarios y contraseñas de instalaciones de Joomla!.
  • http-options: Indica los métodos HTTP habilitados en el servidor web, mediante una petición HTTP usando el método OPTIONS.
  • http-sitemap-generator: Intenta crear un mapa con la estructura de directorios y archivos del sitio web.
  • http-email-harvest: Examina un sitio web en busca de direcciones de correo electrónico.

Los que he listado a excepción de http-joomla-brute son scripts que pueden servir en la etapa de “Information Gathering” en un test de penetración. Totalmente recomendable revisar la larga lista de scripts para tener una idea de qué nos puede llegar a servir.