lunes, 28 de noviembre de 2011

Entendiendo el funcionamiento de un script de Nmap

En este post intentare ilustrar el funcionamiento de un script básico de Nmap, para ser específicos el http-enum, que es muy utilizado para enumerar directorios y/o aplicaciones populares que estén presentes en un servidor web.

Primero buscamos el script que debería de estar localizado en la carpeta de instalacion de Nmap dentro del directorio scripts.

Encontramos el script y lo abrimos con nuestro editor preferido (a los Winusers les recomiendo Notepad++):
En la primera linea de código nos encontramos con la descripción del código donde nos explica detalladamente lo que hace el script.

Datos generales

Un script de Nmap se compone en diferentes secciones y no todas son obligatorias o necesarias:


Cabecera.


  • id  : nombre del script que se muestra en la salida Nmap.
  • description : descripción del script, notas.
  • author : autor del script.
  • categories :  categoría del script
  • license : licencia
  • dependencies :  Estos son otros scripts que se requieren incluir para el funcionamiento.


Funciones.

portrule / hostrule Datos para decidir si se cumple y ejecuta el script. Los datos pueden ser host y/o port.
action (acción) este es digamos el cuerpo del script donde se encuentra las acciones que realizara el propio script.

Veamos el Codigo del script:

En las lineas 71 y 73 encontramos las extensiones de archivos que busca el script, y aqui es donde nosotros podemos agregar las extensiones que creamos necesarias a nuestro gusto.

En la linea 337 comienza el "action" del script y en las siguientes lineas lee los argumentos que nosotros enviamos cuando ejecutamos nmap y llamamos al script, si es que los enviamos, pero la linea que nos debe llamar la atención es la 343 donde encontramos esto:

local fingerprint_file = stdnse.get_script_args({'http-enum.fingerprintfile', 'fingerprints'}) or 'http-fingerprints.lua'

Se le asigna a la variable fingerprint_file el nombre del archivo http-fingerprints.lua el cual se encuentra en la carpeta nselib/data/ en la instalacion del Nmap.

La linea 349:
local status, fingerprints = get_fingerprints(fingerprint_file, category)

Llama a la funcion get_fingerprints y le envía como parametro el nombre del archivo y la categoria.
El codigo de esta funcion esta en la linea 157 y es donde encontramos el funcionamiento de la misma, que lee las url que estan en el archivo http-fingerprints.lua de acuerdo a la categoría que ingresamos como parámetro.

Y una vez el script cuenta con esta información procede a probar con las url's obtenidas del http-fingerprints.lua y obtener los codigos 404 o 200 o 403 respectivamente si encuentra o no las rutas y/o archivos.

Es por eso que podemos llamar al script http-enum de la siguiente manera:

nmap -p 80,443 -A -v --script http-enums --script-args http-enum.category=management IPdelAMIGO

Si se fijan en el archivo http-fingerprints.lua en la linea 712 en la función table.insert lleva como parametro category=management y de esta manera pueden ver las demás categorias que incluye el script y agregar nuevas rutas que tengamos en nuestros diccionarios.

Hasta la PROXYma.




1 comentarios :

Sully dijo...

Buena entrada! ;)

Publicar un comentario

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Best Web Host