Resumen de Nmap (ESP)

Reading time: 15 minutes

tip

Aprende y practica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Apoya a HackTricks
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>: list_IPs
  • -iR <number>: Número de Ips aleatorias, puedes 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 DNS solicitudes para resolver nombres. Es útil para saber si, por ejemplo, www.prueba.es/24 todas las Ips son nuestros objetivos.
  • -Pn: Sin 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), previene la fase de descubrimiento.
  • -sn : Sin escaneo de puertos. Después de completar la fase de reconocimiento, no escanea puertos. Es relativamente sigiloso y permite un pequeño escaneo de red. 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 conexiones. Si el objetivo es la red, solo utiliza ARP(-PR). Si se usa con otra opción, solo se descartan los paquetes de la otra opción.
  • -PR: Ping ARP. Se utiliza por defecto al analizar computadoras en nuestra red, es más rápido que usar pings. Si no deseas usar paquetes ARP, usa --send-ip.
  • -PS <ports>: Envía paquetes SYN a los cuales, si responde SYN/ACK, está abierto (a lo que responde con RST para no finalizar la conexión), si responde RST está cerrado y si no responde es inalcanzable. En caso de no tener privilegios, se utiliza automáticamente una conexión total. Si no se dan puertos, se lanza a 80.
  • -PA <ports>: Como el anterior pero con ACK, combinando ambos da mejores resultados.
  • -PU <ports>: El objetivo es el opuesto, se envían a puertos que se espera que estén cerrados. Algunos firewalls solo verifican conexiones TCP. Si está cerrado se responde con puerto inalcanzable, si se responde con otro icmp o no se responde se deja como inalcanzable.
  • -PE, -PP, -PM : PINGS ICMP: respuesta de eco, marca de tiempo y máscara de dirección. Se lanzan para averiguar si el objetivo está activo.
  • -PY<ports>: Envía sondas SCTP INIT a 80 por defecto, INIT-ACK(abierto) o ABORT(cerrado) o nada o ICMP inalcanzable(inactivo) pueden ser respondidos.
  • -PO <protocols>: Se indica un protocolo en los encabezados, por defecto 1(ICMP), 2(IGMP) y 4(Encap IP). Para los protocolos ICMP, IGMP, TCP (6) y UDP (17) se envían los encabezados de protocolo, para el resto solo se envía el encabezado IP. El propósito de esto es que debido a la malformación de los encabezados, se responden Protocol inalcanzable o respuestas del mismo protocolo para saber si está activo.
  • -n: Sin DNS
  • -R: DNS siempre

Técnicas de escaneo de puertos

  • -sS: No completa la conexión, por lo que no deja rastro, muy bueno si se puede usar.(privilegios) Es el que se utiliza por defecto.
  • -sT: Completa la conexión, por lo que deja un rastro, pero se puede usar con seguridad. Por defecto 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(puerto inalcanzable), filtrado (otro ICMP), abierto/filtrado (nada). En caso de abierto/filtrado, -sV envía numerosas solicitudes para detectar cualquiera de las versiones que nmap soporta y puede detectar el verdadero estado. Aumenta mucho el tiempo.
  • -sY: El protocolo SCTP no logra 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 el hecho de que las máquinas que cumplen con los estándares deberían responder con RST a todas las solicitudes que no tengan SYN, RST o ACK. Respuestas: abierto/filtrado(nada), cerrado(RST), filtrado (ICMP inalcanzable). No 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 diferente de 0), cerrado (RST ventana = 0), filtrado (ICMP inalcanzable o nada). No todas las computadoras funcionan de esta manera, por lo que si todo está cerrado, no está funcionando, si hay pocos abiertos, está funcionando bien, y si hay muchos abiertos y pocos cerrados, está funcionando al revés.
  • -sI: Escaneo Idle. Para los casos en los que hay un firewall activo pero sabemos que no filtra a una cierta Ip (o cuando simplemente queremos anonimato) podemos usar el escáner zombie (funciona para todos los puertos), para buscar posibles zombies podemos usar 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ían los paquetes, pero los firewalls podrían responder algo, se utiliza para detectar firewalls.
  • -sZ: Escáner SCTP "raro", al enviar sondas con fragmentos de eco de cookie deberían ser descartados si están abiertos o respondidos con ABORT si están cerrados. Puede pasar a través de firewalls que init no pasa, 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 ICMP inalcanzable protocolo está cerrado, si llega puerto inalcanzable está abierto, si llega otro error, filtrado, si no llega nada, 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 deseas escanear desde otra máquina, según las respuestas sabremos si están abiertos o no. [<user>:<password>@]<server>[:<port>] Casi todos los servidores ftps ya no te permiten hacer esto y por lo tanto tiene poco uso práctico.

Análisis de Enfoque

-p: Se utiliza para especificar puertos a escanear. Para seleccionar todos los 65,335 puertos: -p- o -p all. Nmap tiene una clasificación interna basada en popularidad. Por defecto, utiliza los 1000 puertos principales. Con -F (escaneo rápido) analiza los 100 principales. Con --top-ports analiza ese número de puertos principales (de 1 a 65,335). Verifica puertos en orden aleatorio; para prevenir esto, usa -r. También podemos seleccionar puertos específicos: 20-30,80,443,1024- (este último significa buscar desde 1024 en adelante). También podemos agrupar puertos por protocolos: U:53,T:21-25,80,139,S:9. También podemos elegir un rango dentro de los puertos populares de Nmap: -p [-1024] analiza hasta el puerto 1024 de los incluidos en nmap-services. --port-ratio Analiza los puertos más comunes dentro de un ratio entre 0 y 1

-sV Escaneo de versiones, la intensidad se puede regular de 0 a 9, el valor por defecto es 7.

--version-intensity Regulamos la intensidad, de modo que cuanto más bajo sea, solo lanzará las sondas más probables, pero no todas. Con esto, podemos acortar considerablemente el tiempo de escaneo UDP

-O Detección de SO

--osscan-limit Para un escaneo adecuado de hosts, se necesita al menos un puerto abierto y un puerto cerrado. Si esta condición no se cumple y hemos establecido esto, no intentará la predicción del SO (ahorra tiempo)

--osscan-guess Cuando la detección del SO no es perfecta, esto hace que intente más

Scripts

--script |||[,...]

Para usar scripts predeterminados, usa -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 de autenticación disponibles
  • Default: ejecuta scripts básicos de herramientas predeterminadas
  • Discovery: recupera información del objetivo o víctima
  • External: script para usar recursos externos
  • Intrusive: utiliza scripts considerados intrusivos para la víctima o objetivo
  • Malware: verifica conexiones abiertas por código malicioso o puertas traseras
  • Safe: ejecuta scripts no intrusivos
  • Vuln: descubre las vulnerabilidades más conocidas
  • All: ejecuta absolutamente todos los scripts de extensión NSE disponibles

Para buscar scripts:

nmap --script-help="http-*" -> Aquellos que comienzan con http-

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

nmap --script-help="default or safe" -> Aquellos en cualquiera o ambos

nmap --script-help="default and safe" --> Aquellos en ambos

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

--script-args =,={=},={,}

--script-args-file

--script-help ||||all[,...]

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

--script-updatedb

Para usar un script, simplemente escribe: nmap --script Script_Name target --> Al usar el script, tanto el script como el escáner se ejecutarán, por lo que también se pueden agregar opciones del escáner. Podemos agregar "safe=1" para ejecutar solo los seguros.

Control de Tiempo

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

Nmap divide el número total de hosts a escanear en grupos y analiza estos grupos en bloques, por lo que no se mueve al siguiente bloque hasta que todos han sido analizados (y el usuario no recibe actualizaciones hasta que el bloque ha sido analizado). De esta manera, es más óptimo para Nmap usar grupos grandes. Por defecto en clase C, utiliza 256.

Esto se puede cambiar con --min-hostgroup ; --max-hostgroup (Ajustar tamaños de grupo de escaneo paralelo)

Puedes controlar el número de escáneres paralelos, pero es mejor no hacerlo (Nmap ya incorpora control automático basado en el estado de la red): --min-parallelism ; --max-parallelism

Podemos modificar el tiempo de espera RTT, pero generalmente no es necesario: --min-rtt-timeout , --max-rtt-timeout , --initial-rtt-timeout

Podemos modificar el número de intentos: --max-retries

Podemos modificar el tiempo de escaneo de un host: --host-timeout

Podemos modificar el tiempo entre cada prueba para ralentizarlo: --scan-delay ; --max-scan-delay

Podemos modificar el número de paquetes por segundo: --min-rate ; --max-rate

Muchos puertos tardan mucho en responder cuando están filtrados o cerrados. Si solo estamos interesados en los abiertos, podemos ir más rápido con: --defeat-rst-ratelimit

Para definir cuán agresivo queremos que sea Nmap: -T paranoid|sneaky|polite|normal|aggressive|insane

-T (0-1)

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

-T1 y T2 --> Muy similar pero solo espera 15 y 0.4seg respectivamente entre cada prueba

-T3 --> Operación por defecto, incluye escaneo 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 acceso a puertos y analizan paquetes.

-f Para fragmentar paquetes, por defecto los fragmenta en 8bytes después del encabezado, para especificar ese tamaño usamos ..mtu (con esto, no uses -f), el desplazamiento debe ser múltiplo de 8. Los escáneres de versiones y scripts no soportan fragmentación

-D decoy1,decoy2,ME Nmap envía escáneres pero con otras direcciones IP como origen, de esta manera te ocultan. Si pones ME en la lista, Nmap te colocará allí, mejor poner 5 o 6 antes de ti para enmascararte completamente. Se pueden generar IPs aleatorias con RND: Para generar de IPs aleatorias. No funcionan con detectores de versiones TCP sin conexión. Si estás dentro de una red, te interesa usar IPs activas, ya que de lo contrario será muy fácil averiguar que eres el único activo.

Para usar IPs aleatorias: nmap -D RND:10 Target_IP

-S IP Para cuando Nmap no captura tu dirección IP, debes dársela con esto. También sirve para hacerles pensar que otro objetivo los está escaneando.

-e Para elegir la interfaz

Muchos administradores dejan puertos de entrada abiertos para que todo funcione correctamente y es más fácil para ellos que encontrar otra solución. Estos pueden ser puertos DNS o puertos FTP... para encontrar esta vulnerabilidad Nmap incorpora: --source-port ;-g Son equivalentes

--data Para enviar texto hexadecimal: --data 0xdeadbeef y --data \xCA\xFE\x09

--data-string Para enviar texto normal: --data-string "Escaneo realizado por Seguridad Ops, extensión 7192"

--data-length Nmap solo envía encabezados, con esto logramos agregar un número de bytes más (que se generarán 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 más información y ejemplos de uso de opciones IP con Nmap, consulta http://seclists.org/nmap-dev/2006/q3/52.

--ttl

--randomize-hosts Para hacer el ataque menos obvio

--spoof-mac <MAC address, prefix, or vendor name> Para cambiar la MAC ejemplos: Apple, 0, 01:02:03:04:05:06, deadbeefcafe, 0020F2, y Cisco

--proxies Para usar proxies, a veces un proxy no mantiene tantas conexiones abiertas como Nmap quiere, por lo que se necesitaría modificar el paralelismo: --max-parallelism

-sP Para descubrir hosts en nuestra red por ARP

Muchos administradores crean una regla de firewall que permite que todos los paquetes provenientes de un puerto particular pasen (como 20,53 y 67), podemos decirle a Nmap que envíe nuestros paquetes desde estos puertos: nmap --source-port 53 IP

Salidas

-oN file Salida normal

-oX file Salida XML

-oS file Salida para script kiddies

-oG file Salida greppable

-oA file Todo excepto -oS

-v level verbosidad

-d level depuración

--reason Por qué del host y estado

--stats-every time Cada ese tiempo nos dice cómo va

--packet-trace Para ver qué paquetes salen, se pueden especificar filtros como: --version-trace o --script-trace

--open muestra abierto, abierto|filtrado y no filtrado

--resume file Salidas un resumen

Varios

-6 Permite IPv6

-A es lo mismo que -O -sV -sC --traceroute

Tiempo de ejecución

Mientras Nmap está en ejecución podemos cambiar opciones:

v / V Aumentar / disminuir el nivel de verbosidad

d / D Aumentar / disminuir el nivel de depuración

p / P Activar / desactivar el seguimiento de paquetes

? Imprimir una pantalla de ayuda de interacción en tiempo de ejecución

Vulscan

Script de Nmap que mira las versiones de servicios obtenidas en una base de datos offline (descargada de otras 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 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 necesitarías descargar los paquetes de la base de datos y agregarlos a /usr/share/nmap/scripts/vulscan/

Uso:

Para usar todos: sudo nmap -sV --script=vulscan HOST_TO_SCAN

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

Acelerar el escaneo de servicios de Nmap x16

Según este post 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 servicewaitms específicamente definido 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 de tal manera que estos valores en el archivo nmap-service-probes sean completamente ignorados.

tip

Aprende y practica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Apoya a HackTricks