SlideShare una empresa de Scribd logo
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
Twitter: @calderpwn
Email: calderon@websec.mx
WWW: http://calderonpale.com
GuadalajaraCON 2013
http://guadalajaracon.org
http://guadalajaracon.org
GuadalajaraCON
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
¿Quién soy?
Repositorio personal
https://github.com/cldrn/nmap-nse-scripts/
Google Summer of Code 2011
https://code.google.com/p/google-summer-of-code-2011-nmap/
Nmap 6: Network Exploration and Security Auditing Cookbook
http://nmap-cookbook.com
http://guadalajaracon.org
GuadalajaraCON
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@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 desarrollo
http://guadalajaracon.org
GuadalajaraCON
Temario
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
● Motor de scripts que ha expandido la funcionalidad de
Nmap en todos los aspectos.
● Actualmente existen más de 400 scripts (435 el día que
escribí esto) en el repositorio oficial.
http://guadalajaracon.org
GuadalajaraCON
NSE == "Nmap Scripting Engine"
LUA
● Basado en el lenguaje de scripting LUA:
● Implementación pequeña pero muy poderosa.
● Usado en proyectos como:
● Wireshark
● Snort
● VIM
● World of Warcraft
Entre otros...
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
Categorías NSE
AUTH - Autenticación de usuarios
BROADCAST - Descubrimiento de hosts a través de peticiones "broadcast"
DEFAULT - Estos scripts son ejecutados cuando usamos -sC
DISCOVERY - Descubrimiento de hosts y servicios
DOS - Denegación de Servicio
EXPLOIT - Explotación de vulnerabilidades
EXTERNAL - Dependen de un servicio externo
FUZZER - Scripts para hacer fuzzing
INTRUSIVE - Scripts considerados intrusivos
MALWARE - Detección de malware
SAFE - Scripts considerados seguros
VERSION - Detección de versión avanzada
VULN - Detección y explotación de vulnerabilidades
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
Usando NSE
Para 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 Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
Selección avanzada de scripts
Usando expresiones para seleccionar scripts
granularmente:
nmap -p80 --script "http-* and (not(http-brute or http-
slowloris))" <objetivo>
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
Consejos de uso
Nunca usen los dns de su ISP. Para usar los dns abiertos
de 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 Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
Consejos de uso
Usen el filtro -p si solo les interesa el resultado de cierto
servicio.
$nmap -p80 --script http-trace <objetivo>
Si estan trabajando con scripts HTTP, cambien su user
agent SIEMPRE:
$nmap -p80 --script http-enum <objetivo>
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
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 y
usen:
cat <script> | grep @args
● No existe una función de autocompletar. ( Entren al
folder de scripts y ejecuten sus escaneos desde ahí? ).
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
Más 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 función de autocompletar. ( Entren al
folder de scripts y ejecuten sus escaneos desde ahí? ).
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
Más consejos de uso
● Interesantes scripts no oficiales:
○ vulscan
○ http-google-email
○ http-screenshot
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
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ón
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
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=eth0
NECESITAN USAR iface PARA QUE CORRA.
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
Práctica
● Descarguen e instalen un script nse no oficial
● Corran la categoría "broadcast"
nmap --script broadcast -P0
Notas
Comando para actualizar base de datos
#nmap --script-updatedb
Página con scripts no oficiales:
https://secwiki.org/w/Nmap/Script_Showcase
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
Ataques de diccionario
La categoría ”brute” contiene scripts que nos ayudan a
realizar 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 Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
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.mode
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
Recolección de información
● Hostmap – Descubre aplicaciones web hospedadas en
el mismo servidor:
$nmap -p80 --script hostmap <objetivo>
● http-wordpress-enum - Enumera usuarios en
instalaciones 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 Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
Recolección de información
● Detectar sistemas de protección mediante filtrado de
tráfico como WAFs e IPS.
$nmap --script http-waf-detect -p80 –script-args
http-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 veces
más el número de peticiones) usen el argumento: aggro
● Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
Recolección de información
● Detectar sistemas de protección mediante filtrado de
tráfico como WAFs e IPS.
$nmap --script http-waf-fingerprint -p80
<OBJETIVO>
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
Auditoría de configuración
● Checar si la configuración 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'" <host>
● Checar si un HTTP proxy esta abierto
$nmap –script http-proxy <host>
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
LUA
LUA scripting
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
Introducción a LUA
● Similar a otros scripting languages como python y ruby:
$cat hola.lua
#!/usr/bin/lua
print("Nombre?")
name = io.read()
print ("Hola " .. name)
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
Introducción a LUA
● Documentación:
http://www.lua.org/manual/5.2/manual.html
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
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
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
Tablas en LUA - http-fingerprints.lua
category='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 Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
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.1
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
LUA: Cadenas de texto
Formatear 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
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
LUA: Cadenas de texto
Regresar sub cadenas de texto.
string.sub(texto, offset_inicio, offset_fin)
string.sub(”hola”, 2)
ola
string.sub(”hola”, 2, 3)
ol
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
LUA: Cadenas de texto
Substituir cadenas de texto
string.gsub(texto, patron, reemplazo)
Reemplazar null bytes por comas.
string.gsub(texto, ”%z”, ””)
Cambiar la primera letra a mayúsuculas
string.gsub("%a", string.upper, 1)
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
Práctica: Cadenas de texto
Desarrolla un script en LUA que genere un User Agent aleatorio.
Notas
math.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
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
Patrones de texto
Detectan 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
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
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
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
Capturas de texto
Permiten extraer información de cadenas de texto usando patrones.
>print(string.find("CONFIG<user>admin</user>", "<user>(.*)</user>"))
7 24 admin
http-majordomo2-dirtraversal:
_, _, rfile_content = string.find(response.body, '<pre>(.*)<!%-%- Majordomo
help_foot format file %-%->')
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
Capturas de texto
function 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_links
end
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
Desarrollo NSE
Nmap Scripting Engine
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
Introducción a desarrollo NSE
Desarrollar tus propios scripts NSE es muy sencillo.
Envia tus scripts a la lista de correo de desarrollo de Nmap: dev@insecure.org
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
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
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-trace
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
Librerías NSE
Para incluir librerías se usa ”require”:
local http = require ”http”
Entre las librerías más útiles están:
● http
● creds
● target
● packet
● brute
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
¿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
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
Reglas de ejecución
Todos 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
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
Ejemplos de reglas de ejecución
Existen 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 sería:
portrule = shortport.http
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
Ejemplos de reglas de ejecución
Hostrule para siempre ejecutar el script:
hostrule = function() return true end
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
Reglas de pre-ejecución
Checando 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
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
Plantilla NSE
description = [[
]]
---
-- @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)
end
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
Librería "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
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
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 un
alias 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 Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
Práctica: Encontrando webcams
Existe 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
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
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 aún).
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
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 estructurado
de scripts.
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
Datos de salida de NSE con soporte
XML
● Al usar la función 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.ip
output_tab.hosts = domains
return output_tab
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
Datos de salida de NSE con soporte
XML
NSE:
| test:
| ip: 127.0.0.1
|_ hosts: localhost
XML:
<script id="test" output="...">
<elem key="ip">127.0.0.1</elem>
<elem key="hosts">localhost</elem>
</script>
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
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 Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
Reporte de vulnerabilidades
La librería "vulns" fue escrita para ayudarnos a reportar
correctamente vulnerabilidades encontradas con NSE.
La función de generar reportes construye automáticamente
un reporte con un formato específico en base a los campos
asignados.
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
Reporte de vulnerabilidades
dns-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
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
Reporte de vulnerabilidades
La 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
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
Reporte de vulnerabilidades
La librería tiene una variable que lleva el registro del
estado de la vulnerabilidad encontrada:
● EXPLOITABLE
● VULNERABLE
● NOT_VULN
Es nuestra responsabilidad asignarlo durante la ejecución:
vuln.state = vulns.STATE.VULN
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
Reporte de vulnerabilidades
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)
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
Networking I/O
NSE tiene acceso a la librería de sockets de Nmap que
ofrece paralelismo transparente por medio de un API que
usa 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-networkio
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
Networking I/O
Modems Huawei HG530x y HG520x ( posiblemente otros
también ) revelan información sensible si se envia un
paquete UDP especial a puerto 43690.
¿Qué tan sensible?
● Firmware version
● MAC address
● Dirección IP local y remota
● Modelo
● Usuario y password PPPoE
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
huawei-udp-info
Usamos un paquete UDP especialmente diseñado e
imprimimos 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-disclosure
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
huawei-udp-info
Regla de ejecución
portrule = shortport.portnumber(43690, "udp", {"open",
"open|filtered","filtered"})
Argumentos de shortport.portnumber:
portnumber(puerto,protocolo,estados)
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
huawei-udp-info
1. Crea un socket
local socket = nmap.new_socket("udp")
2. Configura el tiempo de espera
socket:set_timeout(tonumber(timeout))
3. Haciendo la conexión
local status = socket:connect(ip,puerto, "udp")
if (not(status)) then return end
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
huawei-udp-info
status = 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
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
huawei-udp-info
-- PORT STATE SERVICE REASON
-- 43690/udp open|filtered unknown no-response
-- |_huawei5xx-udp-info: |x10||||||||<Firmware
version>|||||||||||||||||||||||||||||||<MAC addr>|||<Software
version>||||||||||||||||||||||||||||||||||||||||||||| <local
ip>|||||||||||||||||||<remote
ip>||||||||||||||||||<model>|||||||||||||||<pppoe
user>||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|||||||<pppoepassword>|||||||||||||||||||||||||||||||||||||||||||||||||||||||
|||||||||||||||||||||||||||||||||||||||||||x01||||||||||||||||||||||||||||||||||||||||||||
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
Paralelismo
Usemos algunas análogias para definir terminos:
○ Hilos ( Co-rutina en LUA ) -> proceso.
○ Un script -> ejecutable.
Durante la ejecución los scripts son "detenidos" si hay
llamadas a operaciones de redes.
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
Paralelismo
Iniciando un thread
worker_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 mutex
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
Paralelismo
○ Nos sirve cuando necesitamos paralelizar
conexiones usando sockets.
○ No hay que preocuparse por sincronía de memoria.
○ También cuenta con conditional variables para
sincronizar la ejecución.
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
http-iis-shortname-dos
Práctica para casa: Actualizar el script para que
soporte paralelismo.
Práctica para casa #2: Implementar hilo monitor que
actualice el estado del host ( abajo o arriba )
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
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 verbose
sea menor a nivel 2
● Usar funciones de la librería Nmap cada que sea
posible.
Desarrollo NSE (Nmap Scripting Engine)
Paulino Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
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 Calderon
calderon@websec.mx
http://guadalajaracon.org
GuadalajaraCON
Desarrollo NSE ( Nmap Scripting Engine)
Paulino Calderon
@calderpwn
http://calderonpale.com
GuadalajaraCON 2013
http://guadalajaracon.org

Más contenido relacionado

PDF
Shell scripting
PPTX
Introduction to laravel framework
PDF
The Many Ways to Test Your React App
PPTX
02 terraform core concepts
PDF
OWASP DefectDojo - Open Source Security Sanity
PPTX
Laravel Tutorial PPT
PPTX
Azure Pipelines
Shell scripting
Introduction to laravel framework
The Many Ways to Test Your React App
02 terraform core concepts
OWASP DefectDojo - Open Source Security Sanity
Laravel Tutorial PPT
Azure Pipelines

La actualidad más candente (20)

PDF
Spring Security
PDF
Introducción a Docker
PDF
Spring Boot - Uma app do 0 a Web em 30 minutos
PPTX
Bash Shell Scripting
PDF
Modelos de desarrollo del software
PDF
Git and Github
PPT
Node.js Express Framework
PPTX
Git undo
PPTX
Software Containerization
PDF
Web Development with Laravel 5
PDF
Setting up Notifications, Alerts & Webhooks with Flux v2 by Alison Dowdney
PDF
Configuration Management in Ansible
PPT
Bash shell
PPTX
Laravel Eloquent ORM
PDF
Curso Kubernetes CodeURJC
PDF
Kubernetes Networking
PDF
Intro to DefectDojo at OWASP Switzerland
PDF
Documento arquitectura de software
PPTX
Spring Boot
Spring Security
Introducción a Docker
Spring Boot - Uma app do 0 a Web em 30 minutos
Bash Shell Scripting
Modelos de desarrollo del software
Git and Github
Node.js Express Framework
Git undo
Software Containerization
Web Development with Laravel 5
Setting up Notifications, Alerts & Webhooks with Flux v2 by Alison Dowdney
Configuration Management in Ansible
Bash shell
Laravel Eloquent ORM
Curso Kubernetes CodeURJC
Kubernetes Networking
Intro to DefectDojo at OWASP Switzerland
Documento arquitectura de software
Spring Boot
Publicidad

Destacado (20)

PDF
Pentesting 101 por Paulino Calderon
PDF
Taller: Exploración de redes con Nmap
PPTX
Dragonjarcon2015 - ¿Cómo programar aplicaciones seguras? por Paulino Calderon...
PPTX
CPMX7 Pwneando redes informáticas por Paulino Calderon
PDF
Escribiendo firmas para el sistema de detección de versiones de Nmap
PDF
El porqué está fallando tu programa de seguridad informática por Paulino Cald...
PPTX
Pwning corporate networks in a single day by Paulino Calderon Pale
PDF
Búsqueda de vulnerabilidades en aplicaciones de Android [GuadalajaraCON 2013]
PDF
RoomCloud Booking Engine
PPT
Codathlon Google App Engine
PPTX
Internal Combustion Engines - Construction and Working (All you need to know,...
PDF
Tk03 Google App Engine Fr
PDF
DNUG2015 Frühjahrskonferenz: Brücken bauen, Grenzen überwinden: Domino im Dia...
PPTX
Google App Engine - INTRO
PDF
App engine
PDF
CAP 4: SEO - Optimizacion de Contenido
PPT
Presentacion introduccion ibm file net p8 v10
PDF
CAP 3: SEO - Keywords Research
PDF
Nuxeo WebEngine : Etude de cas
Pentesting 101 por Paulino Calderon
Taller: Exploración de redes con Nmap
Dragonjarcon2015 - ¿Cómo programar aplicaciones seguras? por Paulino Calderon...
CPMX7 Pwneando redes informáticas por Paulino Calderon
Escribiendo firmas para el sistema de detección de versiones de Nmap
El porqué está fallando tu programa de seguridad informática por Paulino Cald...
Pwning corporate networks in a single day by Paulino Calderon Pale
Búsqueda de vulnerabilidades en aplicaciones de Android [GuadalajaraCON 2013]
RoomCloud Booking Engine
Codathlon Google App Engine
Internal Combustion Engines - Construction and Working (All you need to know,...
Tk03 Google App Engine Fr
DNUG2015 Frühjahrskonferenz: Brücken bauen, Grenzen überwinden: Domino im Dia...
Google App Engine - INTRO
App engine
CAP 4: SEO - Optimizacion de Contenido
Presentacion introduccion ibm file net p8 v10
CAP 3: SEO - Keywords Research
Nuxeo WebEngine : Etude de cas
Publicidad

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

PDF
Curso Virtual de Nmap
PDF
Vip genial fantastico 23 pags imprimir clase 64498987-uso-de-la-herramienta-nmap
PDF
Curso Virtual de Nmap 2019
PPTX
Escaneo de puertos clase 2 complemento d 28 02-13
PDF
Hacking ético con herramientas Python
PDF
Uso del escáner de puertos nmap
PDF
Taller Kali Linux3: Rastreando Informacion y Objetivos -HackMadrid ene13
PDF
Pucela testingdays testing_en_php
PDF
PDF
Scripting para Pentesters v1.0
PDF
Monitorización En OpenSolaris
PDF
Webinar Gratuito: "Zenmap para Pentesting"
PDF
PDF
uso de NMAP-1 en kali linux y ubunto.pdf
PDF
Desarrollo de apps móviles con Apache Cordova
ODP
Experiencia en el uso de software libre en administración de sistemas
PDF
Taller
PDF
Practica 3 nmap entregable
PPT
Maitaining access
PDF
SecAdmin 2019: ZAP Proxy: Mucho más que una herramienta de "one-click hack"
Curso Virtual de Nmap
Vip genial fantastico 23 pags imprimir clase 64498987-uso-de-la-herramienta-nmap
Curso Virtual de Nmap 2019
Escaneo de puertos clase 2 complemento d 28 02-13
Hacking ético con herramientas Python
Uso del escáner de puertos nmap
Taller Kali Linux3: Rastreando Informacion y Objetivos -HackMadrid ene13
Pucela testingdays testing_en_php
Scripting para Pentesters v1.0
Monitorización En OpenSolaris
Webinar Gratuito: "Zenmap para Pentesting"
uso de NMAP-1 en kali linux y ubunto.pdf
Desarrollo de apps móviles con Apache Cordova
Experiencia en el uso de software libre en administración de sistemas
Taller
Practica 3 nmap entregable
Maitaining access
SecAdmin 2019: ZAP Proxy: Mucho más que una herramienta de "one-click hack"

Más de Websec México (20)

PDF
PwnedCon - Programación segura [Mariano Marino]
PDF
PwnedCon - RaceConditions [Mariano Marino]
PDF
PwnedCon - Taller: FlipperZero 101 [Mariano Marino]
PPTX
Ciberseguridad durante la pandemia [Paulino Calderon]
PPTX
OWASP IoTGoat - Enseñando a desarrolladores IoT a crear productos seguros - P...
PDF
Estadisticas de redes 802.11 en Mexico (2013) por Paulino Calderon
PPTX
Derrotando a changos con scanners [Paulino Calderon]
PPTX
Old fox new tricks malicious macros are back
PDF
Explotación de vulnerabilidades recientes de Windows - Agosto 2017
PDF
Mi experiencia en el programa Google Summer of Code
PPTX
Explotación práctica de señales de radio por Luis Colunga
PDF
Obtener contraseñas del directorio activo por hkm
PDF
OSINT vs CIBERCRIMEN por nickops
PPTX
Recuperacion de defaces con versionador Git por Alevsk
PDF
Seguridad en Bitcoin por Luis Daniel Beltran
PPTX
CPMX5 - Hacking like a boss por Roberto Salgado
PDF
CPMX5 - Las nuevas generaciones de redes por Luis Colunga
PDF
CPMX5 - (IN)seguridad en infraestructura tecnológica por Paulino Calderón
PPTX
CPMX5 - Explotación masiva de vulnerabilidades en ruteadores por Pedro Joaquín
PDF
Técnicas de escaneo masivo - 11/2013
PwnedCon - Programación segura [Mariano Marino]
PwnedCon - RaceConditions [Mariano Marino]
PwnedCon - Taller: FlipperZero 101 [Mariano Marino]
Ciberseguridad durante la pandemia [Paulino Calderon]
OWASP IoTGoat - Enseñando a desarrolladores IoT a crear productos seguros - P...
Estadisticas de redes 802.11 en Mexico (2013) por Paulino Calderon
Derrotando a changos con scanners [Paulino Calderon]
Old fox new tricks malicious macros are back
Explotación de vulnerabilidades recientes de Windows - Agosto 2017
Mi experiencia en el programa Google Summer of Code
Explotación práctica de señales de radio por Luis Colunga
Obtener contraseñas del directorio activo por hkm
OSINT vs CIBERCRIMEN por nickops
Recuperacion de defaces con versionador Git por Alevsk
Seguridad en Bitcoin por Luis Daniel Beltran
CPMX5 - Hacking like a boss por Roberto Salgado
CPMX5 - Las nuevas generaciones de redes por Luis Colunga
CPMX5 - (IN)seguridad en infraestructura tecnológica por Paulino Calderón
CPMX5 - Explotación masiva de vulnerabilidades en ruteadores por Pedro Joaquín
Técnicas de escaneo masivo - 11/2013

Último (20)

DOCX
Zarate Quispe Alex aldayir aplicaciones de internet .docx
PDF
Diapositiva proyecto de vida, materia catedra
PPTX
Power Point Nicolás Carrasco (disertación Roblox).pptx
PDF
Plantilla para Diseño de Narrativas Transmedia.pdf
PPTX
RAP01 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
PDF
Estrategia de apoyo tecnología miguel angel solis
PDF
SAP Transportation Management para LSP, TM140 Col18
PPTX
Propuesta BKP servidores con Acronis1.pptx
PDF
CyberOps Associate - Cisco Networking Academy
PDF
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
PDF
MÓDULO DE CALOR DE GRADO DE MEDIO DE FORMACIÓN PROFESIONAL
PPT
Que son las redes de computadores y sus partes
PPTX
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
PPTX
COMO AYUDAN LAS TIC EN LA EDUCACION SUPERIOR.pptx
PDF
clase auditoria informatica 2025.........
PPT
El-Gobierno-Electrónico-En-El-Estado-Bolivia
PDF
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
PDF
Liceo departamental MICRO BIT (1) 2.pdfbbbnn
PPTX
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
PPTX
historia_web de la creacion de un navegador_presentacion.pptx
Zarate Quispe Alex aldayir aplicaciones de internet .docx
Diapositiva proyecto de vida, materia catedra
Power Point Nicolás Carrasco (disertación Roblox).pptx
Plantilla para Diseño de Narrativas Transmedia.pdf
RAP01 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
Estrategia de apoyo tecnología miguel angel solis
SAP Transportation Management para LSP, TM140 Col18
Propuesta BKP servidores con Acronis1.pptx
CyberOps Associate - Cisco Networking Academy
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
MÓDULO DE CALOR DE GRADO DE MEDIO DE FORMACIÓN PROFESIONAL
Que son las redes de computadores y sus partes
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
COMO AYUDAN LAS TIC EN LA EDUCACION SUPERIOR.pptx
clase auditoria informatica 2025.........
El-Gobierno-Electrónico-En-El-Estado-Bolivia
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
Liceo departamental MICRO BIT (1) 2.pdfbbbnn
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
historia_web de la creacion de un navegador_presentacion.pptx

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

  • 1. Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon Twitter: @calderpwn Email: calderon@websec.mx WWW: http://calderonpale.com GuadalajaraCON 2013 http://guadalajaracon.org http://guadalajaracon.org GuadalajaraCON Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx
  • 2. ¿Quién soy? Repositorio personal https://github.com/cldrn/nmap-nse-scripts/ Google Summer of Code 2011 https://code.google.com/p/google-summer-of-code-2011-nmap/ Nmap 6: Network Exploration and Security Auditing Cookbook http://nmap-cookbook.com http://guadalajaracon.org GuadalajaraCON Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx
  • 3. Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@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 desarrollo http://guadalajaracon.org GuadalajaraCON Temario
  • 4. Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx ● Motor de scripts que ha expandido la funcionalidad de Nmap en todos los aspectos. ● Actualmente existen más de 400 scripts (435 el día que escribí esto) en el repositorio oficial. http://guadalajaracon.org GuadalajaraCON NSE == "Nmap Scripting Engine"
  • 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 Warcraft Entre otros... Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 6. Categorías NSE AUTH - Autenticación de usuarios BROADCAST - Descubrimiento de hosts a través de peticiones "broadcast" DEFAULT - Estos scripts son ejecutados cuando usamos -sC DISCOVERY - Descubrimiento de hosts y servicios DOS - Denegación de Servicio EXPLOIT - Explotación de vulnerabilidades EXTERNAL - Dependen de un servicio externo FUZZER - Scripts para hacer fuzzing INTRUSIVE - Scripts considerados intrusivos MALWARE - Detección de malware SAFE - Scripts considerados seguros VERSION - Detección de versión avanzada VULN - Detección y explotación de vulnerabilidades Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 7. Usando NSE Para 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 Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 8. Selección avanzada de scripts Usando expresiones para seleccionar scripts granularmente: nmap -p80 --script "http-* and (not(http-brute or http- slowloris))" <objetivo> Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 9. Consejos de uso Nunca usen los dns de su ISP. Para usar los dns abiertos de 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 Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 10. Consejos de uso Usen el filtro -p si solo les interesa el resultado de cierto servicio. $nmap -p80 --script http-trace <objetivo> Si estan trabajando con scripts HTTP, cambien su user agent SIEMPRE: $nmap -p80 --script http-enum <objetivo> Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 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 y usen: cat <script> | grep @args ● No existe una función de autocompletar. ( Entren al folder de scripts y ejecuten sus escaneos desde ahí? ). Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 12. Más 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 función de autocompletar. ( Entren al folder de scripts y ejecuten sus escaneos desde ahí? ). Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 13. Más consejos de uso ● Interesantes scripts no oficiales: ○ vulscan ○ http-google-email ○ http-screenshot Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 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ón Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 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=eth0 NECESITAN USAR iface PARA QUE CORRA. Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 16. Práctica ● Descarguen e instalen un script nse no oficial ● Corran la categoría "broadcast" nmap --script broadcast -P0 Notas Comando para actualizar base de datos #nmap --script-updatedb Página con scripts no oficiales: https://secwiki.org/w/Nmap/Script_Showcase Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 17. Ataques de diccionario La categoría ”brute” contiene scripts que nos ayudan a realizar 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 Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 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.mode Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 19. Recolección de información ● Hostmap – Descubre aplicaciones web hospedadas en el mismo servidor: $nmap -p80 --script hostmap <objetivo> ● http-wordpress-enum - Enumera usuarios en instalaciones 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 Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 20. Recolección de información ● Detectar sistemas de protección mediante filtrado de tráfico como WAFs e IPS. $nmap --script http-waf-detect -p80 –script-args http-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 veces más el número de peticiones) usen el argumento: aggro ● Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 21. Recolección de información ● Detectar sistemas de protección mediante filtrado de tráfico como WAFs e IPS. $nmap --script http-waf-fingerprint -p80 <OBJETIVO> Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 22. Auditoría de configuración ● Checar si la configuración 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'" <host> ● Checar si un HTTP proxy esta abierto $nmap –script http-proxy <host> Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 23. LUA LUA scripting Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 24. Introducción a LUA ● Similar a otros scripting languages como python y ruby: $cat hola.lua #!/usr/bin/lua print("Nombre?") name = io.read() print ("Hola " .. name) Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 25. Introducción a LUA ● Documentación: http://www.lua.org/manual/5.2/manual.html Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 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 Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 27. Tablas en LUA - http-fingerprints.lua category='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 Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 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.1 Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 29. LUA: Cadenas de texto Formatear 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 calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 30. LUA: Cadenas de texto Regresar sub cadenas de texto. string.sub(texto, offset_inicio, offset_fin) string.sub(”hola”, 2) ola string.sub(”hola”, 2, 3) ol Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 31. LUA: Cadenas de texto Substituir cadenas de texto string.gsub(texto, patron, reemplazo) Reemplazar null bytes por comas. string.gsub(texto, ”%z”, ””) Cambiar la primera letra a mayúsuculas string.gsub("%a", string.upper, 1) Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 32. Práctica: Cadenas de texto Desarrolla un script en LUA que genere un User Agent aleatorio. Notas math.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 calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 33. Patrones de texto Detectan 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 calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 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 Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 35. Capturas de texto Permiten extraer información de cadenas de texto usando patrones. >print(string.find("CONFIG<user>admin</user>", "<user>(.*)</user>")) 7 24 admin http-majordomo2-dirtraversal: _, _, rfile_content = string.find(response.body, '<pre>(.*)<!%-%- Majordomo help_foot format file %-%->') Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 36. Capturas de texto function 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_links end Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 37. Desarrollo NSE Nmap Scripting Engine Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 38. Introducción a desarrollo NSE Desarrollar tus propios scripts NSE es muy sencillo. Envia tus scripts a la lista de correo de desarrollo de Nmap: dev@insecure.org 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 calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 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-trace Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 40. Librerías NSE Para incluir librerías se usa ”require”: local http = require ”http” Entre las librerías más útiles están: ● http ● creds ● target ● packet ● brute Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 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 Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 42. Reglas de ejecución Todos 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 calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 43. Ejemplos de reglas de ejecución Existen 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 sería: portrule = shortport.http Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 44. Ejemplos de reglas de ejecución Hostrule para siempre ejecutar el script: hostrule = function() return true end Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 45. Reglas de pre-ejecución Checando 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 calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 46. Plantilla NSE description = [[ ]] --- -- @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) end Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 47. Librería "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 calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 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 un alias 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 Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 49. Práctica: Encontrando webcams Existe 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 calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 50. 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 aún). Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 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 estructurado de scripts. Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 52. Datos de salida de NSE con soporte XML ● Al usar la función 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.ip output_tab.hosts = domains return output_tab Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 53. Datos de salida de NSE con soporte XML NSE: | test: | ip: 127.0.0.1 |_ hosts: localhost XML: <script id="test" output="..."> <elem key="ip">127.0.0.1</elem> <elem key="hosts">localhost</elem> </script> Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 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 Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 55. Reporte de vulnerabilidades La librería "vulns" fue escrita para ayudarnos a reportar correctamente vulnerabilidades encontradas con NSE. La función de generar reportes construye automáticamente un reporte con un formato específico en base a los campos asignados. Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 56. Reporte de vulnerabilidades dns-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 calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 57. Reporte de vulnerabilidades La 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 calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 58. Reporte de vulnerabilidades La librería tiene una variable que lleva el registro del estado de la vulnerabilidad encontrada: ● EXPLOITABLE ● VULNERABLE ● NOT_VULN Es nuestra responsabilidad asignarlo durante la ejecución: vuln.state = vulns.STATE.VULN Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 59. Reporte de vulnerabilidades 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) Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 60. Networking I/O NSE tiene acceso a la librería de sockets de Nmap que ofrece paralelismo transparente por medio de un API que usa 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-networkio Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 61. Networking I/O Modems Huawei HG530x y HG520x ( posiblemente otros también ) revelan información sensible si se envia un paquete UDP especial a puerto 43690. ¿Qué tan sensible? ● Firmware version ● MAC address ● Dirección IP local y remota ● Modelo ● Usuario y password PPPoE Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 62. huawei-udp-info Usamos un paquete UDP especialmente diseñado e imprimimos 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-disclosure Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 63. huawei-udp-info Regla de ejecución portrule = shortport.portnumber(43690, "udp", {"open", "open|filtered","filtered"}) Argumentos de shortport.portnumber: portnumber(puerto,protocolo,estados) Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx
  • 64. huawei-udp-info 1. Crea un socket local socket = nmap.new_socket("udp") 2. Configura el tiempo de espera socket:set_timeout(tonumber(timeout)) 3. Haciendo la conexión local status = socket:connect(ip,puerto, "udp") if (not(status)) then return end Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 65. huawei-udp-info status = 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 calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 66. huawei-udp-info -- PORT STATE SERVICE REASON -- 43690/udp open|filtered unknown no-response -- |_huawei5xx-udp-info: |x10||||||||<Firmware version>|||||||||||||||||||||||||||||||<MAC addr>|||<Software version>||||||||||||||||||||||||||||||||||||||||||||| <local ip>|||||||||||||||||||<remote ip>||||||||||||||||||<model>|||||||||||||||<pppoe user>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| |||||||<pppoepassword>||||||||||||||||||||||||||||||||||||||||||||||||||||||| |||||||||||||||||||||||||||||||||||||||||||x01|||||||||||||||||||||||||||||||||||||||||||| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 67. Paralelismo Usemos algunas análogias para definir terminos: ○ Hilos ( Co-rutina en LUA ) -> proceso. ○ Un script -> ejecutable. Durante la ejecución los scripts son "detenidos" si hay llamadas a operaciones de redes. Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 68. Paralelismo Iniciando un thread worker_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 mutex Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 69. Paralelismo ○ Nos sirve cuando necesitamos paralelizar conexiones usando sockets. ○ No hay que preocuparse por sincronía de memoria. ○ También cuenta con conditional variables para sincronizar la ejecución. Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 70. http-iis-shortname-dos Práctica para casa: Actualizar el script para que soporte paralelismo. Práctica para casa #2: Implementar hilo monitor que actualice el estado del host ( abajo o arriba ) Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 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 verbose sea menor a nivel 2 ● Usar funciones de la librería Nmap cada que sea posible. Desarrollo NSE (Nmap Scripting Engine) Paulino Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 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 Calderon calderon@websec.mx http://guadalajaracon.org GuadalajaraCON
  • 73. Desarrollo NSE ( Nmap Scripting Engine) Paulino Calderon @calderpwn http://calderonpale.com GuadalajaraCON 2013 http://guadalajaracon.org