SlideShare a Scribd company logo
1 of 73
Download to read offline
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

More Related Content

What's hot

Diagrama de casos de uso por niveles
Diagrama de casos de uso por nivelesDiagrama de casos de uso por niveles
Diagrama de casos de uso por niveles
Jorge Angeles
 
Consultorio medico diagrama actividad
Consultorio medico diagrama actividadConsultorio medico diagrama actividad
Consultorio medico diagrama actividad
Jaziel Torres
 
Cuadro comparativo Modelos de Software.
Cuadro comparativo Modelos de Software.Cuadro comparativo Modelos de Software.
Cuadro comparativo Modelos de Software.
templarioo
 
Iptables
IptablesIptables
Iptables
cercer
 

What's hot (20)

Desarrollo de Aplicaciones Web con ASP.NET MVC5
Desarrollo de Aplicaciones Web con ASP.NET MVC5Desarrollo de Aplicaciones Web con ASP.NET MVC5
Desarrollo de Aplicaciones Web con ASP.NET MVC5
 
Understanding NMAP
Understanding NMAPUnderstanding NMAP
Understanding NMAP
 
Diagrama de casos de uso por niveles
Diagrama de casos de uso por nivelesDiagrama de casos de uso por niveles
Diagrama de casos de uso por niveles
 
Consultorio medico diagrama actividad
Consultorio medico diagrama actividadConsultorio medico diagrama actividad
Consultorio medico diagrama actividad
 
Red de Petri
Red de Petri Red de Petri
Red de Petri
 
Informe_Base de datos
Informe_Base de datos Informe_Base de datos
Informe_Base de datos
 
Web application attacks
Web application attacksWeb application attacks
Web application attacks
 
Documento Vision
Documento VisionDocumento Vision
Documento Vision
 
Diagramas y Carta estructurada
Diagramas y Carta estructuradaDiagramas y Carta estructurada
Diagramas y Carta estructurada
 
Software caja negra y caja blanca
Software caja negra y caja blancaSoftware caja negra y caja blanca
Software caja negra y caja blanca
 
Windows forms c# visual basic .net ejercicios
Windows forms c# visual basic .net ejerciciosWindows forms c# visual basic .net ejercicios
Windows forms c# visual basic .net ejercicios
 
UML
UMLUML
UML
 
Cuadro comparativo Modelos de Software.
Cuadro comparativo Modelos de Software.Cuadro comparativo Modelos de Software.
Cuadro comparativo Modelos de Software.
 
modelo vista controlador
modelo vista controladormodelo vista controlador
modelo vista controlador
 
El barbero-dormilón
El barbero-dormilónEl barbero-dormilón
El barbero-dormilón
 
Practica 1 1 De Analisis Y DiseñO De Sistemas De Informacion
Practica 1 1  De Analisis Y DiseñO De Sistemas De InformacionPractica 1 1  De Analisis Y DiseñO De Sistemas De Informacion
Practica 1 1 De Analisis Y DiseñO De Sistemas De Informacion
 
Plantilla de toma de requisitos softwarev 1.0
Plantilla de toma de requisitos softwarev 1.0Plantilla de toma de requisitos softwarev 1.0
Plantilla de toma de requisitos softwarev 1.0
 
OWASP Top 10 2021 Presentation (Jul 2022)
OWASP Top 10 2021 Presentation (Jul 2022)OWASP Top 10 2021 Presentation (Jul 2022)
OWASP Top 10 2021 Presentation (Jul 2022)
 
Iptables
IptablesIptables
Iptables
 
Hacking ético [Pentest]
Hacking ético [Pentest]Hacking ético [Pentest]
Hacking ético [Pentest]
 

Viewers also liked

Presentacion introduccion ibm file net p8 v10
Presentacion introduccion ibm file net p8 v10Presentacion introduccion ibm file net p8 v10
Presentacion introduccion ibm file net p8 v10
Javier Laguens Garcia
 

Viewers also liked (20)

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

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

Vip genial fantastico 23 pags imprimir clase 64498987-uso-de-la-herramienta-nmap
Vip genial fantastico 23 pags imprimir clase 64498987-uso-de-la-herramienta-nmapVip genial fantastico 23 pags imprimir clase 64498987-uso-de-la-herramienta-nmap
Vip genial fantastico 23 pags imprimir clase 64498987-uso-de-la-herramienta-nmap
xavazquez
 
Escaneo de puertos clase 2 complemento d 28 02-13
Escaneo de puertos clase 2 complemento d 28 02-13Escaneo de puertos clase 2 complemento d 28 02-13
Escaneo de puertos clase 2 complemento d 28 02-13
Tensor
 
Scripting para Pentesters v1.0
Scripting para Pentesters v1.0Scripting para Pentesters v1.0
Scripting para Pentesters v1.0
wcuestas
 

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

Curso Virtual de Nmap
Curso Virtual de NmapCurso Virtual de Nmap
Curso Virtual de Nmap
 
Vip genial fantastico 23 pags imprimir clase 64498987-uso-de-la-herramienta-nmap
Vip genial fantastico 23 pags imprimir clase 64498987-uso-de-la-herramienta-nmapVip genial fantastico 23 pags imprimir clase 64498987-uso-de-la-herramienta-nmap
Vip genial fantastico 23 pags imprimir clase 64498987-uso-de-la-herramienta-nmap
 
Curso Virtual de Nmap 2019
Curso Virtual de Nmap 2019Curso Virtual de Nmap 2019
Curso Virtual de Nmap 2019
 
Escaneo de puertos clase 2 complemento d 28 02-13
Escaneo de puertos clase 2 complemento d 28 02-13Escaneo de puertos clase 2 complemento d 28 02-13
Escaneo de puertos clase 2 complemento d 28 02-13
 
Hacking ético con herramientas Python
Hacking ético con herramientas PythonHacking ético con herramientas Python
Hacking ético con herramientas Python
 
Uso del escáner de puertos nmap
Uso del escáner de puertos nmapUso del escáner de puertos nmap
Uso del escáner de puertos nmap
 
Taller Kali Linux3: Rastreando Informacion y Objetivos -HackMadrid ene13
Taller Kali Linux3: Rastreando Informacion y Objetivos -HackMadrid ene13Taller Kali Linux3: Rastreando Informacion y Objetivos -HackMadrid ene13
Taller Kali Linux3: Rastreando Informacion y Objetivos -HackMadrid ene13
 
Pucela testingdays testing_en_php
Pucela testingdays testing_en_phpPucela testingdays testing_en_php
Pucela testingdays testing_en_php
 
Snortpracticas 2006
Snortpracticas 2006Snortpracticas 2006
Snortpracticas 2006
 
Scripting para Pentesters v1.0
Scripting para Pentesters v1.0Scripting para Pentesters v1.0
Scripting para Pentesters v1.0
 
Monitorización En OpenSolaris
Monitorización En OpenSolarisMonitorización En OpenSolaris
Monitorización En OpenSolaris
 
Webinar Gratuito: "Zenmap para Pentesting"
Webinar Gratuito: "Zenmap para Pentesting"Webinar Gratuito: "Zenmap para Pentesting"
Webinar Gratuito: "Zenmap para Pentesting"
 
Nmap
NmapNmap
Nmap
 
Desarrollo de apps móviles con Apache Cordova
Desarrollo de apps móviles con Apache CordovaDesarrollo de apps móviles con Apache Cordova
Desarrollo de apps móviles con Apache Cordova
 
Experiencia en el uso de software libre en administración de sistemas
Experiencia en el uso de software libre en administración de sistemasExperiencia en el uso de software libre en administración de sistemas
Experiencia en el uso de software libre en administración de sistemas
 
Taller
TallerTaller
Taller
 
Practica 3 nmap entregable
Practica 3 nmap entregablePractica 3 nmap entregable
Practica 3 nmap entregable
 
Maitaining access
Maitaining accessMaitaining access
Maitaining access
 
SecAdmin 2019: ZAP Proxy: Mucho más que una herramienta de "one-click hack"
SecAdmin 2019: ZAP Proxy: Mucho más que una herramienta de "one-click hack"SecAdmin 2019: ZAP Proxy: Mucho más que una herramienta de "one-click hack"
SecAdmin 2019: ZAP Proxy: Mucho más que una herramienta de "one-click hack"
 
HoneyCon 2020: Hacking con ZAP
HoneyCon 2020: Hacking con ZAPHoneyCon 2020: Hacking con ZAP
HoneyCon 2020: Hacking con ZAP
 

More from Websec México, S.C.

More from Websec México, S.C. (20)

Ciberseguridad durante la pandemia [Paulino Calderon]
Ciberseguridad durante la pandemia [Paulino Calderon]Ciberseguridad durante la pandemia [Paulino Calderon]
Ciberseguridad durante la pandemia [Paulino Calderon]
 
OWASP IoTGoat - Enseñando a desarrolladores IoT a crear productos seguros - P...
OWASP IoTGoat - Enseñando a desarrolladores IoT a crear productos seguros - P...OWASP IoTGoat - Enseñando a desarrolladores IoT a crear productos seguros - P...
OWASP IoTGoat - Enseñando a desarrolladores IoT a crear productos seguros - P...
 
Estadisticas de redes 802.11 en Mexico (2013) por Paulino Calderon
Estadisticas de redes 802.11 en Mexico (2013) por Paulino CalderonEstadisticas de redes 802.11 en Mexico (2013) por Paulino Calderon
Estadisticas de redes 802.11 en Mexico (2013) por Paulino Calderon
 
Derrotando a changos con scanners [Paulino Calderon]
Derrotando a changos con scanners [Paulino Calderon]Derrotando a changos con scanners [Paulino Calderon]
Derrotando a changos con scanners [Paulino Calderon]
 
Old fox new tricks malicious macros are back
Old fox new tricks malicious macros are backOld fox new tricks malicious macros are back
Old fox new tricks malicious macros are back
 
Explotación de vulnerabilidades recientes de Windows - Agosto 2017
Explotación de vulnerabilidades recientes de Windows - Agosto 2017Explotación de vulnerabilidades recientes de Windows - Agosto 2017
Explotación de vulnerabilidades recientes de Windows - Agosto 2017
 
Mi experiencia en el programa Google Summer of Code
Mi experiencia en el programa Google Summer of CodeMi experiencia en el programa Google Summer of Code
Mi experiencia en el programa Google Summer of Code
 
Explotación práctica de señales de radio por Luis Colunga
Explotación práctica de señales de radio por Luis ColungaExplotación práctica de señales de radio por Luis Colunga
Explotación práctica de señales de radio por Luis Colunga
 
Obtener contraseñas del directorio activo por hkm
Obtener contraseñas del directorio activo por hkmObtener contraseñas del directorio activo por hkm
Obtener contraseñas del directorio activo por hkm
 
OSINT vs CIBERCRIMEN por nickops
OSINT vs CIBERCRIMEN por nickopsOSINT vs CIBERCRIMEN por nickops
OSINT vs CIBERCRIMEN por nickops
 
Recuperacion de defaces con versionador Git por Alevsk
Recuperacion de defaces con versionador Git por Alevsk Recuperacion de defaces con versionador Git por Alevsk
Recuperacion de defaces con versionador Git por Alevsk
 
Seguridad en Bitcoin por Luis Daniel Beltran
Seguridad en Bitcoin por Luis Daniel BeltranSeguridad en Bitcoin por Luis Daniel Beltran
Seguridad en Bitcoin por Luis Daniel Beltran
 
CPMX5 - Hacking like a boss por Roberto Salgado
CPMX5 - Hacking like a boss por Roberto SalgadoCPMX5 - Hacking like a boss por Roberto Salgado
CPMX5 - Hacking like a boss por Roberto Salgado
 
CPMX5 - Las nuevas generaciones de redes por Luis Colunga
CPMX5 - Las nuevas generaciones de redes por Luis ColungaCPMX5 - Las nuevas generaciones de redes por Luis Colunga
CPMX5 - Las nuevas generaciones de redes por Luis Colunga
 
CPMX5 - (IN)seguridad en infraestructura tecnológica por Paulino Calderón
CPMX5 - (IN)seguridad en infraestructura tecnológica por Paulino CalderónCPMX5 - (IN)seguridad en infraestructura tecnológica por Paulino Calderón
CPMX5 - (IN)seguridad en infraestructura tecnológica por Paulino Calderón
 
CPMX5 - Explotación masiva de vulnerabilidades en ruteadores por Pedro Joaquín
CPMX5 - Explotación masiva de vulnerabilidades en ruteadores por Pedro JoaquínCPMX5 - Explotación masiva de vulnerabilidades en ruteadores por Pedro Joaquín
CPMX5 - Explotación masiva de vulnerabilidades en ruteadores por Pedro Joaquín
 
Técnicas de escaneo masivo - 11/2013
Técnicas de escaneo masivo - 11/2013Técnicas de escaneo masivo - 11/2013
Técnicas de escaneo masivo - 11/2013
 
Drive by subdomain router pharming (2012)
Drive by subdomain router pharming (2012)Drive by subdomain router pharming (2012)
Drive by subdomain router pharming (2012)
 
Hardware para hacking (2011)
Hardware para hacking (2011)Hardware para hacking (2011)
Hardware para hacking (2011)
 
Mac2wepkey (2011)
Mac2wepkey (2011)Mac2wepkey (2011)
Mac2wepkey (2011)
 

Recently uploaded

Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
241521559
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
silviayucra2
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
FagnerLisboa3
 

Recently uploaded (10)

Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 

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