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
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a HackTricks y HackTricks Cloud repos de github.
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
-sV Escaneo de versiones, la intensidad se puede regular de 0 a 9, el valor por defecto es 7.
--version-intensity
-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
--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
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
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
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 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
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
--data
--data-string
--data-length
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
-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:
- 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 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
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a HackTricks y HackTricks Cloud repos de github.