COMANDOS BÁSICOS | |
nmap <tipo> <opciones> <objetivo> | Sintaxis básica. |
nmap --help | Ayuda sobre el uso del comando. Guía completa. |
CONEXIONES TCP | |
SYN → SYN/ACK → ACK | Conexión TCP exitosa. |
SYN → RA | RA: Indica que se rechaza la conexión (RST) y que se confirma la recepeción del SYN enviado (ACK). |
SYN → (No responde) | Posibles causas: Host apagado, firewall ignorando paquetes o paquete perdido. |
SYN → SYN/ACK → (No recibe ACK) | Nuestro host no responde a la conexión (conexión TCP-SYN). |
SYN → SYN | Error del servidor al responder con SYN. |
FIN → FIN/ACK → ACK | Conexión TCP finalizada. |
OBJETIVOS | |
10.200.0.0/16 | La red entera. |
10.200.0.1 | Un único objetivo. |
10.200.0.1 10.200.0.2 | Ciertas IPs separadas por espacios. |
10.200.0.0-20 | Un rango de ciertas IPs. |
-iL<nombre_archivo> | Varias IPs en un archivo separadas una tras otra con saltos de línea. |
PUERTOS A ESCANEAR | |
-p- | Los 65.535 puertos. |
-p 22 | Un puerto específico. |
-p 22,80,443 | Varios puertos separados por comas. |
-p 22-443 | Un rango de puertos. |
-F | Los 100 primeros puertos más importantes según nmap. |
--top-ports=10 | Los 10 puertos más importantes según nmap. |
TIPOS DE ESCANEOS | |
-sS |
Funcionamiento del escaneo TCP-SYN:
Predefinido si no se especifica. Útil: Es rápido. Problemas: Se necesita permisos de root al tener que modificar paquetes. |
-sT |
Funcionamiento del escaneo TCP-CONNECT:
La diferencia con TCP-SYN es que sí completa la conexión TCP. Útil: No provoca fallos en el servidor. Es más fiable en la detección. Menos detectable por IPS. Problemas: Más posibilidades de registrar la conexión en un log. Es más lento que SYN-TCP. |
-sA |
Funcionamiento del escaneo TCP-ACK:
Útil: Mucho más difícil de filtrar para firewalls y sistemas IDS/IPS ya que no se puede averiguar si el ACK forma parte de una conexión establecida. Permite descubrir información sobre el estado del firewall o del sistema sin iniciar una conexión. Problemas: No se sabe si está 'open' o 'closed'. |
-sU |
Funcionamiento del escaneo UDP:
Útil: Podemos hacer conexiones a servicios UDP, por ejemplo DNS que utiliza el puerto 53 TCP y UDP. Problemas: Más lento que un escaneo TCP. No sabemos si recibió el paquete al ser un protocolo sin estado. |
-PE |
Funcionamiento del escaneo ICMP echo request:
Problemas: Es muy detectable por sistemas IPS o firewalls. |
DESHABILITAR OPCIONES | |
--disable-arp-ping | Deshabilita la resolución de MAC por ARP al realizarse por defecto para poder enviar el paquete. Por ejemplo en el escaneo -PE. |
-Pn | Deshabilita el ICMP echo request para averiguar si el host a está activo. Con esto se presupone que el host está siempre activo. |
-sN | Deshabilita el escaneo de puertos ya que por defecto se escanean los 1000 primeros. |
INFORMACIÓN ADICIONAL | |
-sV | En el host intenta averiguar el S.O.
En sus puertos abiertos intenta averiguar el servicio que se ejecuta, versión y detalles. |
-n | Deshabilita la resolución DNS. |
--packet-trace | Nos da la información detallada de cada paquete enviado y recibido incluyendo banderas. Se puede encontrar paquetes enviado por nosotros (SENT) o recibidos (RCVD). |
--traceroute | Identifica cada salto que da el paquete para llegar a su destino. |
--reason | Identifica la razón de porqué está activo un host. |
-vvv | Podemos ver información en tiempo real mientras se escanea con 3 niveles de verbose. Cuantos más v haya, más información recibiremos.
También podemos ver cuanto tiempo estimado falta para finalizar el escaneo pulsando "ESPACIO" en cualquier momento. |
--stats-every=(segundos)/s[o](minutos)/m | Nmap envia información cada x segundos o minutos. NO se puede poner minutos y segundos a la vez. |
OPTIMIZAR TIEMPOS DE RESPUESTA | |
--initial-RTT-timeout min:initial:max |
|
--max-retries <intentos> | Intenta enviar un paquete si no lo recibe hasta x veces. Predeterminado: 10. |
--min-rate <paquetes> | Nmap intentará igualar la tasa de paquetes que envía cada segundo. |
-T <0-5> | Lo anterior es manual pero hay 6 plantillas predefinidas según niveles. El nivel 0 es el más lento y sigiloso y, el nivel 5, lo más rápido y detectable. El valor intermedio e ideal es el nivel 3. |
EXPORTAR RESULTADOS | |
-oA <nombre_archivo> | Exporta el resultado en 3 formatos: nombre_archivo.nmap, nombre_archivo.xml y nombre_archivo.gnmap. |
-oN <nombre_archivo> | Exporta el resultado en formato: nombre_archivo.nmap. Salida normal de terminal. |
-oG <nombre_archivo> | Exporta el resultado en formato: nombre_archivo.gnmap. Salida de terminal adaptado para hacer grep. |
-oX <nombre_archivo> | Exporta el resultado en formato: nombre_archivo.xml. Formato XML. |
xsltproc <nombre_archivo>.xml -o <nombre_archivo>.html | Una vez exportado a XML se puede convertir a HTML mediante un comando externo. |
SCRIPTS | |
[EXPLICACIÓN] | Los scripts están hecho en LUA y están agrupados en varias categorías, ofreciendo funcionalidades diferentes. |
[CATEGORÍAS] |
Esto se puede aplicar a todos los puertos o solo a algunos con -p. Ver más scripts o categorías. |
-sC | Uso de scripts predeterminados (default). |
--script <script/categoria> | Cargar un único script con su nombre o varios con una categoría. |
-A | Combina detección de S.O. (-O), detección de versiones y servicios (-sV), scripts default (-sC) y --traceroute. |
EVASIÓN DE IDS E IPS | |
[EXPLICACIÓN] | El sistema de detección de intrusiones (IDS) y sistema de prevención de intrusiones (IPS) son componentes basados en software.
IDS escanea la red en busca de posibles ataques, los analiza e informa cualquier ataque detectado. El análisis de los ataques se basa en la coincidencia de patrones y firmas. IPS complementa el IDS tomando medidas defensivas específicas si se hubiera detectado un posible ataque. Si se detectan patrones se puede por ejemplo impedir los intentos de conexión pendientes. |
[RECOMENDACIÓN] |
Se puede tener una VPS con una IP distinta pudiendo así dividir escaneos o, si un host nuestro está bloqueado del sistema objetivo, podemos seguir con la VPS.
Además si llegamos a realizar un ataque y el objetivo lo detecta, puede contactar con nuestro ISP para parar el ataque y, así, bloquearnos el acceso a internet desde esa IP. |
-D RND:<cantidad_IPs> | Esta opción permite enviar el mismo paquete x cantidad de veces desde diferentes IPs pero siempre añadiendo nuestra IP real en la lista.
Problema: Los routers e ISP si ven una IP fuera de su rango como origen pueden descartar el paquete y no llegar al destino (IP spoofing). |
-S <IP_origen> | Esta opción permite manipular la IP de origen de los paquetes mediante el campo IP ID. Es recomendable que la IP exista para recibir las respuestas. Se puede usar la IP de una VPS diferente. |
-e <interfaz> | Se puede enviar el paquete por diferentes interfaces a la predeterminada del sistema. |
--dns-server <server1,server2> | Se puede cambiar el servidor DNS para hacer las consultas. |
--source-port <puerto> | Si un sistema, ya sea de origen o destino, bloquea solicitudes, pero descubrimos puertos que pueden estar libres, como el 53 en la mayoría de los casos, podemos enviar la solicitud por ese puerto para bypassar el sistema. |
INTERPRETACIÓN DE S.O. SEGÚN TTL | |
ttl 64 | Posibles S.O.: Linux, MacOS, Android, FreeBSD |
ttl 128 | Posibles S.O.: Windows |
ttl 255 | Posibles S.O.: Cisco IOS, Solaris |
otros | El ttl es un valor que se puede cambiar, por lo tanto la identificación se puede realizar mediante firmas usando -O. |
INTERPRETACIÓN DE TIEMPOS DE RESPUESTA | |
SENT (0.0381s) TCP nosotros > destino S ...
SENT (1.0411s) TCP nosotros > destino S ... … Nmap done: ... scanned in 2.06 seconds |
Este caso llamado dropped se puede ver que se envia 2 paquetes SYN y en ninguno responde, dando un mayor tiempo de espera para intentar recibir una respuesta.
Posible causa: Un firewall descarta la conexión y no envía un paquete de vuelta haciéndonos esperar más tiempo. |
SENT (0.0381s) TCP nosotros > destino S ...
RCVD (0.0487s) ICMP [destino Port unreachable (type=3/code=3) … Nmap done: ... scanned in 0.05 seconds |
Este caso llamado rejected se puede ver que se envia 1 paquete SYN y el firewall rechaza la conexión con una paquete ICMP. Gracias a esto se espera mucho menos tiempo al recibir una respuesta. |
INTERPRETACIÓN DEL ESTADO DE UN PUERTO | |
'open' | Se estableció la conexión al puerto con TCP, UDP o SCTP. |
'closed' | Se rechaza la conexión con la bandera RST. |
'filtered' | No se puede saber su estado. El firewall puede hacer: reject o drop. |
'unfiltered' | Solo pasa en el scan TCP-ACK donde se puede acceder al puerto pero no se puede determinar su estado. |
'open|filtered' | Cuando un firewall o filtro de paquetes protege un puerto y no se obtiene una respuesta. |
'closed|filtered' | En un IP ID idle scan, indica que no se pudo saber si el puerto está cerrado o bloqueado por un firewall. |
RECOGER INFORMACIÓN | |
curl <objetivo>:<puerto> | Muchos servidores al hacer esta solicitud devuelven un banner que puede contener información del sistema.
Los servidores web se encuentran entre los servicios más atacados porque se hacen accesibles y presentan un alto potencial de ataque. |
smbclient -L //<objetivo>/ -N | Al realizar esta conexión al puerto 443 (SMB) nos permitirá ver recursos compartidos accesibles, permisos e información del host.
Podemos probar a acceder a cada recurso compartido (share) sin contraseña y, una vez dentro aparecerá un prompt con "smb: \>". Comando: smbclient /<IP>/<share> -N (-N: Modo sin credenciales; -L: Listar recursos compartidos) |
ftp <objetivo> <puerto> | Con una conexión ftp podemos probar a autentificarnos con anonymous y ver información. |
telnet <objetivo> <puerto> | Con una conexión telnet podemos intentar conectarnos en remoto al puerto 23 y probar si el servidor deja autentificarse como root sin contraseña. |
netcat -nv -p <puerto_origen> <objetivo> <puerto_objetivo> | Si vemos que el destino acepta conexiones si las enviamos desde un puerto determinado, podemos manipular ese campo y conectarnos para así obtener más información. IMPORTANTE: El puerto 53 junto a otros es un servicio esencial y, en algunos casos, nos permite conectarnos si lo configuramos como puerto de origen. |