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>
: list_IPs
-iR <number>
: Número de Ips aleatorias, puedes excluir posibles Ips con --exclude <Ips>
o --excludefile <file>
.
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
: ICMP PINGS: 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 responda con protocolo inalcanzable o respuestas del mismo protocolo para saber si está activo.
-n
: Sin DNS
-R
: DNS siempre
-sS
: No completa la conexión, por lo que no deja rastro, muy bueno si se puede usar. (privilegios) Es el que se usa 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 el estándar 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, así 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 malos 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 <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 permiten hacer esto y, por lo tanto, tiene poco uso práctico.
-p: Sirve para dar los puertos a escanear. Para seleccionar los 65335: -p- o -p all. Nmap tiene una clasificación interna según su popularidad. Por defecto usa 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 que eso no pase, usa -r. También podemos seleccionar puertos: 20-30,80,443,1024- Esto último significa que mire en adelante del 1024. También podemos agrupar los puertos por protocolos: U:53,T:21-25,80,139,S:9. También podemos escoger 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 Escaneado de versión, se puede regular la intensidad de 0 a 9, por defecto 7.
--version-intensity <numero> Regulamos la intensidad, de forma que cuanto más bajo solo lanzará las sondas más probables, pero no todas. Con esto podemos acortar considerablemente el tiempo de escaneo UDP.
-O Detección de os.
--osscan-limit Para escanear bien un host se necesita que al menos haya 1 puerto abierto y otro cerrado; si no se da esta condición y hemos puesto esto, no intenta hacer 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 <filename>|<category>|<directory>|<expression>[,...]
Para usar los de por defecto vale con -sC o --script=default.
Los tipos que hay son de: auth, broadcast, default, discovery, dos, exploit, external, fuzzer, intrusive, malware, safe, version, y 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 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 <filename>
--script-help <filename>|<category>|<directory>|<expression>|all[,...]
--script-trace ---> Da info de cómo va el script.
--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 escáner, así que también se pueden poner opciones del escáner; 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, y 15m hacen lo mismo.
Nmap divide el número total de hosts 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> (Ajustar tamaños de grupo de escaneo paralelo).
Se puede controlar el número de escáneres en paralelo, pero es mejor que no (nmap ya incorpora control automático en base al estado de la red): --min-parallelism <numprobes>; --max-parallelism <numprobes>.
Podemos modificar el tiempo de espera RTT, pero no suele ser necesario: --min-rtt-timeout <time>, --max-rtt-timeout <time>, --initial-rtt-timeout <time>.
Podemos modificar el número 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 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, 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 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 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 múltiplo de 8. Escáneres de versión y scripts no soportan la fragmentación.
-D decoy1,decoy2,ME Nmap envía escáneres pero con otras direcciones IPs como origen, de esta forma te esconden a ti. Si pones el ME en la lista, nmap te situará ahí; 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 conexión de TCP. Si estás dentro de una red, te interesa usar Ips que estén activas, pues si no será muy fácil averiguar que tú eres la única 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 escaneándoles.
-e <interface> 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 buscar esta vulnerabilidad, nmap incorpora: --source-port <portnumber> ;-g <portnumber> Son equivalentes.
--data <hex string> Para enviar texto hexadecimal: --data 0xdeadbeef y --data \xCA\xFE\x09.
--data-string <string> Para enviar un texto normal: --data-string "Scan conducted by Security Ops, extension 7192".
--data-length <number> Nmap envía solo cabeceras; con esto logramos que añada a estar un número de bytes más (que se generarán aleatoriamente).
Para configurar el paquete IP completamente, usar --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 <value>.
--randomize-hosts Para que el ataque sea 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 <Comma-separated list of proxy URLs> Para usar proxies; a veces un proxy no mantiene tantas conexiones abiertas como nmap quiere, por lo que habría que modificar el paralelismo: --max-parallelism.
-sP Para descubrir hosts en la red en la que estamos por ARP.
Muchos administradores crean una regla en el firewall que permite pasar todos los paquetes que provienen de un puerto en particular (como el 20,53 y 67); podemos decirle a nmap que mande nuestros paquetes desde esos puertos: nmap --source-port 53 Ip.
Salidas
-oN file Salida normal.
-oX file Salida XML.
-oS file Salida de script kiddies.
-oG file Salida grepable.
-oA file Todos menos -oS.
-v level verbosity.
-d level debugging.
--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 los abiertos, abiertos|filtrados y los no filtrados.
--resume file Saca un resumen.
Miscelánea
-6 Permite ipv6.
-A es lo mismo que -O -sV -sC --traceroute.
Tiempo de ejecución
Mientras corre nmap, 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 los servicios obtenidos en una base de datos offline (que descarga de otras muy importantes) y devuelve las posibles vulnerabilidades.
Las BD que usa 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 descargarlo e instalarlo 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 habría que descargar los paquetes de las BD y añadirlos a /usr/share/nmap/scripts/vulscan/.
Uso:
Para usar todos: sudo nmap -sV --script=vulscan HOST_A_ESCANEAR.
Para usar una BD específica: sudo nmap -sV --script=vulscan --script-args vulscandb=cve.csv HOST_A_ESCANEAR.
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.
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)