hacktricks/generic-methodologies-and-resources/pentesting-network/nmap-summary-esp.md

22 KiB

Resumen de Nmap

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
``` nmap -sV -sC -O -n -oA nmapscan 192.168.0.1/24 ``` ## Parámetros

IPs a escanear

  • <ip>,<net/mask>: Indica las IPs directamente.
  • -iL <ips_file>: lista_IPs.
  • -iR <number>: Número de IPs aleatorias, se pueden excluir posibles IPs con --exclude <Ips> o --excludefile <file>.

Descubrimiento de equipos

Por defecto, Nmap lanza una fase de descubrimiento que consiste en: -PA80 -PS443 -PE -PP

  • -sL: No es invasivo, lista los objetivos haciendo solicitudes DNS para resolver nombres. Es útil para saber si, por ejemplo, www.prueba.es/24 todas las IPs son nuestros objetivos.
  • -Pn: No ping. Esto es útil si sabes que todos están activos (si no, podrías perder mucho tiempo), pero esta opción también produce falsos negativos diciendo que no están activos. Evita la fase de descubrimiento.
  • -sn : No escaneo de puertos. Después de completar la fase de reconocimiento, no escanea puertos. Es relativamente sigiloso y permite un escaneo de red pequeño. Con privilegios, envía un ACK (-PA) a 80, un SYN(-PS) a 443 y una solicitud de eco y una solicitud de marca de tiempo. Sin privilegios, siempre completa las conexiones. Si el objetivo es la red, solo utiliza ARP(-PR). Si se utiliza con otra opción, solo se descartan los paquetes de la otra opción.
  • -PR: Ping ARP. Se utiliza de forma predeterminada al analizar equipos en nuestra red, es más rápido que usar pings. Si no se desean utilizar paquetes ARP, se utiliza --send-ip.
  • -PS <ports>: Envía paquetes SYN a los puertos, si responde SYN/ACK está abierto (responde con RST para no finalizar la conexión), si responde RST está cerrado y si no responde está inaccesible. En caso de no tener privilegios, se utiliza automáticamente una conexión total. Si no se especifican puertos, se envía a 80.
  • -PA <ports>: Similar al anterior pero con ACK, combinar ambos da mejores resultados.
  • -PU <ports>: El objetivo es lo contrario, se envían a puertos que se espera que estén cerrados. Algunos firewalls solo verifican conexiones TCP. Si está cerrado, responde con "port unreachable", si responde con otro ICMP o no responde, se considera como "destination unreachable".
  • -PE, -PP, -PM : PINGS ICMP: respuesta de eco, marca de tiempo y máscara de dirección. Se envían para averiguar si el objetivo está activo.
  • -PY<ports>: Envía sondas SCTP INIT a 80 de forma predeterminada, puede responder con INIT-ACK (abierto) o ABORT (cerrado) o nada o ICMP unreachable (inactivo).
  • -PO <protocols>: Se indica un protocolo en los encabezados, de forma predeterminada 1 (ICMP), 2 (IGMP) y 4 (Encap IP). Para los protocolos ICMP, IGMP, TCP (6) y UDP (17) se envían los encabezados del protocolo, para el resto solo se envía el encabezado IP. El propósito de esto es que, debido a la deformación de los encabezados, se respondan Protocol unreachable o respuestas del mismo protocolo para saber si está activo.
  • -n: Sin DNS.
  • -R: Siempre DNS.

Técnicas de escaneo de puertos

  • -sS: No completa la conexión, por lo que no deja rastro, muy bueno si se puede utilizar (con privilegios). Es el que se utiliza de forma predeterminada.
  • -sT: Completa la conexión, por lo que deja un rastro, pero se puede utilizar con seguridad. De forma predeterminada sin privilegios.
  • -sU: Más lento, para UDP. Principalmente: DNS(53), SNMP(161,162), DHCP(67 y 68), (-sU53,161,162,67,68): abierto(respuesta), cerrado(port unreachable), filtrado (otro ICMP), abierto/filtrado (nada). En caso de abierto/filtrado, -sV envía numerosas solicitudes para detectar alguna de las versiones que nmap admite y puede detectar el estado real. Aumenta mucho el tiempo.
  • -sY: El protocolo SCTP no puede establecer la conexión, por lo que no hay registros, funciona como -PY.
  • -sN,-sX,-sF: Null, Fin, Xmas, pueden penetrar algunos firewalls y extraer información. Se basan en que las máquinas compatibles con los estándares deben responder con RST a todas las solicitudes que no tengan las banderas SYN, RST o ACK levantadas: abierto/filtrado (nada), cerrado(RST), filtrado (ICMP unreachable). No es confiable en Windows, Cisco, BSDI y OS/400. En Unix sí.
  • -sM: Escaneo Maimon: Envía banderas FIN y ACK, utilizado para BSD, actualmente devolverá todo como cerrado.
  • -sA, sW: ACK y Window, se utiliza para detectar firewalls, para saber si los puertos están filtrados o no. El -sW distingue entre abierto/cerrado ya que los abiertos responden con un valor de ventana diferente: abierto (RST con ventana distinta de 0), cerrado (RST ventana = 0), filtrado (ICMP unreachable o nada). No todos los equipos funcionan de esta manera, por lo que si todos están cerrados, no está funcionando, si hay algunos abiertos, está funcionando correctamente y si hay muchos abiertos y pocos cerrados, está funcionando al revés.
  • -sI: Escaneo inactivo. Para los casos en los que hay un firewall activo pero sabemos que no filtra a una determinada IP (o cuando simplemente queremos anonimato), podemos utilizar el escáner zombie (funciona para todos los puertos) para buscar posibles zombies podemos utilizar el script ipidseq o el exploit auxiliary/scanner/ip/ipidseq. Este escáner se basa en el número IPID de los paquetes IP.
  • --badsum: Envía la suma incorrecta, las computadoras descartarán los paquetes, pero los firewalls podrían responder algo, se utiliza para detectar firewalls.
  • -sZ: Escáner SCTP "extraño", al enviar sondas con fragmentos de eco de cookies, deberían descartarse si están abiertos o responder con ABORT si están cerrados. Puede pasar por firewalls por los que no pasa init, lo malo es que no distingue entre filtrado y abierto.
  • -sO: Escaneo de protocolo IP. Envía encabezados incorrectos y vacíos en los que a veces ni siquiera se puede distinguir el protocolo. Si llega un protocolo ICMP unreachable, está cerrado, si llega un puerto inalcanzable, está abierto, si llega otro error, está filtrado, si no llega nada, está abierto|filtrado.
  • -b <server>: FTPhost--> Se utiliza para escanear un host desde otro, esto se hace conectando el ftp de otra máquina y pidiéndole que envíe archivos a los puertos que se desean escanear desde otra máquina, según las respuestas sabremos si están abiertos o no. [<user>:<password>@]<server>[:<port>] Casi todos los servidores FTP ya no permiten hacer esto y, por lo tanto, tiene poco uso práctico.

Análisis centralizado

-p: Se utiliza para especificar los puertos a escanear. Para seleccionar los 65335 puertos: -p- o -p all. Nmap tiene una clasificación interna según su popularidad. Por defecto, utiliza los 1000 puertos principales. Con -F (escaneo rápido) se analizan los 100 puertos principales. Con --top-ports <numero> se analizan ese número de puertos principales (de 1 a 65335). Para evitar que se comprueben los puertos en un orden aleatorio, se utiliza -r. También se pueden seleccionar rangos de puertos: 20-30,80,443,1024- Esto último significa que se analizarán los puertos a partir del 1024. También se pueden agrupar los puertos por protocolos: U:53,T:21-25,80,139,S:9. Además, se puede elegir un rango dentro de los puertos populares de nmap: -p [-1024] analiza hasta el 1024 de los incluidos en nmap-services. --port-ratio <ratio> analiza los puertos más comunes según un ratio que debe estar entre 0 y 1.

-sV Escaneo de versión, se puede ajustar la intensidad de 0 a 9, por defecto es 7.

--version-intensity <numero> Se ajusta la intensidad, de manera que cuanto más bajo sea el número, solo se lanzarán las sondas más probables, pero no todas. Esto puede acortar considerablemente el tiempo de escaneo UDP.

-O Detección de sistema operativo.

--osscan-limit Para escanear correctamente un host, se necesita que al menos haya 1 puerto abierto y otro cerrado. Si no se cumple esta condición y hemos utilizado esta opción, no se intentará hacer una predicción del sistema operativo (ahorrando tiempo).

--osscan-guess Cuando la detección de sistema operativo no es perfecta, esto hace que se esfuerce más.

Scripts

--script <nombre_archivo>|<categoría>|<directorio>|<expresión>[,...]

Para utilizar los scripts por defecto, se utiliza -sC o --script=default.

Los tipos disponibles son: auth, broadcast, default, discovery, dos, exploit, external, fuzzer, intrusive, malware, safe, version y vuln.

  • Auth: ejecuta todos los scripts disponibles para autenticación.
  • Default: ejecuta los scripts básicos por defecto de la herramienta.
  • Discovery: recupera información del objetivo o víctima.
  • External: script para utilizar recursos externos.
  • Intrusive: utiliza scripts considerados intrusivos para la víctima o objetivo.
  • Malware: revisa si hay conexiones abiertas por códigos maliciosos o puertas traseras.
  • Safe: ejecuta scripts que no son intrusivos.
  • Vuln: descubre las vulnerabilidades más conocidas.
  • All: ejecuta todos los scripts con extensión NSE disponibles.

Para buscar scripts:

nmap --script-help="http-*" -> Los que empiecen por http-

nmap --script-help="not intrusive" -> Todos menos esos

nmap --script-help="default or safe" -> Los que están en uno o en otro o en ambos

nmap --script-help="default and safe" --> Los que están en ambos

nmap --script-help="(default or safe or intrusive) and not http-*"

--script-args <n1>=<v1>,<n2>={<n3>=<v3>},<n4>={<v4>,<v5>}

--script-args-file <nombre_archivo>

--script-help <nombre_archivo>|<categoría>|<directorio>|<expresión>|all[,...]

--script-trace ---> Proporciona información sobre cómo va el script.

--script-updatedb

Para utilizar un script, solo hay que escribir: nmap --script Nombre_del_script objetivo --> Al especificar el script, se ejecutará tanto el script como el escáner, por lo que también se pueden añadir opciones del escáner. Se puede añadir "safe=1" para que solo se ejecuten los scripts seguros.

Control de tiempo

Nmap puede modificar el tiempo en segundos, minutos, ms: --host-timeout arguments 900000ms, 900, 900s y 15m hacen lo mismo.

Nmap divide el número total de hosts a escanear en grupos y analiza esos grupos en bloques, de manera que no pasa al siguiente bloque hasta que no se hayan analizado todos los hosts del bloque (y el usuario no recibe ninguna actualización hasta que se haya analizado el bloque). De esta forma, es más eficiente para nmap utilizar grupos grandes. Por defecto, en una clase C se utilizan 256.

Se puede cambiar con --min-hostgroup <numhosts>; --max-hostgroup <numhosts> (Ajustar el tamaño de los grupos de escaneo en paralelo)

Se puede controlar el número de escáneres en paralelo, pero es mejor no hacerlo (nmap ya incorpora un control automático basado en el estado de la red): --min-parallelism <numprobes>; --max-parallelism <numprobes>

Se puede modificar el tiempo de espera de rtt, pero generalmente no es necesario: --min-rtt-timeout <time>, --max-rtt-timeout <time>, --initial-rtt-timeout <time>

Se puede modificar el número de intentos: --max-retries <numtries>

Se puede modificar el tiempo de escaneo de un host: --host-timeout <time>

Se puede modificar el tiempo entre cada prueba para que sea más lento: --scan-delay <time>; --max-scan-delay <time>

Se puede modificar el número de paquetes por segundo: --min-rate <number>; --max-rate <number>

Muchos puertos tardan mucho en responder al estar filtrados o cerrados, si solo nos interesan los abiertos, se puede ir más rápido con: --defeat-rst-ratelimit

Para definir el nivel de agresividad de nmap: -T paranoid|sneaky|polite|normal|aggressive|insane

-T (0-1)

-T0 --> Solo se escanea 1 puerto a la vez y se espera 5 minutos hasta el siguiente.

-T1 y T2 --> Muy parecidos, pero solo esperan 15 y 0,4 segundos respectivamente entre cada prueba.

-T3 --> Funcionamiento por defecto, incluye en paralelo.

-T4 --> --max-rtt-timeout 1250ms --min-rtt-timeout 100ms --initial-rtt-timeout 500ms --max-retries 6 --max-scan-delay 10ms

-T5 --> --max-rtt-timeout 300ms --min-rtt-timeout 50ms --initial-rtt-timeout 250ms --max-retries 2 --host-timeout 15m --max-scan-delay 5ms

Firewall/IDS

No permiten el paso a puertos y analizan paquetes. -f Fragmenta paquetes en 8 bytes después de la cabecera. Para especificar un tamaño diferente, usa ..mtu (no uses -f). El offset debe ser múltiplo de 8. Los escáneres de versión y scripts no admiten fragmentación.

-D decoy1,decoy2,ME Nmap envía escáneres con direcciones IP de origen diferentes para ocultar tu identidad. Si incluyes ME en la lista, Nmap te ubicará allí. Es mejor incluir 5 o 6 direcciones antes de la tuya para ocultarte por completo. Puedes generar IP aleatorias con RND:<número> para generar <número> de IP aleatorias. No funcionan con detección de versiones sin conexión TCP. Si estás dentro de una red, es recomendable usar IP que estén activas para no revelar que eres el único activo.

Para usar IP aleatorias: nmap -D RND:10 IP_objetivo

-S IP Úsalo cuando Nmap no detecte tu dirección IP, debes proporcionarla manualmente. También se puede utilizar para hacer creer que hay otro objetivo escaneando.

-e <interfaz> Elige la interfaz de red.

Muchos administradores dejan puertos de entrada abiertos para que todo funcione correctamente y les resulte más fácil que buscar otra solución. Estos puertos pueden ser DNS o FTP, por ejemplo. Para buscar esta vulnerabilidad, Nmap incorpora: --source-port <númerodepuerto> y -g <númerodepuerto> (son equivalentes).

--data <cadena hexadecimal> Envía texto en formato hexadecimal: --data 0xdeadbeef y --data \xCA\xFE\x09

--data-string <cadena> Envía texto normal: --data-string "Scan conducted by Security Ops, extension 7192"

--data-length <número> Nmap envía solo las cabeceras, con esto se puede agregar un número de bytes adicionales (generados aleatoriamente).

Para configurar completamente el paquete IP, usa --ip-options.

Si deseas ver las opciones en los paquetes enviados y recibidos, especifica --packet-trace. Para obtener más información y ejemplos de uso de las opciones IP con Nmap, consulta http://seclists.org/nmap-dev/2006/q3/52.

--ttl <valor>

--randomize-hosts Hace que el ataque sea menos obvio.

--spoof-mac <direcciónMAC, prefijo o nombre del fabricante> Cambia la dirección MAC. Ejemplos: Apple, 0, 01:02:03:04:05:06, deadbeefcafe, 0020F2 y Cisco.

--proxies <lista separada por comas de URLs de proxy> Permite usar proxies. A veces, un proxy no mantiene tantas conexiones abiertas como Nmap necesita, por lo que es posible que debas ajustar la simultaneidad con --max-parallelism.

-sP Descubre hosts en la red utilizando ARP.

Muchos administradores crean una regla en el firewall que permite el paso de todos los paquetes que provienen de un puerto en particular (como el 20, 53 y 67). Podemos indicarle a Nmap que envíe nuestros paquetes desde esos puertos: nmap --source-port 53 IP

Salidas

-oN archivo Salida normal.

-oX archivo Salida en formato XML.

-oS archivo Salida para script kiddies.

-oG archivo Salida en formato grepable.

-oA archivo Todas las salidas excepto -oS.

-v nivel Nivel de verbosidad.

-d nivel Nivel de depuración.

--reason Muestra la razón del estado del host.

--stats-every tiempo Muestra el estado cada cierto tiempo.

--packet-trace Muestra los paquetes enviados. Se pueden especificar filtros como --version-trace o --script-trace.

--open Muestra los puertos abiertos, abiertos|filtrados y no filtrados.

--resume archivo Genera un resumen.

Miscelánea

-6 Permite el uso de IPv6.

-A Equivalente a -O -sV -sC --traceroute.

Tiempo de ejecución

Mientras Nmap se está ejecutando, se pueden cambiar las opciones:

v / V Aumenta / disminuye el nivel de verbosidad.

d / D Aumenta / disminuye el nivel de depuración.

p / P Activa / desactiva el rastreo de paquetes.

? Muestra una pantalla de ayuda interactiva durante la ejecución.

Vulscan

Es un script de Nmap que verifica las versiones de los servicios utilizando una base de datos offline (descargada de fuentes muy importantes) y devuelve posibles vulnerabilidades.

Las bases de datos que utiliza son:

  1. Scipvuldb.csv | http://www.scip.ch/en/?vuldb
  2. Cve.csv | http://cve.mitre.org
  3. Osvdb.csv | http://www.osvdb.org
  4. Securityfocus.csv | http://www.securityfocus.com/bid/
  5. Securitytracker.csv | http://www.securitytracker.com
  6. Xforce.csv | http://xforce.iss.net
  7. Exploitdb.csv | http://www.exploit-db.com
  8. Openvas.csv | http://www.openvas.org

Para descargar e instalar Vulscan en la carpeta de Nmap:

wget http://www.computec.ch/projekte/vulscan/download/nmap_nse_vulscan-2.0.tar.gz && tar -czvf nmap_nse_vulscan-2.0.tar.gz vulscan/ && sudo cp -r vulscan/ /usr/share/nmap/scripts/

También debes descargar los paquetes de las bases de datos y agregarlos a /usr/share/nmap/scripts/vulscan/.

Uso:

Para utilizar todas las bases de datos: sudo nmap -sV --script=vulscan HOST_A_ESCANEAR

Para utilizar una base de datos específica: sudo nmap -sV --script=vulscan --script-args vulscandb=cve.csv HOST_A_ESCANEAR

Acelerar el escaneo de servicios de Nmap x16

Según este artículo, puedes acelerar el análisis de servicios de Nmap modificando todos los valores de totalwaitms en /usr/share/nmap/nmap-service-probes a 300 y tcpwrappedms a 200.

Además, las sondas que no tienen un valor específicamente definido de servicewaitms utilizan un valor predeterminado de 5000. Por lo tanto, podemos agregar valores a cada una de las sondas, o podemos compilar Nmap nosotros mismos y cambiar el valor predeterminado en service_scan.h.

Si no deseas cambiar los valores de totalwaitms y tcpwrappedms en absoluto en el archivo /usr/share/nmap/nmap-service-probes, puedes editar el código de análisis para que estos valores en el archivo nmap-service-probes se ignoren por completo.

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥