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 con –script-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:
Espero que os resulte de interés.
Happy h@cking.
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:
Espero que os resulte de interés.
Happy h@cking.
No hay comentarios:
Publicar un comentario