19 ene 2012

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 generalesUn script de Nmap se compone en diferentes secciones y no todas son obligatorias o necesarias:Cabeceraid : nombre del script que se muestra en la salida Nmap.description : descripción del script, notas.author : autor del script.categories : categoría del scriptlicense : licenciadependencies : 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=managementIPdelAMIGOSi 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 comentario:

  1. Muy interesante el artículo! Nos recomiendas algún script para Nmap que consideres útil e imprescindible para las auditorías de seguridad?Gracias, saludos!

    ResponderEliminar