jueves, 13 de octubre de 2016

NMAP SCRIPTING ENGINE




Autor : @txambe

En el articulo de hoy vamos a ver una forma distinta de utilizar esta herramienta tan potente como es nmap normalmente utilizada como escaneador de puertos, en esta ocasión la utilizaremos como escaner de vulnerabilidades , no llega a la potencia de Nessus , Openvas , pero en determinados escenarios que no podamos utilizar dichos programas, nmap es un gran aliado a tener en cuenta.

Nmap Scripting Engine ( NSE ) es una de las opciones mas potentes que tiene nmap a parte de su función como escaner de red. Permite escribir scripts para automatizar tareas de red. Esos scripts pueden ser ejecutados en paralelo para así aprovecharse de de la velocidad y eficiencia de nmap.

Con NSE podemos acabar distintas tareas.

·         Auth: Verifica procesos de autenticación.
·         brute: Obtención de información por medio de fuerza bruta.
·         discovery: Recuperación de información de equipos.
·         dos: Relacionados con ataques del tipo DoS.
·         external: Script que utilizan servicios de terceras partes.
·         intrusive: Utiliza scripts que son considerados intrusivos para la víctima o target.
·         safe: ejecuta scripts “seguros” en cuanto a la intrusión de sistemas.
·         vuln: Verifica la existencia de las vulnerabilidades más conocidas.

Para mantener actualizados los scripts debemos ejecutar el comando nmap conscript-updatedb como parámetro.

En /usr/share/nmap/scripts/ (dependiendo el SO que corremos), se encuentran todos los scripts disponibles.

Comentar que los script de nmap están realizados en lenguaje LUA.

Para activar NSE deberemos escribir en la linea de comandos la opción -sC o --script si se quiere indicar un conjunto de scripts. Nmap soporte dos tipos de scripts de tipo servicio y de host..

Los  de tipo servicio relacionan  puertos abiertos ( servicio asociado )  en el objetivo.



Usando NSE

Para iniciar el motor de scripts:

 $nmap -sC 

Para seleccionar un script:

 $nmap –script

Pasar argumentos a los scripts:

   --script-args “http.useragent=0, hhtp.pipeline=15”
   --script-args  http.useragent=CUM,pipeline=10
   --script-args  whois={whodb=”no follow”}


Para realizar una selección  avanzada de scripts:

 nmap -p80 –script “http-*and(not(httpd-brute or http-slowloris))” < objetivo>


Recomendaciones de uso

No usar los dns de tu ISP , mejor usar los de google , por ejemplo:

nmap –dns-servers 8.8.8.8,8.8.4.4


Variar la configuración de tiempo:

nmap T5
Usar el filtro -p si solo interesa el resultado de cierto servicio:

$nmap -p80 –script http-trace 

Si trabajamos con scripts de tipo HTTP , mi recomendación es cambiar el user-agent:

$nmap -p80 –script http-enum 

Debido a la cantidad de argumentos que tiene , es recomendable tener otra consola abierta , en la carpeta donde están los scripts y usar:

c a t < script > | grep @args

O también entrar dentro de la carpeta de los scripts y desde ahí lanzar los scripts.


También una buena fuente de información sobre scripts no aceptados al repositorio oficial:


Enlaces interesantes a scripts no oficiales:

·         vulscan
·         http-google-email
·         http-screenshot

En este punto quería hablaros de una herramienta interesante , NSEarch no es mas que un buscador de scripts la podéis descargar de https://github.com/JKO/nsearch


Una vez descargada la herramienta , solo hay que descomprimir y lanzar su instalador. Cuando ya se encuentra instalada se puede ejecutar con el siguiente comando:

python nsearch.py



En el siguiente enlace podéis encontrar mas información:


Para distinguir entre versiones:

            Para la versión 5:  local http = require “http”

            Para la versión 6:  require “http”


Reglas de ejecución

Todos los scripts tendrán por lo menos una  de las siguientes funciones:

·         prerule()
·         hostrule(host)
·         postrule(host,port)
·         postrule()

Ejemplos de reglas de ejecución

Hay aliases como shortport.http

http = shortport_or_service ({80, 443 , 631 , 7080 , 8080 , 8088 , 5800 , 3872 , 8180 , 8000 }, {“http”,”https”,”ipp”,”http-alt”,”vnc-http”,”oem-agent”})

Una regla para servidores:

posrtrule = shortport.http


Formatos de salida

Nmap soporta distintos formatos de salida de datos XML, greppable ( aunque esta ya en desuso todavia nos puede ser útil en ciertas situaciones )  y normal. Pero solo se guardarán los datos si seleccionamos los formatos XML o normal.

Formato XML

Nmap genera elementos para el escaneo de puertos, detección de servicios y NSE. Anteriormente se guardaba en un elemento llamado ·         EXPOITABLE
·         VULNERABLE
·         NOT_VULN
 
Es muy recomendable asignarlo durante la ejecución:
 
vuln.state = vulns.STAT.VULN
 
Para generar el reporte se utiliza la función vulns.Report.make_output():
 
local report = vulns.Report:new(SCRIPT_NAME,host,port) return report:make_output(vuln_table)
 
 
Referencias:
 
·         https://nmap.org/book/nse.html
·         https://nmap.org/nsedoc/
 
 
Espero que os resulte de interés.
 
 
Happy h@cking.
 

 


-->< script > dentro del atributo ouput.

Al usar la función stdnse.output_table para guardar nuestros datos de salida se auto genera todo el árbol XML.

            Nse:

            local ouput_tab = stdnse.ouput_table()
            ouput_tab.ip = host.ip
            output_tab.hosts = domains

            return output_tab

Reporte de vulnerabilidades

Para realizar un reporte de vulnerabilidades, utilizaremos la librería vulns. La librería tiene una variable que lleva el registro del estado de la vulnerabilidad encontrada:

·         EXPOITABLE
·         VULNERABLE
·         NOT_VULN

Es muy recomendable asignarlo durante la ejecución:

vuln.state = vulns.STAT.VULN

Para generar el reporte se utiliza la función vulns.Report.make_output():

local report = vulns.Report:new(SCRIPT_NAME,host,port) return report:make_output(vuln_table)


Referencias:

·         https://nmap.org/book/nse.html
·         https://nmap.org/nsedoc/


Espero que os resulte de interés.


Happy h@cking.


No hay comentarios:

Publicar un comentario