Hacking s

73
Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon Twitter: @calderpwn Email: [email protected] WWW: http://calderonpale.com GuadalajaraCON 2013 http://guadalajaracon.org http://guadalajaracon.org GuadalajaraCON Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

Transcript of Hacking s

  • Desarrollo NSE (Nmap Scripting Engine)

    Paulino CalderonTwitter: @calderpwnEmail: [email protected]: http://calderonpale.com

    GuadalajaraCON 2013http://guadalajaracon.org

    http://guadalajaracon.orgGuadalajaraCON

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

  • Quin 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.com

    http://guadalajaracon.orgGuadalajaraCON

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

  • Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    Introduccin Uso avanzado Fundamentos de programacin en LUA

    Controles de flujo Tipos de datos Cadenas de texto Patrones y capturas

    Desarrollo de scripts Deteccin de vulnerabilidades Uso de libreras NSE Manejo de sockets Paralelismo Estndar de desarrollo

    http://guadalajaracon.orgGuadalajaraCON

    Temario

  • Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    Motor de scripts que ha expandido la funcionalidad de Nmap en todos los aspectos.

    Actualmente existen ms de 400 scripts (435 el da que escrib esto) en el repositorio oficial.

    http://guadalajaracon.orgGuadalajaraCON

    NSE == "Nmap Scripting Engine"

  • LUA

    Basado en el lenguaje de scripting LUA: Implementacin pequea pero muy poderosa. Usado en proyectos como:

    Wireshark Snort VIM World of Warcraft

    Entre otros...

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Categoras NSEAUTH - Autenticacin de usuariosBROADCAST - Descubrimiento de hosts a travs de peticiones "broadcast" DEFAULT - Estos scripts son ejecutados cuando usamos -sCDISCOVERY - Descubrimiento de hosts y serviciosDOS - Denegacin de ServicioEXPLOIT - Explotacin de vulnerabilidadesEXTERNAL - Dependen de un servicio externoFUZZER - Scripts para hacer fuzzingINTRUSIVE - Scripts considerados intrusivosMALWARE - Deteccin de malwareSAFE - Scripts considerados segurosVERSION - Deteccin de versin avanzadaVULN - Deteccin y explotacin de vulnerabilidades

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Usando NSEPara iniciar el motor de scripts:$nmap -sC

    Seleccionando scripts:$nmap --script

    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 Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Seleccin avanzada de scriptsUsando expresiones para seleccionar scripts granularmente:nmap -p80 --script "http-* and (not(http-brute or http-slowloris))"

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Consejos de usoNunca usen los dns de su ISP. Para usar los dns abiertos de google:nmap --dns-servers 8.8.8.8,8.8.4.4

    Experimenten con diferentes configuraciones de tiempo:nmap -T5

    Si cualquier cosa se ve sospechosa:nmap -d

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Consejos de usoUsen el filtro -p si solo les interesa el resultado de cierto servicio.$nmap -p80 --script http-trace

    Si estan trabajando con scripts HTTP, cambien su user agent SIEMPRE:$nmap -p80 --script http-enum

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Ms consejos de uso Es difcil recordar el nombre de todos los argumentos.Mantengan abierta una consola en el folder de los scripts y usen:

    cat | grep @args No existe una funcin de autocompletar. ( Entren al

    folder de scripts y ejecuten sus escaneos desde ah? ).

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Ms consejos de uso No se olviden de visitar el wiki donde se agregan scripts

    no aceptados al repositorio oficial:https://secwiki.org/w/Nmap/Script_Showcase

    No existe una funcin de autocompletar. ( Entren al folder de scripts y ejecuten sus escaneos desde ah? ).

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Ms consejos de uso Interesantes scripts no oficiales:

    vulscan http-google-email http-screenshot

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Aplicaciones Descubrir hosts y servicios Deteccin y explotacin de vulnerabilidades Ataques de fuerza bruta Sniffing de trfico Determinar versiones Recoleccin de informacin

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Aplicaciones Conozcan a los scripts de la categora 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=eth0

    NECESITAN USAR iface PARA QUE CORRA.Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Prctica Descarguen e instalen un script nse no oficial Corran la categora "broadcast"

    nmap --script broadcast -P0

    NotasComando para actualizar base de datos#nmap --script-updatedb

    Pgina con scripts no oficiales:https://secwiki.org/w/Nmap/Script_Showcase

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Ataques de diccionarioLa categora brute contiene scripts que nos ayudan a realizar ataques de diccionario a diferentes servicios: http-brute$nmap --script http-brute -p80

    Entre muchos otros: smtp-brute sip-brute ftp-brute ...

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Prctica: Ataques de diccionario Lanza un ataque de fuerza bruta contra algn servicio.

    Notas:El objetivo es familiarizarse con los argumentos: userdb passdb brute.firstOnly brute.mode

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Recoleccin de informacin Hostmap Descubre aplicaciones web hospedadas en

    el mismo servidor: $nmap -p80 --script hostmap http-wordpress-enum - Enumera usuarios en

    instalaciones Wordpress:$nmap -p80 http-wordpress-enum

    ip-geolocation Localizacin geogrfica de una IP$nmap script ip-geolocation-*

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Recoleccin de informacin Detectar sistemas de proteccin mediante filtrado de

    trfico como WAFs e IPS.$nmap --script http-waf-detect -p80 script-args http-waf-detect.aggro,http-waf-detect.detectBodyChanges

    Si la pgina no es dinmica usen el argumento: detectBodyChanges.

    Si quieren realizar una prueba ms completo (5X veces ms el nmero de peticiones) usen el argumento: aggro

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Recoleccin de informacin Detectar sistemas de proteccin mediante filtrado de

    trfico como WAFs e IPS.$nmap --script http-waf-fingerprint -p80

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Auditora de configuracin Checar si la configuracin de MySQL cumple con los

    requerimientos 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'"

    Checar si un HTTP proxy esta abierto$nmap script http-proxy

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • LUALUA scripting

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Introduccin 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 Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Introduccin a LUA Documentacin:http://www.lua.org/manual/5.2/manual.html

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • 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 Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Tablas en LUA - http-fingerprints.luacategory='general',probes={

    {path='/archiva/index.action', method='GET'},{path='/index.action', method='GET'}},

    matches= {{match='.*">Apache Archiva (.-)', output='Apache Archiva version \\1'},{match='Apache Archiva (%d-%..-)\n', output='Apache Archiva version \\1'},{match='Apache Archiva \\', output='Apache Archiva'}}

    }

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Clases de carcteres %s caracter de espacio %d nmero entero %a todas las letras %l letras en minscula %x valor hexadecimal %z null bytes [sets] Agrupaciones

    (*) http://www.lua.org/manual/5.2/manual.html#6.4.1

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • 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.0

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • LUA: Cadenas de textoRegresar sub cadenas de texto. string.sub(texto, offset_inicio, offset_fin)

    string.sub(hola, 2)olastring.sub(hola, 2, 3)ol

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • 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 maysuculasstring.gsub("%a", string.upper, 1)

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Prctica: Cadenas de textoDesarrolla un script en LUA que genere un User Agent aleatorio.

    Notasmath.random() genera enteros aleatorios

    User-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-7

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • 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 Nmap NSENmap", "NSE%u%a*")))NSENmap

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • 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 Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Capturas de textoPermiten extraer informacin de cadenas de texto usando patrones.

    >print(string.find("CONFIGadmin", "(.*)"))7 24 admin http-majordomo2-dirtraversal:_, _, rfile_content = string.find(response.body, '(.*)')

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Capturas de textofunction get_href_links(body) local href_links = {}

    for l in string.gfind(body, 'href%s*=%s*[\'"](%s*[^"^\']+%s*)[\'"]') do table.insert(href_links, l) end

    return href_linksend

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Desarrollo NSENmap Scripting Engine

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Introduccin a desarrollo NSEDesarrollar tus propios scripts NSE es muy sencillo.Envia tus scripts a la lista de correo de desarrollo de Nmap: [email protected]

    Si no sabes que hacer, checa el wishlist de la comunidad:https://secwiki.org/w/Nmap/Script_Ideas

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Depurando Para mostrar informacin de depuracin-d[1-9] Para generar una traza del script:--script-trace Para generar una traza de paquetes:--packet-trace

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Libreras NSEPara incluir libreras se usa require:local http = require http

    Entre las libreras ms tiles estn: http creds target packet brute

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Como distinguir entre versiones?La familia 6.x:local http = require http

    La familia 5.x:require "http"

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Reglas de ejecucinTodos los scripts deben de tener por lo menos una de las siguientes funciones: prerule() hostrule(host) portrule(host, port) postrule()

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Ejemplos de reglas de ejecucinExisten aliases como shortport.http

    http = 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 sera:portrule = shortport.http

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Ejemplos de reglas de ejecucinHostrule para siempre ejecutar el script:hostrule = function() return true end

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Reglas de pre-ejecucinChecando permisos administrativos e interface:

    prerule = function() return nmap.is_privileged() and (stdnse.get_script_args("targets-sniffer.iface") or nmap.get_interface())

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Plantilla NSEdescription = [[]]----- @usage nmap -sV script myscript -- @output-- @args---author = ""license = "Same as Nmap--See http://nmap.org/book/man-legal.html"categories = {}

    portrule =

    action = function(host, port)

    end

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Librera "nmap" Cargar archivos (Multiplataforma)

    nmap.fetch_file() Leer estado de determinado puerto

    nmap.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 Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Leyendo argumentos en scripts Para leer argumentos se usa la librera "stdnse":

    stdnse.get_script_args("") Si usamos el formato . declaramos un

    alias global del nombre del argumento:stdnse.get_script_args(SCRIPT_NAME..".user")

    Es comn ver declaraciones como la siguiente:local mysql_user = stdnse.get_script_args

    (SCRIPT_NAME..".user") or "root"

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Prctica: Encontrando webcamsExiste una vulnerabilidad en camaras IP Trendnet modelo TW 100 que permite accederlas remotante:

    http://ip/anony/mjpg.cgi

    Notas Recuerden que pueden cargar listas de ips como

    objetivos. nmap -iL ips.txt OBJETIVO

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Formato de datos de salida Nmap soporta diferentes formatos de salida de

    datos XML, greppable y normal. Sin embargo datos de salida de NSE solo se guardan cuando elegimos XML o normal.

    El modo greppable ya esta deprecado (Aunque en algunas situaciones es til an).

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Formato XML Nmap genera elementos para escaneo de puertos,

    deteccin de servicios y NSE.

    Anteriormente se guardaba en un elemento llamado dentro del atributo output.

    En agosto del 2012 se integr soporte estructurado de scripts.

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Datos de salida de NSE con soporte XML Al usar la funcin stdnse.output_table para guardar

    nuestros datos de salida se auto genera el rbol XML.

    .nse:

    ...local output_tab = stdnse.output_table()output_tab.ip = host.ipoutput_tab.hosts = domains

    return output_tab

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Datos de salida de NSE con soporte XML

    NSE:| test:| ip: 127.0.0.1|_ hosts: localhost

    XML:

    127.0.0.1localhost

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Consejos al tratar datos de salida Organizar de forma lgica los datos Es preferible usar la funcin stdnse.output_table()

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Reporte de vulnerabilidadesLa librera "vulns" fue escrita para ayudarnos a reportar correctamente vulnerabilidades encontradas con NSE. La funcin de generar reportes construye automticamente un reporte con un formato especfico en base a los campos asignados.

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Reporte de vulnerabilidadesdns-openresolvers-check: VULNERABLE: This DNS server has been blacklisted as an open resolver. State: VULNERABLE Risk factor: High Description: This DNS server is known for supporting open recursion. Open resolvers are dangerous because of the following reasons: * Attackers may consume resources of third parties. They are actively being exploited in DDoS attacks. * Attackers may poison the cache of an open resolver.

    References: http://isotf.org/news/DNS-Amplification-Attacks.pdf http://dns.measurement-factory.com/surveys/openresolvers.html

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • 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 Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Reporte de vulnerabilidadesLa librera tiene una variable que lleva el registro del estado de la vulnerabilidad encontrada: EXPLOITABLE VULNERABLE NOT_VULN

    Es nuestra responsabilidad asignarlo durante la ejecucin:

    vuln.state = vulns.STATE.VULN

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Reporte de vulnerabilidadesPara generar el reporte se utiliza la funcin 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 Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Networking I/ONSE tiene acceso a la librera de sockets de Nmap que ofrece paralelismo transparente por medio de un API que usa un estilo de conexin.

    Si quieres irte al nivel ms bajo se registran monitores PCAP a la interfaz y se procesan como son recibidos.

    Ms informacin: http://nmap.org/book/nse-api.html#nse-api-networkio

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Networking I/OModems Huawei HG530x y HG520x ( posiblemente otros tambin ) revelan informacin sensible si se envia un paquete UDP especial a puerto 43690.

    Qu tan sensible? Firmware version MAC address Direccin IP local y remota Modelo Usuario y password PPPoE

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • huawei-udp-infoUsamos un paquete UDP especialmente diseado e imprimimos la informacin recibida. http://www.hakim.ws/huawei/HG520_udpinfo.tar.gz http://websec.ca/advisories/view/Huawei-HG520c-

    3.10.18.x-information-disclosure

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • huawei-udp-infoRegla de ejecucinportrule = shortport.portnumber(43690, "udp", {"open", "open|filtered","filtered"})

    Argumentos de shortport.portnumber:portnumber(puerto,protocolo,estados)

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

  • huawei-udp-info1. Crea un socket local socket = nmap.new_socket("udp")2. Configura el tiempo de espera socket:set_timeout(tonumber(timeout))3. Haciendo la conexin local status = socket:connect(ip,puerto, "udp") if (not(status)) then return end

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • huawei-udp-infostatus = socket:send(payload) if (not(status)) then return end status, data = socket:receive() if (not(status)) then socket:close() return end

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • huawei-udp-info-- PORT STATE SERVICE REASON-- 43690/udp open|filtered unknown no-response

    -- |_huawei5xx-udp-info: |\x10||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||\x01||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--

    a

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • ParalelismoUsemos algunas anlogias para definir terminos: Hilos ( Co-rutina en LUA ) -> proceso. Un script -> ejecutable.

    Durante la ejecucin los scripts son "detenidos" si hay llamadas a operaciones de redes.

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • ParalelismoIniciando un thread

    worker_thread, status_function = stdnse.new_thread(main, )

    Acciones que se pueden aplicar a Mutexes:lock - Bloquea un threadtrylock - Bloquea un thread si es posibledone - Libera el mutexrunning - Regresa el thread que tiene el mutex

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Paralelismo Nos sirve cuando necesitamos paralelizar

    conexiones usando sockets. No hay que preocuparse por sincrona de memoria. Tambin cuenta con conditional variables para

    sincronizar la ejecucin.

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • http-iis-shortname-dos

    Prctica para casa: Actualizar el script para que soporte paralelismo.

    Prctica para casa #2: Implementar hilo monitor que actualice el estado del host ( abajo o arriba )

    I

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • 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 mnimo cuando verbose

    sea menor a nivel 2 Usar funciones de la librera Nmap cada que sea

    posible.

    S

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • 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

    ([email protected]) o agregarlos al wiki.

    S

    Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon [email protected]

    http://guadalajaracon.orgGuadalajaraCON

  • Desarrollo NSE ( Nmap Scripting Engine)

    Paulino Calderon@calderpwnhttp://calderonpale.com

    GuadalajaraCON 2013http://guadalajaracon.org