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

173 lines
15 KiB
Markdown

# Resumen de Nmap (ESP)
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
```
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, puedes excluir Ips posibles con `--exclude <Ips>` o `--excludefile <file>`.
### Descubrimiento de equipos
Por defecto Nmap lanza una fase de descubrimiento consistente 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 pequeño escaneo de red. Con privilegios envía un ACK (-PA) al 80, un SYN(-PS) al 443 y una solicitud de eco y una solicitud de Timestamp, sin privilegios siempre completa conexiones. Si el objetivo es la red, solo usa ARP(-PR). Si se usa con otra opción, solo se descartan los paquetes de la otra opción.
* **`-PR`**: **Ping ARP**. Se usa por defecto al analizar computadoras en nuestra red, es más rápido que usar pings. Si no quieres usar paquetes ARP usa `--send-ip`.
* **`-PS <ports>`**: Envía paquetes SYN a los cuales si responde SYN/ACK está abierto (a los cuales responde con RST para no terminar la conexión), si responde RST está cerrado y si no responde es inalcanzable. En caso de no tener privilegios, se usa automáticamente una conexión total. Si no se dan puertos, lo lanza al 80.
* **`-PA <ports>`**: Como el anterior pero con ACK, combinando ambos se obtienen mejores resultados.
* **`-PU <ports>`**: El objetivo es lo contrario, se envían a puertos que se espera estén cerrados. Algunos firewalls solo revisan conexiones TCP. Si está cerrado se responde con puerto inalcanzable, si se responde con otro icmp o no se responde se deja como destino inalcanzable.
* **`-PE, -PP, -PM`** : ICMP PINGS: eco respuesta, timestamp y addresmask. Se lanzan para averiguar si el objetivo está activo.
* **`-PY<ports>`**: Envía sondas SCTP INIT al 80 por defecto, se puede responder con INIT-ACK(abierta) o ABORT(cerrada) o nada o ICMP inalcanzable(inactivo).
* **`-PO <protocols>`**: Se indica un protocolo en las cabeceras, por defecto 1(ICMP), 2(IGMP) y 4(Encap IP). Para los protocolos ICMP, IGMP, TCP (6) y UDP (17) se envían las cabeceras del protocolo, para el resto solo se envía la cabecera IP. El propósito de esto es que debido a la malformación de las cabeceras, se responde Protocolo inalcanzable o respuestas del mismo protocolo para saber si está arriba.
* **`-n`**: No 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 usa por defecto.
* **`-sT`**: Completa la conexión, por lo que sí deja rastro, pero se puede usar con seguridad. Por defecto sin privilegios.
* **`-sU`**: Más lento, para UDP. Mayormente: 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`**: Protocolo SCTP falla en 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 que cumplen con el estándar deben responder con RST todas las solicitudes que no tengan levantados los flags SYN, RST o ACK: abierto/filtrado(nada), cerrado(RST), filtrado (ICMP inalcanzable). No fiable en Windows, Cisco, BSDI y OS/400. En unix sí.
* **`-sM`**: Escaneo Maimon: Envía flags FIN y ACK, usado para BSD, actualmente devolverá todos como cerrados.
* **`-sA, sW`**: ACK y Window, se usa 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 ordenadores funcionan de esta manera, así que si todo está cerrado, no está funcionando, si hay unos 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 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, los ordenadores descartarían los paquetes, pero los firewalls podrían responder algo, se usa para detectar firewalls.
* **`-sZ`:** Escáner SCTP "extraño", 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 cabeceras malas y vacías en las que a veces ni siquiera se puede distinguir el protocolo. Si llega ICMP protocolo inalcanzable está cerrado, si llega puerto inalcanzable está abierto, si llega otro error, filtrado, si no llega nada, abierto|filtrado.
* **`-b <server>`:** FTPhost--> Se usa para escanear un host desde otro, esto se hace conectándose al ftp de otra máquina y pidiéndole que envíe archivos a los puertos que quieres 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 te permiten hacer esto y por lo tanto es de poca utilidad práctica.
### **Centrar análisis**
**-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 \<número>** Analiza ese número de principales (de 1 hasta los 65335). Comprueba los puertos en orden aleatorio, para que eso no pase **-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 \<número>** 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 _\<nombre_archivo>_|_\<categoría>_|_\<directorio>_|_\<expresión>_\[,...]
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, 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 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 ---> Da info de cómo va el script
\--script-updatedb
**Para usar un script solo hay que poner: nmap --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, and 15m all do the same thing.
Nmap divide el número 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 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 rtt timeout, 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:\<número> Para generar \<número> 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 sino 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 \<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 buscar esta vulnerabilidad nmap incorpora: **--source-port** _**\<número_puerto>**_**;-g** _**\<número_puerto>**_ _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 número de bytes más (que se generarán aleatoriamente)
Para configurar el