Desarrollando para Nmap Scripting Engine (NSE) [GuadalajaraCON 2013]

6,111 views
6,080 views

Published on

http://www.guadalajaracon.org/talleres/desarrollando-para-nmap-scripting-engine-nse/

Hace 5 años Nmap dió luz a su propio motor de scripts que facilita a administradores de sistema y pentesters ha realizar una variedad impresionante de tareas como recolección de información, detección de servicios y hasta explotación de vulnerabilidades.

Su flexibilidad y poder lo han convertido en una herramienta indispensable, no solo para escaneo de puertos, sino durante todas las etapas de una prueba de penetración.

En este taller los asistentes se familiarizarán con el motor de scripts de Nmap, aprenderán casos de uso avanzado y crearán sus propios scripts. Los participantes desarrollarán módulos para diversos fines incluyendo escaneo, análisis de tráfico y explotación web y de otros dispositivos.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
6,111
On SlideShare
0
From Embeds
0
Number of Embeds
27
Actions
Shares
0
Downloads
127
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Desarrollando para Nmap Scripting Engine (NSE) [GuadalajaraCON 2013]

  1. 1. Desarrollo NSE (Nmap Scripting Engine)Paulino CalderonTwitter: @calderpwnEmail: calderon@websec.mxWWW: http://calderonpale.comGuadalajaraCON 2013http://guadalajaracon.orghttp://guadalajaracon.orgGuadalajaraCONDesarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mx
  2. 2. ¿Quién soy?Repositorio personalhttps://github.com/cldrn/nmap-nse-scripts/Google Summer of Code 2011https://code.google.com/p/google-summer-of-code-2011-nmap/Nmap 6: Network Exploration and Security Auditing Cookbookhttp://nmap-cookbook.comhttp://guadalajaracon.orgGuadalajaraCONDesarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mx
  3. 3. Desarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mx■ Introducción■ Uso avanzado■ Fundamentos de programación en LUA○ Controles de flujo○ Tipos de datos○ Cadenas de texto○ Patrones y capturas■ Desarrollo de scripts○ Detección de vulnerabilidades○ Uso de librerías NSE○ Manejo de sockets○ Paralelismo○ Estándar de desarrollohttp://guadalajaracon.orgGuadalajaraCONTemario
  4. 4. Desarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mx● Motor de scripts que ha expandido la funcionalidad deNmap en todos los aspectos.● Actualmente existen más de 400 scripts (435 el día queescribí esto) en el repositorio oficial.http://guadalajaracon.orgGuadalajaraCONNSE == "Nmap Scripting Engine"
  5. 5. LUA● Basado en el lenguaje de scripting LUA:● Implementación pequeña pero muy poderosa.● Usado en proyectos como:● Wireshark● Snort● VIM● World of WarcraftEntre otros...Desarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  6. 6. Categorías NSEAUTH - Autenticación de usuariosBROADCAST - Descubrimiento de hosts a través de peticiones "broadcast"DEFAULT - Estos scripts son ejecutados cuando usamos -sCDISCOVERY - Descubrimiento de hosts y serviciosDOS - Denegación de ServicioEXPLOIT - Explotación de vulnerabilidadesEXTERNAL - Dependen de un servicio externoFUZZER - Scripts para hacer fuzzingINTRUSIVE - Scripts considerados intrusivosMALWARE - Detección de malwareSAFE - Scripts considerados segurosVERSION - Detección de versión avanzadaVULN - Detección y explotación de vulnerabilidadesDesarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  7. 7. Usando NSEPara iniciar el motor de scripts:$nmap -sC <host>Seleccionando scripts:$nmap --script <archivo/exp/folder> <host>Pasando argumentos a los scripts:--script-args ”http.useragent=0, http.pipeline=15”--script-args http.useragent=CUM,pipeline=10--script-args whois={whodb=”no follow”}Desarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  8. 8. Selección avanzada de scriptsUsando expresiones para seleccionar scriptsgranularmente:nmap -p80 --script "http-* and (not(http-brute or http-slowloris))" <objetivo>Desarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  9. 9. Consejos de usoNunca usen los dns de su ISP. Para usar los dns abiertosde google:nmap --dns-servers 8.8.8.8,8.8.4.4 <objetivo>Experimenten con diferentes configuraciones de tiempo:nmap -T5 <objetivo>Si cualquier cosa se ve sospechosa:nmap -d <objetivo>Desarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  10. 10. Consejos de usoUsen el filtro -p si solo les interesa el resultado de ciertoservicio.$nmap -p80 --script http-trace <objetivo>Si estan trabajando con scripts HTTP, cambien su useragent SIEMPRE:$nmap -p80 --script http-enum <objetivo>Desarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  11. 11. Más consejos de uso● Es difícil recordar el nombre de todos los argumentos.Mantengan abierta una consola en el folder de los scripts yusen:cat <script> | grep @args● No existe una función de autocompletar. ( Entren alfolder de scripts y ejecuten sus escaneos desde ahí? ).Desarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  12. 12. Más consejos de uso● No se olviden de visitar el wiki donde se agregan scriptsno aceptados al repositorio oficial:https://secwiki.org/w/Nmap/Script_Showcase● No existe una función de autocompletar. ( Entren alfolder de scripts y ejecuten sus escaneos desde ahí? ).Desarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  13. 13. Más consejos de uso● Interesantes scripts no oficiales:○ vulscan○ http-google-email○ http-screenshotDesarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  14. 14. Aplicaciones● Descubrir hosts y servicios● Detección y explotación de vulnerabilidades● Ataques de fuerza bruta● Sniffing de tráfico● Determinar versiones● Recolección de informaciónDesarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  15. 15. Aplicaciones● Conozcan a los scripts de la categoría ”broadcast”:#nmap --script broadcast -P0● Dropbox-listener● Broadcast ping == ping 255.255.255.255● Targets-sniffer#nmap --script=targets-sniffer --script-args=newtargets,targets-sniffer.iface=eth0NECESITAN USAR iface PARA QUE CORRA.Desarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  16. 16. Práctica● Descarguen e instalen un script nse no oficial● Corran la categoría "broadcast"nmap --script broadcast -P0NotasComando para actualizar base de datos#nmap --script-updatedbPágina con scripts no oficiales:https://secwiki.org/w/Nmap/Script_ShowcaseDesarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  17. 17. Ataques de diccionarioLa categoría ”brute” contiene scripts que nos ayudan arealizar ataques de diccionario a diferentes servicios:● http-brute$nmap --script http-brute -p80 <objetivo>Entre muchos otros:● smtp-brute● sip-brute● ftp-brute● ...Desarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  18. 18. Práctica: Ataques de diccionario● Lanza un ataque de fuerza bruta contra algún servicio.Notas:El objetivo es familiarizarse con los argumentos:● userdb● passdb● brute.firstOnly● brute.modeDesarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  19. 19. Recolección de información● Hostmap – Descubre aplicaciones web hospedadas enel mismo servidor:$nmap -p80 --script hostmap <objetivo>● http-wordpress-enum - Enumera usuarios eninstalaciones Wordpress:$nmap -p80 http-wordpress-enum <objetivo>● ip-geolocation – Localización geográfica de una IP$nmap –script ip-geolocation-* <objetivo>●Desarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  20. 20. Recolección de información● Detectar sistemas de protección mediante filtrado detráfico como WAFs e IPS.$nmap --script http-waf-detect -p80 –script-argshttp-waf-detect.aggro,http-waf-detect.detectBodyChanges <OBJETIVO>● Si la página no es dinámica usen el argumento:detectBodyChanges.● Si quieren realizar una prueba más completo (5X vecesmás el número de peticiones) usen el argumento: aggro● Desarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  21. 21. Recolección de información● Detectar sistemas de protección mediante filtrado detráfico como WAFs e IPS.$nmap --script http-waf-fingerprint -p80<OBJETIVO>Desarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  22. 22. Auditoría de configuración● Checar si la configuración de MySQL cumple con losrequerimientos del MySQL CIS$nmap -p 3306 --script mysql-audit --script-args"username=root, mysql-audit.password=toor,mysql-audit.filename=/usr/local/share/nmap/nselib/data/mysql-cis.audit" <host>● Checar si un HTTP proxy esta abierto$nmap –script http-proxy <host>Desarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  23. 23. LUALUA scriptingDesarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  24. 24. Introducción a LUA● Similar a otros scripting languages como python y ruby:$cat hola.lua#!/usr/bin/luaprint("Nombre?")name = io.read()print ("Hola " .. name)Desarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  25. 25. Introducción a LUA● Documentación:http://www.lua.org/manual/5.2/manual.htmlDesarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  26. 26. Tablas en LUA● Las tablas en LUA se declaran de la siguiente manera:local miTabla = {”1”,”2”,”3”}local nestedTabla = {”10”={”11”,”12”,”13”},”20”={”21”,”22”}}Desarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  27. 27. Tablas en LUA - http-fingerprints.luacategory=general,probes={{path=/archiva/index.action, method=GET},{path=/index.action, method=GET}},matches= {{match=.*">Apache Archiva (.-)</a>, output=Apache Archiva version 1},{match=Apache Archiva (%d-%..-)n, output=Apache Archiva version 1},{match=<title>Apache Archiva , output=Apache Archiva}}}Desarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  28. 28. Clases de carácteres● %s – caracter de espacio● %d – número entero● %a – todas las letras● %l – letras en minúscula● %x – valor hexadecimal● %z – null bytes● [sets] – Agrupaciones(*) http://www.lua.org/manual/5.2/manual.html#6.4.1Desarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  29. 29. LUA: Cadenas de textoFormatear cadenas de texto.string.format(”formato”, var1, var2, var3...)Imaginen que: texto = ”GuadalajaraCON”, anio = ”2013”, num = ”1”string.format(”Resultado:%s %d v%d.%d”, texto, anio, num, 0)Resultado:GuadalajaraCON 2013 v1.0Desarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  30. 30. LUA: Cadenas de textoRegresar sub cadenas de texto.string.sub(texto, offset_inicio, offset_fin)string.sub(”hola”, 2)olastring.sub(”hola”, 2, 3)olDesarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  31. 31. LUA: Cadenas de textoSubstituir cadenas de textostring.gsub(texto, patron, reemplazo)Reemplazar null bytes por comas.string.gsub(texto, ”%z”, ””)Cambiar la primera letra a mayúsuculasstring.gsub("%a", string.upper, 1)Desarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  32. 32. Práctica: Cadenas de textoDesarrolla un script en LUA que genere un User Agent aleatorio.Notasmath.random() genera enteros aleatoriosUser-Agents normalmente se ven así:Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)Opera/7.50 (Windows XP; U)Mozilla/5.0 (X11; U; Linux; i686; en-US; rv:1.6) Gecko Debian/1.6-7Desarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  33. 33. Patrones de textoDetectan patrones en cadenas de texto.> print(string.sub("nmap Nmap", string.find("nmap Nmap", "%u%a*")))Nmap>print(string.sub("nmap Nmap NSENmap", string.find("nmap NmapNSENmap", "NSE%u%a*")))NSENmapDesarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  34. 34. Patrones de texto> print(string.sub("123ABC123", string.find("123ABC123", "[ABC]%d")))> print(string.sub("123ABC123", string.find("123ABC123", "[A-C]%d")))> print(string.sub("123ABC123", string.find("123ABC123", "%d%d%dAB[AC]%d")))Desarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  35. 35. Capturas de textoPermiten extraer información de cadenas de texto usando patrones.>print(string.find("CONFIG<user>admin</user>", "<user>(.*)</user>"))7 24 adminhttp-majordomo2-dirtraversal:_, _, rfile_content = string.find(response.body, <pre>(.*)<!%-%- Majordomohelp_foot format file %-%->)Desarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  36. 36. Capturas de textofunction get_href_links(body)local href_links = {}for l in string.gfind(body, href%s*=%s*["](%s*[^"^]+%s*)["]) dotable.insert(href_links, l)endreturn href_linksendDesarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  37. 37. Desarrollo NSENmap Scripting EngineDesarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  38. 38. Introducción a desarrollo NSEDesarrollar tus propios scripts NSE es muy sencillo.Envia tus scripts a la lista de correo de desarrollo de Nmap: dev@insecure.orgSi no sabes que hacer, checa el wishlist de la comunidad:https://secwiki.org/w/Nmap/Script_IdeasDesarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  39. 39. Depurando● Para mostrar información de depuración-d[1-9]● Para generar una traza del script:--script-trace● Para generar una traza de paquetes:--packet-traceDesarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  40. 40. Librerías NSEPara incluir librerías se usa ”require”:local http = require ”http”Entre las librerías más útiles están:● http● creds● target● packet● bruteDesarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  41. 41. ¿Como distinguir entre versiones?La familia 6.x:local http = require ”http”La familia 5.x:require "http"Desarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  42. 42. Reglas de ejecuciónTodos los scripts deben de tener por lo menos una de lassiguientes funciones:● prerule()● hostrule(host)● portrule(host, port)● postrule()Desarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  43. 43. Ejemplos de reglas de ejecuciónExisten aliases como shortport.httphttp = shortport.port_or_service({80, 443, 631, 7080,8080, 8088, 5800, 3872, 8180, 8000},{"http", "https", "ipp", "http-alt", "vnc-http", "oem-agent"})La regla para servidores HTTP sería:portrule = shortport.httpDesarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  44. 44. Ejemplos de reglas de ejecuciónHostrule para siempre ejecutar el script:hostrule = function() return true endDesarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  45. 45. Reglas de pre-ejecuciónChecando permisos administrativos e interface:prerule = function()return nmap.is_privileged() and(stdnse.get_script_args("targets-sniffer.iface") ornmap.get_interface())Desarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  46. 46. Plantilla NSEdescription = [[]]----- @usage nmap -sV –script myscript <target>-- @output-- @args---author = ""license = "Same as Nmap--See http://nmap.org/book/man-legal.html"categories = {}portrule =action = function(host, port)endDesarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  47. 47. Librería "nmap"● Cargar archivos (Multiplataforma)nmap.fetch_file()● Leer estado de determinado puertonmap.get_port_state(host,puerto)● Funciones pcap para manejo de paquetes ”raw”nmap.pcap_open()nmap.pcap_receive()nmap.pcap_close()Desarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  48. 48. Leyendo argumentos en scripts● Para leer argumentos se usa la librería "stdnse":stdnse.get_script_args("<nombre de argumento>")● Si usamos el formato <script>.<nombre> declaramos unalias global del nombre del argumento:stdnse.get_script_args(SCRIPT_NAME..".user")Es común ver declaraciones como la siguiente:local mysql_user = stdnse.get_script_args(SCRIPT_NAME..".user") or "root"Desarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  49. 49. Práctica: Encontrando webcamsExiste una vulnerabilidad en camaras IP Trendnet modeloTW 100 que permite accederlas remotante:http://ip/anony/mjpg.cgiNotas● Recuerden que pueden cargar listas de ips comoobjetivos.nmap -iL ips.txt OBJETIVODesarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  50. 50. Formato de datos de salida○ Nmap soporta diferentes formatos de salida dedatos XML, greppable y normal. Sin embargo datosde salida de NSE solo se guardan cuando elegimosXML o normal.○ El modo greppable ya esta deprecado (Aunque enalgunas situaciones es útil aún).Desarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  51. 51. Formato XML○ Nmap genera elementos para escaneo de puertos,detección de servicios y NSE.○ Anteriormente se guardaba en un elemento llamado<script> dentro del atributo output.○ En agosto del 2012 se integró soporte estructuradode scripts.Desarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  52. 52. Datos de salida de NSE con soporteXML● Al usar la función stdnse.output_table para guardarnuestros datos de salida se auto genera el árbol XML..nse:...local output_tab = stdnse.output_table()output_tab.ip = host.ipoutput_tab.hosts = domainsreturn output_tabDesarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  53. 53. Datos de salida de NSE con soporteXMLNSE:| test:| ip: 127.0.0.1|_ hosts: localhostXML:<script id="test" output="..."><elem key="ip">127.0.0.1</elem><elem key="hosts">localhost</elem></script>Desarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  54. 54. Consejos al tratar datos de salida○ Organizar de forma lógica los datos○ Es preferible usar la función stdnse.output_table()Desarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  55. 55. Reporte de vulnerabilidadesLa librería "vulns" fue escrita para ayudarnos a reportarcorrectamente vulnerabilidades encontradas con NSE.La función de generar reportes construye automáticamenteun reporte con un formato específico en base a los camposasignados.Desarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  56. 56. Reporte de vulnerabilidadesdns-openresolvers-check:VULNERABLE:This DNS server has been blacklisted as an open resolver.State: VULNERABLERisk factor: HighDescription:This DNS server is known for supporting open recursion. Open resolvers are dangerousbecause of the following reasons:* Attackers may consume resources of third parties. They are actively being exploited inDDoS attacks.* Attackers may poison the cache of an open resolver.References:http://isotf.org/news/DNS-Amplification-Attacks.pdfhttp://dns.measurement-factory.com/surveys/openresolvers.htmlDesarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  57. 57. Reporte de vulnerabilidadesLa tabla principal tiene la siguiente estructura:local vuln = {title = Authentication bypass in MySQL servers.,IDS = {CVE = CVE-2012-2122},state = vulns.STATE.NOT_VULN,description = [[When a user connects to MariaDB/MySQL...]],references = {http://seclists.org/oss-sec/2012/q2/493,https://community.rapid7.com/community/metasploit/blog/2012/06/11/cve-2012-2122-a-tragically-comedic-security-flaw-in-mysql},dates = {disclosure = {year = 2012, month = 06, day = 9},},}Desarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  58. 58. Reporte de vulnerabilidadesLa librería tiene una variable que lleva el registro delestado de la vulnerabilidad encontrada:● EXPLOITABLE● VULNERABLE● NOT_VULNEs nuestra responsabilidad asignarlo durante la ejecución:vuln.state = vulns.STATE.VULNDesarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  59. 59. Reporte de vulnerabilidadesPara 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)Desarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  60. 60. Networking I/ONSE tiene acceso a la librería de sockets de Nmap queofrece paralelismo transparente por medio de un API queusa un estilo de conexión.Si quieres irte al nivel más bajo se registran ”monitores”PCAP a la interfaz y se procesan como son recibidos.Más información: http://nmap.org/book/nse-api.html#nse-api-networkioDesarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  61. 61. Networking I/OModems Huawei HG530x y HG520x ( posiblemente otrostambién ) revelan información sensible si se envia unpaquete UDP especial a puerto 43690.¿Qué tan sensible?● Firmware version● MAC address● Dirección IP local y remota● Modelo● Usuario y password PPPoEDesarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  62. 62. huawei-udp-infoUsamos un paquete UDP especialmente diseñado eimprimimos la información recibida.● http://www.hakim.ws/huawei/HG520_udpinfo.tar.gz● http://websec.ca/advisories/view/Huawei-HG520c-3.10.18.x-information-disclosureDesarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  63. 63. huawei-udp-infoRegla de ejecuciónportrule = shortport.portnumber(43690, "udp", {"open","open|filtered","filtered"})Argumentos de shortport.portnumber:portnumber(puerto,protocolo,estados)Desarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mx
  64. 64. huawei-udp-info1. Crea un socketlocal socket = nmap.new_socket("udp")2. Configura el tiempo de esperasocket:set_timeout(tonumber(timeout))3. Haciendo la conexiónlocal status = socket:connect(ip,puerto, "udp")if (not(status)) then return endDesarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  65. 65. huawei-udp-infostatus = socket:send(payload)if (not(status)) then return endstatus, data = socket:receive()if (not(status)) thensocket:close()returnendDesarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  66. 66. huawei-udp-info-- PORT STATE SERVICE REASON-- 43690/udp open|filtered unknown no-response-- |_huawei5xx-udp-info: |x10||||||||<Firmwareversion>|||||||||||||||||||||||||||||||<MAC addr>|||<Softwareversion>||||||||||||||||||||||||||||||||||||||||||||| <localip>|||||||||||||||||||<remoteip>||||||||||||||||||<model>|||||||||||||||<pppoeuser>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||<pppoepassword>||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||x01||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||Desarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  67. 67. ParalelismoUsemos algunas análogias para definir terminos:○ Hilos ( Co-rutina en LUA ) -> proceso.○ Un script -> ejecutable.Durante la ejecución los scripts son "detenidos" si hayllamadas a operaciones de redes.Desarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  68. 68. ParalelismoIniciando un threadworker_thread, status_function = stdnse.new_thread(main, …)Acciones que se pueden aplicar a Mutexes:”lock” - Bloquea un thread”trylock” - Bloquea un thread si es posible”done” - Libera el mutex”running” - Regresa el thread que tiene el mutexDesarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  69. 69. Paralelismo○ Nos sirve cuando necesitamos paralelizarconexiones usando sockets.○ No hay que preocuparse por sincronía de memoria.○ También cuenta con conditional variables parasincronizar la ejecución.Desarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  70. 70. http-iis-shortname-dosPráctica para casa: Actualizar el script para quesoporte paralelismo.Práctica para casa #2: Implementar hilo monitor queactualice el estado del host ( abajo o arriba )Desarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  71. 71. Consejos de desarrollo● Siempre documentar lo mejor posible el script● Incluir por lo menos dos ejemplos de uso "@usage"● El output del script debe ser mínimo cuando verbosesea menor a nivel 2● Usar funciones de la librería Nmap cada que seaposible.Desarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  72. 72. Consejos de desarrollo● Reporten correctamente las vulnerabilidades● Si encuentran credenciales, agregarlas a "creds"● Si encuentran nuevos objetivos, agregarlos a "targets"● No olviden enviar sus scripts a la lista oficial(dev@insecure.org) o agregarlos al wiki.Desarrollo NSE (Nmap Scripting Engine)Paulino Calderoncalderon@websec.mxhttp://guadalajaracon.orgGuadalajaraCON
  73. 73. Desarrollo NSE ( Nmap Scripting Engine)Paulino Calderon@calderpwnhttp://calderonpale.comGuadalajaraCON 2013http://guadalajaracon.org

×