Los 5 scripts más intrusivos y avanzados de Nmap que debería conocer

Nmap

Nmap es más poderoso de lo que crees. Con algunas secuencias de comandos, podemos extender su funcionalidad más allá de un simple escáner de puertos y comenzar a identificar detalles sobre los servidores de destino que los administradores del sistema no quieren que sepamos.

Posiblemente la herramienta de reconocimiento más popular y conocida actualmente disponible en el mundo del hacking, Nmap, ha sido tratada varias veces antes en este blog.

Este artículo asume que los lectores tienen cierta experiencia con los conceptos básicos de Nmap. Estaremos revisando los puertos 80 y 443 ( -p80,443 ) con la mayoría de los comandos, ya que estos son puertos de servidor web comunes. También me ocuparé de las funciones NSE de Nmap con la opción --script.

Más conocida por su capacidad para digitalizar con precisión puertos en servidores web, las funcionalidades NSE de Nmap lo convierten en una herramienta extremadamente poderosa y multipropósito, escalando mucho más allá de un escáner de puerto ordinario. En esta serie de Nmap de varias partes, mostraré algunas de sus capacidades más avanzadas para descubrir agresivamente páginas de errores del servidor web, huellas dactilares de firewall de aplicaciones web, subdominios y extraer metadatos de fotos.

Descargo de responsabilidad: Los scripts intrusivos de Nmap utilizan recursos significativos (CPU y ancho de banda) en el servidor web objetivo y pueden provocar que se bloquee, interrumpa o inflija involuntariamente ataques de denegación de servicio. Según el alcance de su compromiso de prueba de penetración, es posible que un empleador no lo permita. Usen los siguientes scripts con precaución.

· Actualización de Nmap

Mantener la herramienta actualizada es algo primordial, para eso usaremos el comando según corresponda en nuestra distribución GNU/Linux:

#ArchLinux y derivadas
pacman -Syu nmap

#Debian, Kali Linux, Ubuntu, Parrot Security
apt-get update && apt-get install nmap 

Para comprobar que se haya instalado, lo verificamos con el comando nmap --version

 ➤➤➤➤ ▶ nmap --version
Nmap version 7.70 ( https://nmap.org )
Platform: x86_64-unknown-linux-gnu
Compiled with: nmap-liblua-5.3.3 openssl-1.1.0h libssh2-1.8.0 libz-1.2.11 libpcre-8.42 nmap-libpcap-1.7.3 nmap-libdnet-1.12 ipv6
Compiled without:
Available nsock engines: epoll poll select

Para ver todas las opciones basta con nmap --help

[email protected] ~ ->
 ➤➤➤➤ ▶ nmap --help
Nmap 7.70 ( https://nmap.org )
Usage: nmap [Scan Type(s)] [Options] {target specification}
TARGET SPECIFICATION:
  Can pass hostnames, IP addresses, networks, etc.
  Ex: scanme.nmap.org, microsoft.com/24, 192.168.0.1; 10.0.0-255.1-254
  -iL <inputfilename>: Input from list of hosts/networks
  -iR <num hosts>: Choose random targets
  --exclude <host1[,host2][,host3],...>: Exclude hosts/networks
  --excludefile <exclude_file>: Exclude list from file
HOST DISCOVERY:
  -sL: List Scan - simply list targets to scan
  -sn: Ping Scan - disable port scan
  -Pn: Treat all hosts as online -- skip host discovery
  -PS/PA/PU/PY[portlist]: TCP SYN/ACK, UDP or SCTP discovery to given ports
  -PE/PP/PM: ICMP echo, timestamp, and netmask request discovery probes
  -PO[protocol list]: IP Protocol Ping
  -n/-R: Never do DNS resolution/Always resolve [default: sometimes]
  --dns-servers <serv1[,serv2],...>: Specify custom DNS servers
  --system-dns: Use OS's DNS resolver
  --traceroute: Trace hop path to each host
SCAN TECHNIQUES:
  -sS/sT/sA/sW/sM: TCP SYN/Connect()/ACK/Window/Maimon scans
  -sU: UDP Scan
  -sN/sF/sX: TCP Null, FIN, and Xmas scans
  --scanflags <flags>: Customize TCP scan flags
  -sI <zombie host[:probeport]>: Idle scan
  -sY/sZ: SCTP INIT/COOKIE-ECHO scans
  -sO: IP protocol scan
  -b <FTP relay host>: FTP bounce scan
PORT SPECIFICATION AND SCAN ORDER:
  -p <port ranges>: Only scan specified ports
    Ex: -p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9
  --exclude-ports <port ranges>: Exclude the specified ports from scanning
  -F: Fast mode - Scan fewer ports than the default scan
  -r: Scan ports consecutively - don't randomize
  --top-ports <number>: Scan <number> most common ports
  --port-ratio <ratio>: Scan ports more common than <ratio>
SERVICE/VERSION DETECTION:
  -sV: Probe open ports to determine service/version info
  --version-intensity <level>: Set from 0 (light) to 9 (try all probes)
  --version-light: Limit to most likely probes (intensity 2)
  --version-all: Try every single probe (intensity 9)
  --version-trace: Show detailed version scan activity (for debugging)
SCRIPT SCAN:
  -sC: equivalent to --script=default
  --script=<Lua scripts>: <Lua scripts> is a comma separated list of
           directories, script-files or script-categories
  --script-args=<n1=v1,[n2=v2,...]>: provide arguments to scripts
  --script-args-file=filename: provide NSE script args in a file
  --script-trace: Show all data sent and received
  --script-updatedb: Update the script database.
  --script-help=<Lua scripts>: Show help about scripts.
           <Lua scripts> is a comma-separated list of script-files or
           script-categories.
OS DETECTION:
  -O: Enable OS detection
  --osscan-limit: Limit OS detection to promising targets
  --osscan-guess: Guess OS more aggressively
TIMING AND PERFORMANCE:
  Options which take <time> are in seconds, or append 'ms' (milliseconds),
  's' (seconds), 'm' (minutes), or 'h' (hours) to the value (e.g. 30m).
  -T<0-5>: Set timing template (higher is faster)
  --min-hostgroup/max-hostgroup <size>: Parallel host scan group sizes
  --min-parallelism/max-parallelism <numprobes>: Probe parallelization
  --min-rtt-timeout/max-rtt-timeout/initial-rtt-timeout <time>: Specifies
      probe round trip time.
  --max-retries <tries>: Caps number of port scan probe retransmissions.
  --host-timeout <time>: Give up on target after this long
  --scan-delay/--max-scan-delay <time>: Adjust delay between probes
  --min-rate <number>: Send packets no slower than <number> per second
  --max-rate <number>: Send packets no faster than <number> per second
FIREWALL/IDS EVASION AND SPOOFING:
  -f; --mtu <val>: fragment packets (optionally w/given MTU)
  -D <decoy1,decoy2[,ME],...>: Cloak a scan with decoys
  -S <IP_Address>: Spoof source address
  -e <iface>: Use specified interface
  -g/--source-port <portnum>: Use given port number
  --proxies <url1,[url2],...>: Relay connections through HTTP/SOCKS4 proxies
  --data <hex string>: Append a custom payload to sent packets
  --data-string <string>: Append a custom ASCII string to sent packets
  --data-length <num>: Append random data to sent packets
  --ip-options <options>: Send packets with specified ip options
  --ttl <val>: Set IP time-to-live field
  --spoof-mac <mac address/prefix/vendor name>: Spoof your MAC address
  --badsum: Send packets with a bogus TCP/UDP/SCTP checksum
OUTPUT:
  -oN/-oX/-oS/-oG <file>: Output scan in normal, XML, s|<rIpt kIddi3,
     and Grepable format, respectively, to the given filename.
  -oA <basename>: Output in the three major formats at once
  -v: Increase verbosity level (use -vv or more for greater effect)
  -d: Increase debugging level (use -dd or more for greater effect)
  --reason: Display the reason a port is in a particular state
  --open: Only show open (or possibly open) ports
  --packet-trace: Show all packets sent and received
  --iflist: Print host interfaces and routes (for debugging)
  --append-output: Append to rather than clobber specified output files
  --resume <filename>: Resume an aborted scan
  --stylesheet <path/URL>: XSL stylesheet to transform XML output to HTML
  --webxml: Reference stylesheet from Nmap.Org for more portable XML
  --no-stylesheet: Prevent associating of XSL stylesheet w/XML output
MISC:
  -6: Enable IPv6 scanning
  -A: Enable OS detection, version detection, script scanning, and traceroute
  --datadir <dirname>: Specify custom Nmap data file location
  --send-eth/--send-ip: Send using raw ethernet frames or IP packets
  --privileged: Assume that the user is fully privileged
  --unprivileged: Assume the user lacks raw socket privileges
  -V: Print version number
  -h: Print this help summary page.
EXAMPLES:
  nmap -v -A scanme.nmap.org
  nmap -v -sn 192.168.0.0/16 10.0.0.0/8
  nmap -v -iR 10000 -Pn -p 80
SEE THE MAN PAGE (https://nmap.org/book/man.html) FOR MORE OPTIONS AND EXAMPLES

· Detección de firewall de aplicaciones web

Un firewall de aplicaciones web, acortado a WAF, detecta y bloquea la transmisión de tráfico malicioso hacia y desde el servidor web. Los WAF se utilizan con mayor frecuencia para ayudar a proteger los sitios web contra ataques de inyección de SQL, inclusión de archivos y cross site scripting (XSS).

Un servidor bien protegido por un WAF podría significar que todas las posibles vulnerabilidades basadas en la web se vean frustradas. Por el contrario, un servidor desprotegido por cualquier tipo de WAF podría ser desastroso para los administradores del sistema que intentan defenderse contra los piratas informáticos. Nuestra capacidad para detectar firewalls de aplicaciones web en servidores web de destino es crucial como pentesters.

El script http-waf-detect está diseñado para ayudarnos a conocer la presencia de un firewall de aplicaciones web. Probará el servidor web objetivo con varias solicitudes. Primero, enviará una solicitud web normal y registrará la respuesta del servidor. Luego, enviará otra solicitud con una carga útil (URL mal formada) y comparará las respuestas. Este método de detección de WAF está lejos de ser perfecto y puede variar según el tipo de servidor web y el producto WAF.

Para habilitar la secuencia de comandos http-waf-detect , use el siguiente comando nmap.

nmap -p80,443 --script http-waf-detect --script-args="http-waf-detect.aggro,http-waf-detect.detectBodyChanges" target.com

Aquí usamos el argumento http-waf-detect.aggro , que instruye a Nmap para probar todos sus vectores de ataque incorporados para activar los servidores WAF. También se habilita el argumento http-waf-detect.detectBodyChanges, que busca cambios en el cuerpo de las solicitudes HTTP y aumenta aún más la probabilidad de detección. 

 ➤➤➤➤ ▶ nmap -p80,443 --script http-waf-detect --script-args="http-waf-detect.aggro,http-waf-detect.detectBodyChanges" securityhacklabs.net
Starting Nmap 7.70 ( https://nmap.org ) at 2018-09-19 10:10 -05
Nmap scan report for securityhacklabs.net (104.28.26.126)
Host is up (0.041s latency).
Other addresses for securityhacklabs.net (not scanned): 104.28.27.126

PORT    STATE SERVICE
80/tcp  open  http
443/tcp open  https
| http-waf-detect: IDS/IPS/WAF detected:
|_securityhacklabs.net:443/?p4yl04d=hostname%00

Nmap done: 1 IP address (1 host up) scanned in 26.18 seconds

Como podemos ver en el resultado anterior, Nmap ha detectado algún tipo de firewall de aplicación web presente en el servidor web objetivo. Hay muchos productos WAF comerciales disponibles para los administradores. Para saber qué WAF está en producción, necesitaremos utilizar un script Nmap diferente.

 

· Detección de Huellas Digitales (fingerprint de Firewall de Aplicación Web

Conocer qué WAF está en uso puede ser importante ya que cada WAF tiene sus propios métodos predefinidos de limitación de velocidad y detección. Identificar el tipo de WAF puede ayudar a los pentester a evadir la detección (o permanecer bajo el radar) si podemos aprender de manera preventiva las limitaciones de los WAF y los desencadenantes de detección.

La script Nmap http-waf-fingerprint está diseñado para ayudarnos a conocer el firewall de la aplicación web exacta en uso en un servidor web objetivo. También intentará identificar su tipo y número de versión exacta.

En su forma más simple, no necesitamos incluir ningún --script-args para que funcione este script Nmap.

nmap -p80,443 --script http-waf-fingerprint target.com

Ejemplo:

 ➤➤➤➤ ▶ nmap -p80,443 --script http-waf-fingerprint securityhacklabs.net
Starting Nmap 7.70 ( https://nmap.org ) at 2018-09-19 10:17 -05
Nmap scan report for securityhacklabs.net (104.28.26.126)
Host is up (0.043s latency).
Other addresses for securityhacklabs.net (not scanned): 104.28.27.126

PORT    STATE SERVICE
80/tcp  open  http
| http-waf-fingerprint: 
|   Detected WAF
|_    Cloudflare
443/tcp open  https

Nmap done: 1 IP address (1 host up) scanned in 10.07 seconds

Como puede ver arriba, nuestro sitio web en particular está utilizando el popular servicio Cloudflare como front-end para proteger su sitio web de los atacantes.

Podemos mejorar aún más la capacidad de Nmap para detectar tipos y versiones de WAF utilizando el argumento http-waf-fingerprint.intensive . Esto prolongará el tiempo de exploración y también aumentará la cantidad de ruido (tráfico web) generado por el script.

nmap -p80,443 --script http-waf-fingerprint --script-args http-waf-fingerprint.intensive=1 website.com

· Encuentra errores HTTP

Los códigos de estado del Protocolo de transferencia de hipertexto (HTTP), también conocidos como "códigos de respuesta", son emitidos por los servidores web a nuestros navegadores web cuando realizamos solicitudes. Estos códigos son una forma de que los servidores web comuniquen los errores a los administradores del servidor, desarrolladores web y usuarios finales por igual.

Los códigos de estado HTTP se dividen en varias categorías o "clases". El primer dígito define las categorías y los siguientes dígitos son subcategorías, específicas para diferentes tipos de mensajes de error. Por ejemplo, las categorías 4xx son una clase de errores específicos de las solicitudes HTTP que el servidor web no puede cumplir. Como intentar ver una página web que no existe. Eso se define como un estado "404 no encontrado", probablemente uno de los códigos de estado más conocidos en Internet.

Los códigos de estado son especialmente útiles para un pentester porque nos ayudan a identificar partes rotas, mal formadas y mal configuradas de un servidor que podrían estar filtrando información sensible, o pueden permitir alguna forma explotable de controlar aspectos del servidor.

Según Wikipedia, a continuación hay una lista de las cinco categorías de código de estado HTTP. Los evaluadores de penetración de aplicaciones web deben familiarizarse con todos los códigos de estado y sus definiciones.

  • 1xx (informativo): se recibió la solicitud, proceso continuo
  • 2xx ( Correcto ): la solicitud fue recibida, entendida y aceptada satisfactoriamente
  • 3xx (Redirección): se deben tomar medidas adicionales para completar la solicitud
  • 4xx (Error de cliente): la solicitud contiene mala sintaxis o no se puede cumplir
  • 5xx (Error de servidor): el servidor no pudo cumplir una solicitud aparentemente válida

 El script Nmap de http-errors se puede usar para identificar códigos de estado interesantes para una mayor investigación.

nmap -p80,443 --script http-errors target.com

 

Simplemente llamando al script http-errors es suficiente para comenzar. Los puertos 80 y 443 son puertos del servidor web de comandos, pero se pueden modificar para satisfacer sus necesidades.

 ➤➤➤➤ ▶  nmap -p80,443 --script http-errors securityhacklabs.net
Starting Nmap 7.70 ( https://nmap.org ) at 2018-09-19 10:33 -05
Nmap scan report for securityhacklabs.net (104.28.26.126)
Host is up (0.040s latency).
Other addresses for securityhacklabs.net (not scanned): 104.28.27.126

PORT    STATE SERVICE
80/tcp  open  http
|_http-errors: Couldn't find any error pages.
443/tcp open  https
|_http-errors: Couldn't find any error pages.

Nmap done: 1 IP address (1 host up) scanned in 55.62 seconds

 

A continuación se muestra un comando más refinado que incluye varios argumentos de script.

nmap -vv -p80,443 --script http-errors --script-args "httpspider.url=/docs/,httpspider.maxpagecount=3,httpspider.maxdepth=1" target.com

Este script Nmap particular utiliza la biblioteca httpspider, por lo que podemos usar argumentos como httpspider.url , httpspider.maxpagecount y httpspider.maxdepth para refinar nuestro escaneo a URL específicas y definir cuántas páginas queremos que Nmap rastree antes de detenerse.

 

· Encuentra servidores compartidos y nuevos

Los subdominios a menudo se utilizan para alojar sitios web adicionales para un subconjunto específico de usuarios. Por ejemplo, nuestra biblioteca (biblio.securityhacklabs.net) es uno de los subdominios en la red de sitios web Security Hack Labs. Los subdominios populares incluyen m.facebook.com, movil.twitter.com y developer.github.com.

Estos subdominios son útiles para los piratas informáticos porque el subdominio y el dominio principal pueden alojarse en servidores privados virtuales completamente diferentes, en diferentes partes del mundo, y pueden no tener el mismo grado de seguridad.

El script dns-brute integrado en Nmap está diseñada para enumerar subdominios y sus direcciones IP de servidor correspondientes.

 ➤➤➤➤ ▶ nmap -p80,443 --script dns-brute securityhacklabs.net
Starting Nmap 7.70 ( https://nmap.org ) at 2018-09-19 10:45 -05
Nmap scan report for securityhacklabs.net (104.28.27.126)
Host is up (0.048s latency).
Other addresses for securityhacklabs.net (not scanned): 104.28.26.126

PORT    STATE SERVICE
80/tcp  open  http
443/tcp open  https

Host script results:
| dns-brute: 
|   DNS Brute-force hostnames: 
|     chat.securityhacklabs.net - 104.28.26.126
|     chat.securityhacklabs.net - 104.28.27.126
|     www.securityhacklabs.net - 104.28.26.126
|     www.securityhacklabs.net - 104.28.27.126
|     chat.securityhacklabs.net - 2400:cb00:2048:1:0:0:681c:1a7e
|     chat.securityhacklabs.net - 2400:cb00:2048:1:0:0:681c:1b7e
|     www.securityhacklabs.net - 2400:cb00:2048:1:0:0:681c:1a7e
|_   www.securityhacklabs.net - 2400:cb00:2048:1:0:0:681c:1b7e

Nmap done: 1 IP address (1 host up) scanned in 16.08 seconds

 

Nuestro sitio web en particular tiene varios subdominios configurados tanto en IPv4 como en IPv6. En este punto, un pentester puede expandir aún más su reconocimiento a los servidores recién descubiertos bajo este sitio web.

A continuación se muestra un comando dns-brute que presenta varios --script-args.

nmap -p80,443 --script dns-brute --script-args dns-brute.threads=25,dns-brute.hostlist=~/Desktop/custom-subdomain-wordlist.txt target.com

 

De forma predeterminada, dns-brute escaneará utilizando cinco subprocesos concurrentes. Podemos aumentar o disminuir este valor con dns-brute.threads. Según el tipo de servidor web, muchos subprocesos bloquean un servidor o actúan como una denegación de servicio, lo que hace que el sitio web sea lento o no responda a otros usuarios. Ajuste este valor con precaución.

Dns-brute intentará alrededor de 125 subdominios populares. Podemos usar listas de subdominio personalizadas con el argumento dns-brute.hostlist.

· Extraiga los datos EXIF ​​de las fotos

El archivo de imagen intercambiable, más conocido como EXIF, es información almacenada en JPEG, PNG, PDF y muchos más tipos de archivos. Estos datos integrados a veces pueden revelar información interesante, incluidas marcas de tiempo, información del dispositivo y coordenadas de GPS. La mayoría de los sitios web aún no limpian adecuadamente los datos EXIF ​​de las imágenes, lo que los expone a ellos mismos o a sus usuarios.

Como probadores de penetración, saber qué tipo de dispositivo está usando un objetivo nos ayudará a determinar qué tipo(s) de payloads generar. Un ejemplo clásico de los datos EXIF ​​utilizados para atrapar un sombrero negro es el arresto de Higinio Ochoa. Los agentes del FBI extrapolaron la ubicación geográfica de su novia utilizando los datos del GPS encontrados en una foto que Higinio cargó en Internet.

El script http-exif-spider de Nmap se puede usar para extraer datos EXIF ​​interesantes de fotos encontradas en sitios web. Tal script no es útil contra sitios como Instagram, Twitter y Facebook. Los principales sitios web eliminan datos EXIF ​​cuando los usuarios cargan nuevas fotos. Sin embargo, los blogs personales, las pequeñas empresas y las organizaciones corporativas pueden no tomar fuertes precauciones de seguridad o monitorear lo que los empleados publican en línea. No es raro encontrar datos de GPS en fotos.

 ➤➤➤➤ ▶ nmap -p80,443 --script http-exif-spider securityhacklabs.net
Starting Nmap 7.70 ( https://nmap.org ) at 2018-09-19 10:56 -05
Nmap scan report for securityhacklabs.net (104.28.26.126)
Host is up (0.038s latency).
Other addresses for securityhacklabs.net (not scanned): 104.28.27.126

PORT    STATE SERVICE
80/tcp  open  http
443/tcp open  https

Nmap done: 1 IP address (1 host up) scanned in 14.76 seconds

En nuestro sitio web, todos los metadatos son limpiados y rellenados con basura al momento de subir una imagen. Veamos un sitio que no hace lo mismo:

 ➤➤➤➤ ▶ nmap -p80,443 --script http-exif-spider targetWebsite.com

Starting Nmap 7.70 ( https://nmap.org )
Nmap scan report for targetWebsite.com
Host is up (0.12s latency).

PORT    STATE SERVICE
80/tcp  open  http
| http-exif-spider:
|   http://targetWebsite.com:80/image_10012.jpg
|     Make: NIKON CORPORATION
|     Model: NIKON D4
|     Date: 2017:04:26 21:22:49
|   http://targetWebsite.com:80/ips.jpg
|     Make: Samsung
|     Model: Galaxy S6
|_    Date: 2017:02:24 23:37:14
443/tcp open  https
| http-exif-spider:
|   https://targetWebsite.com:443/clifton.jpg
|     Make: Canon
|_    Model: Canon EOS 5D Mark III

Nmap done: 1 IP address (1 host up) scanned in 30.43 seconds

Podemos ver que el objetivo anterior es usar un teléfono Android y una variedad de cámaras digitales. Ahora podemos (con cierto grado de certeza) generar un payload específico de Android y enviarla al objetivo para comprometer aún más sus dispositivos, cuentas y redes.

Al intentar extraer datos EXIF ​​de fotos grandes, Nmap puede generar un mensaje de error que dice "Current http cache size exceeds max size". Esto es Nmap que nos dice que la foto es demasiado grande y excede el valor máximo de tamaño de archivo predeterminado. Use el argumento http.max-cache-size y aumente el valor según sea necesario de la manera:

 nmap -p80,443 --script http-exif-spider --script-args="http.max-cache-size=99999999" target.com

Con esto finaliza este artículo y vienen más en camino. Síguenos en FacebookTwitterunete a nuestro chat en Discord y no olvides compartirnos en las redes sociales. También puede hacernos una donación o comprar nuestros servicios.

Acerca del autor

Especialista en Seguridad Informática bajo certificación OSCP, experto en técnicas de privacidad y seguridad en la red, desarrollador back-end, miembro de la FSF y Fundador de Security Hack Labs. Desarrollador de la distribución de hacking BlackArch Linux. Twitter: @edu4rdshl XMPP/Email: [email protected]