Nmap Summary (ESP)
Last updated
Last updated
Aprende y practica Hacking en AWS: HackTricks Training AWS Red Team Expert (ARTE) Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)
<ip>,<net/mask>
: Indica las ips directamente
-iL <ips_file>
: lista_IPs
-iR <number>
: Número de Ips aleatorias, se pueden excluir Ips posibles con --exclude <Ips>
o --excludefile <file>
.
Por defecto, Nmap lanza una fase de descubrimiento que consiste en: -PA80 -PS443 -PE -PP
-sL
: No invasivo, lista los objetivos haciendo solicitudes DNS para resolver nombres. Es útil para saber, por ejemplo, si www.prueba.es/24 son todos nuestros objetivos.
-Pn
: Sin ping. Útil si se sabe que todos están activos (de lo contrario, se podría perder mucho tiempo, pero esta opción también produce falsos negativos al decir que no están activos), evita 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 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 usa con otra opción, solo se descartan los paquetes de la otra opción.
-PR
: Ping ARP. Se utiliza de forma predeterminada al analizar computadoras en nuestra red, es más rápido que usar pings. Si no se desean utilizar paquetes ARP, se utiliza --send-ip
.
-PS <puertos>
: Envía paquetes SYN a los cuales si responde SYN/ACK está abierto (a los que responde con RST para no finalizar la conexión), si responde RST está cerrado y si no responde está inalcanzable. 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 <puertos>
: Similar al anterior pero con ACK, combinando ambos se obtienen mejores resultados.
-PU <puertos>
: El objetivo es el contrario, se envían a puertos que se espera que estén cerrados. Algunos firewalls solo verifican conexiones TCP. Si está cerrado, responde con puerto inalcanzable, si responde con otro icmp o no responde, se deja como inalcanzable.
-PE, -PP, -PM
: PINGS ICMP: respuesta de eco, marca de tiempo y máscara de dirección. Se envían para saber si el objetivo está activo.
-PY<puertos>
: Envía sondas SCTP INIT a 80 de forma predeterminada, INIT-ACK (abierto) o ABORT (cerrado) o nada o inalcanzable por ICMP (inactivo) pueden responder.
-PO <protocolos>
: 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 deformación de los encabezados, se responden Protocol unreachable o respuestas del mismo protocolo para saber si está activo.
-n
: Sin DNS
-R
: Siempre DNS
-sS
: No completa la conexión, por lo que no deja rastro, muy bueno si se puede usar (con privilegios). Es el que se utiliza de forma predeterminada.
-sT
: Completa la conexión, por lo que deja rastro, pero se puede usar 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(puerto inalcanzable), filtrado (otro ICMP), abierto/filtrado (nada). En caso de abierto/filtrado, -sV envía numerosas solicitudes para detectar alguna 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 que las máquinas compatibles con el estándar deben responder con RST a todas las solicitudes que no tengan banderas SYN, RST o ACK elevadas: abierto/filtrado(nada), cerrado(RST), filtrado (puerto inalcanzable ICMP). No fiable 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 sí 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 inalcanzable 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 bien, 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 se sabe que no filtra a una determinada Ip (o cuando simplemente se desea anonimato) se puede utilizar el escáner zombie (funciona para todos los puertos), para buscar posibles zombies se puede 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ían 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 ser descartadas si están abiertas o respondidas con ABORT si están cerradas. Puede pasar a través de firewalls que init no puede pasar, 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 inalcanzable está cerrado, si llega un puerto inalcanzable está abierto, si llega otro error, filtrado, si no llega nada, abierto|filtrado.
-b <servidor>
: 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. [<usuario>:<contraseña>@]<servidor>[:<puerto>] Casi todos los servidores ftp ya no permiten hacer esto y, por lo tanto, tiene poco uso práctico.
-p: Se utiliza para especificar los puertos a escanear. Para seleccionar los 65335: -p- o -p all. Nmap tiene una clasificación interna según su popularidad. Por defecto utiliza los 1000 principales. Con -F (escaneo rápido) analiza los 100 principales. Con --top-ports <numero> Analiza ese número de principales (de 1 hasta los 65335). Comprueba los puertos en orden aleatorio, para evitar esto -r. También se pueden seleccionar puertos: 20-30,80,443,1024- Esto último significa que mire en adelante del 1024. También se pueden agrupar los puertos por protocolos: U:53,T:21-25,80,139,S:9. También 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 que 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 7.
--version-intensity <numero> Regula la intensidad, de modo que cuanto más bajo, solo lanzará las sondas más probables, pero no todas. Con esto se puede acortar considerablemente el tiempo de escaneo UDP
-O Detección de os
--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 establecido esto, no intentará hacer una predicción de os (ahorra tiempo) --osscan-guess Cuando la detección de os no es perfecta esto hace que se esfuerce más
Scripts
--script <nombrearchivo>|<categoría>|<directorio>|<expresión>[,...]
Para usar los de por efecto vale con -sC o --script=default
Los tipos que hay son de: auth, broadcast, default, discovery, dos, exploit, external, fuzzer, intrusive, malware, safe, version, and vuln
Auth: ejecuta todos sus scripts disponibles para autenticación
Default: ejecuta los scripts básicos por defecto de la herramienta
Discovery: recupera información del target o víctima
External: script para utilizar recursos externos
Intrusive: utiliza scripts que son considerados intrusivos para la víctima o target
Malware: revisa si hay conexiones abiertas por códigos maliciosos o backdoors (puertas traseras)
Safe: ejecuta scripts que no son intrusivos
Vuln: descubre las vulnerabilidades más conocidas
All: ejecuta absolutamente 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 estan en uno o en otro o en ambos
nmap --script-help="default and safe" --> Los que estan 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 <nombrearchivo>
--script-help <nombrearchivo>|<categoría>|<directorio>|<expresión>|all[,...]
--script-trace ---> Da info de como va elscript
--script-updatedb
Para usar un script solo hay que poner: namp --script Nombre_del_script objetivo --> Al poner el script se ejecutará tanto el script como el escaner, asi que tambien se pueden poner opciones del escaner, podemos añadir “safe=1” para que se ejecuten solo los que sean seguros.
Control tiempo
Nmap puede modificar el tiempo en segundos, minutos, ms: --host-timeout arguments 900000ms, 900, 900s, and 15m all do the same thing.
Nmap divide el numero total de host a escanear en grupos y analiza esos grupos en bloques de forma que hasta que no han sido analizados todos, no pasa al siguiente bloque (y el usuario tampoco recibe ninguna actualización hasta que se haya analizado el bloque) de esta forma, es más óptimo para nmap usar grupos grandes. Por defecto en clase C usa 256.
Se puede cambiar con**--min-hostgroup** <numhosts>; --max-hostgroup <numhosts> (Adjust parallel scan group sizes)
Se puede controlar el numero de escaners en paralelo pero es mejor que no (nmpa ya incorpora control automatico en base al estado de la red): --min-parallelism <numprobes>; --max-parallelism <numprobes>
Podemos modificar el rtt timeout, pero no suele ser necesario: --min-rtt-timeout <time>, --max-rtt-timeout <time>, --initial-rtt-timeout <time>
Podemos modificar el numero de intentos:--max-retries <numtries>
Podemos modificar el tiempo de escaneado de un host: --host-timeout _<time>
Podemos modificar el tiempo entre cada prueba para que vaya despacio: --scan-delay <time>; --max-scan-delay _<time>
Podemos modificar el numero 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, podemos ir más rápido con: --defeat-rst-ratelimit
Para definir lo agresivo que queremos que sea nmap: -T paranoid|sneaky|polite|normal|aggressive|insane
-T (0-1)
-T0 --> Solo se escanea 1 puerto a la vez y se espera 5min hasta el siguiente
-T1 y T2 --> Muy parecidos pero solo esperan 15 y 0,4seg respectivamente enttre 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 dejan pasar a puertos y analizan paquetes.
-f Para fragmentar paquetes, por defecto los fragmenta en 8bytes después de la cabecera, para especificar ese tamaño usamos ..mtu (con esto, no usar -f), el offset debe ser multiplo de 8. Escaners de version y scripts no soportan la fragmentacion
-D decoy1,decoy2,ME Nmap envia escaneres pero con otras direcciones IPs como origen, de esta forma te esconden a ti. Si pones el ME en la lista, nmap te situara ahi, mejor poner 5 o 6 antes de ti para que te enmascaren completamente. Se pueden generar iPs aleatorias con RND:<numero> Para generar <numero> de Ips aleatorias. No funcionan con detector de versiones sin conexion de TCP. Si estas dentro de una red, te interesa usar Ips que esten activas, pues sino será muy facil averiguar que tu eres la unica activa.
Para usar Ips aleatorias: nmap-D RND: 10 Ip_objetivo
-S IP Para cuando Nmap no pilla tu dirección Ip se la tienes que dar con eso. También sirve para hacer pensar que hay otro objetivo escaneandoles.
-e <interfaz> Para elegir la interfaz
Muchos administradores dejan puertos de entrada abiertos para que todo funcione correctamente y les es más fácil que buscar otra solución. Estos pueden ser los puertos DNS o los de FTP... para busca esta vulnerabilidad nmap incorpora: --source-port <numerodepuerto>;-g <numerodepuerto> Son equivalentes
--data <cadena hexadecimal> Para enviar texto hexadecimal: --data 0xdeadbeef and --data \xCA\xFE\x09
--data-string <cadena> Para enviar un texto normal: --data-string "Scan conducted by Security Ops, extension 7192"
--data-length <número> Nmap envía solo cabeceras, con esto logramos que añada a estar un numero de bytes mas (que se generaran aleatoriamente)
Para configurar el paquete IP completamente usar --ip-options
If you wish to see the options in packets sent and received, specify --packet-trace. For more information and examples of using IP options with Nmap, see http://seclists.org/nmap-dev/2006/q3/52.
--ttl <valor>
--randomize-hosts Para que el ataque sea menos obvio
--spoof-mac <direcciónMAC, prefijo, o nombre del fabricante> Para cambiar la mac ejemplos: Apple, 0, 01:02:03:04:05:06, deadbeefcafe, 0020F2, and Cisco --proxies <Lista separada por comas de URLs de proxy> Para utilizar proxies, a veces un proxy no mantiene tantas conexiones abiertas como nmap desea, por lo que se debe ajustar el paralelismo: --max-parallelism
-sP Para descubrir hosts en la red local mediante ARP
Muchos administradores crean una regla en el firewall que permite el paso de todos los paquetes provenientes de un puerto específico (como el 20, 53 y 67). Se puede indicar a nmap que envíe los paquetes desde esos puertos: nmap --source-port 53 IP
Salidas
-oN archivo Salida normal
-oX archivo Salida XML
-oS archivo Salida para script kiddies
-oG archivo Salida en formato grepable
-oA archivo Todas las anteriores excepto -oS
-v nivel Verbosidad
-d nivel Depuración
--reason Razón del host y su estado
--stats-every tiempo Cada cierto tiempo muestra el progreso
--packet-trace Para ver 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 IPv6
-A Equivalente a -O -sV -sC --traceroute
Tiempo de ejecución
Mientras nmap se está ejecutando, se pueden cambiar opciones:
v / V Aumentar / disminuir el nivel de verbosidad
d / D Aumentar / disminuir el nivel de depuración
p / P Activar / desactivar el rastreo de paquetes
? Mostrar una pantalla de ayuda interactiva en tiempo de ejecución
Vulscan
Script de nmap que busca versiones de servicios en una base de datos offline (descargada de fuentes importantes) y muestra posibles vulnerabilidades
Las bases de datos utilizadas son:
Scipvuldb.csv | http://www.scip.ch/en/?vuldb
Cve.csv | http://cve.mitre.org
Osvdb.csv | http://www.osvdb.org
Securityfocus.csv | http://www.securityfocus.com/bid/
Securitytracker.csv | http://www.securitytracker.com
Xforce.csv | http://xforce.iss.net
Exploitdb.csv | http://www.exploit-db.com
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 es necesario descargar los paquetes de las bases de datos y añadirlos 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
Según este post, se puede 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
definido específicamente utilizan un valor predeterminado de 5000
. Por lo tanto, podemos agregar valores a cada una de las sondas, o bien compilar nmap nosotros mismos y cambiar el valor predeterminado en service_scan.h.
Si no se desea cambiar los valores de totalwaitms
y tcpwrappedms
en absoluto en el archivo /usr/share/nmap/nmap-service-probes
, se puede editar el código de análisis para que estos valores en el archivo nmap-service-probes
sean completamente ignorados.
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)