nmap: ejemplos de comandos útiles
Si no has trabajado en temas de seguridad seguramente necesite presentar a nmap, en caso contrario no necesita presentaciones. Para los que no lo conozcan aún, decir que nmap es una herramienta de código abierto muy práctica. Sirve para rastrear puertos, servicios y otro tipo de información de una máquina remota. Fue escrita originalmente por Gordon Lyon, aunque hoy día participe una gran comunidad en su desarrollo.
Gracias a ella se puede testar la seguridad de diversos sistemas informáticos, descubriendo servicios u ordenadores conectados a una red para intentar conseguir información sobre ellos y ver algunas posibles vulnerabilidades o puntos de entrada. Para que eso sea posible, esta herramienta escrita en varios lenguajes de programación enviará una serie de paquetes de red definidos a otros equipos de la red y analizará sus respuestas…
La cantidad de opciones que posee es muy grande. Por tanto, también puede ofrecer gran cantidad de funciones. Incluso se pueden usar los diversos parámetros que le puedes pasar al comando para adaptarse a diferentes tipos de latencia y congestión, evadir ciertas barreras y realizar varios tipos de escaneos que ahora analizaremos.
Ejemplos prácticos de nmap
Nmap es una herramienta muy compleja, y no se explica su uso desde el principio, pero sí que voy a mostrar algunos ejemplos prácticos reales muy interesantes. Para ello, voy a crear varias categorías y en cada una de ellas explicar algunos casos de aplicación. Además, tampoco explico cómo se instala esta herramienta, que no suele venir instalada por efecto en la mayoría de distribuciones GNU/Linux, solo en las destinadas a seguridad como Kali Linux, Parrot OS Security, etc.
Ten paciencia, en ocasiones puede arrojar datos muy rápidamente, en otros casos podría tardar un rato en mostrarlos. Así que no te desesperes, aunque parezca que la herramienta no está haciendo nada, estará analizando. Puedes tomar un café mientras o hacer algo para distraerte… Pero al final, dará sus resultados.
Además, te recomiendo que uses máquinas virtuales o tus propios dispositivos de casa para evitar problemas. Practica con eso y así no tendrás tentaciones de meterte en problemas mayores… Desde LxA no nos hacemos responsables de para qué lo uses.
Si no te simpatiza demasiado trabajar con la línea de comandos, tienes la opción de usar Zenmap, una GUI oficial para este proyecto y así facilitar un poco las cosas…
Barrido de ping
Algunos ejemplos para realizar un barrido de ping con nmap, es decir, un método para establecer el rango de IPs que están asignadas a los hosts. Dicho de otro modo, para descubrir dispositivos en línea dentro de una red o rango. Para ello, tan solo tienes que ejecutar el siguiente comando (ambos son equivalentes):
nmap -sP nmap -sn
Pero si lo que quieres es descubrir todos los hosts de una red de clase C, puedes modificar el anterior comando y ejeuctarlo de esta otra forma:
nmap -sP 192.168.0.*
El * es un carácter comodín, es decir, representa cualquier valor. Pero también puedes filtrar o afinar un poco más al usar nombres de hosts (p.e.: server1.ejemplo.com), direcciones IPs concretas, rangos (p.e.: 192.168.1.1-20), una subred (p.e.: 192.168.1.0/24).
Definir puertos en el escáner
Para definir puertos con nmap, puedes usar la bandera -p seguido del número de puerto concreto que quieres analizar o también una lista de puertos separados por comas para hacerlo sobre varios:
nmap -p 80, 21 192.168.0.*
También puedes especificar rangos, como sucedía con las IPs, para ello, puedes usar el guión para definir el principio y final del escaneo:
nmap -p 21-80 linuxadictos.com
Y se pueden usar rangos de IPs y de puertos a la vez, incluso varios tramos de rangos, la verdad es que las combinaciones son bastante grandes. Usa tu imaginación, pero aquí tienes otro ejemplo de ello:
nmap -p 21-23,1000-2000 192.168.1.1-14
El anterior comando buscaría solo entre los puertos 21 y 23, 100 hasta 2000 y saltaría el resto de puertos. Con las IPs algo similar, desde la 1 a la 192.168.1.14.
Escáner ARP
Un escáner con el protocolo ARP se puede hacer de forma bastante sencilla. Lo puedes hacer normal o sin ARP como muestro en estos dos ejemplos respectivamente:
nmap -sP -PR 192.168.*.* nmap -sn --disable-arp-ping 192.168.0.*
Nuevamente vuelvo a repetir, con este tipo de sondeo rápido y fiable por ARP, también puedes jugar con rangos de puertos, rangos de IPs, nombres de dominio, etc. Los puedes ir combinando como te plazca…
Escáner FIN
Es un sondeo más agresivo. Ya sabes que existen tres tipos fundamentales de escaneo, el NULL (-sN), FIN (-sF) y Xmas (-sX). El primero no activa ningún bit, el flag de la cabecera de TCP es 0. En el segundo caso, que es el que nos importa para este ejemplo, se usa el bit FIN. En el último caso, se usan los flags FIN, PSH y URG.
Unos ejemplos con FIN serían:
nmap -sF -T4 192.168.1.4-8 nmap -sF -T2 192.168.1.6
Por cierto, -T es para especificar templates de Timing. Los nombres son paranoid o 0, sneaky o 1, polite o 2, normal o 3, agressive o 4 e insane o 5. Puedes especificar el que necesites en cada momento, por ejemplo -T4 es el recomendado para una red local. Eso puede ser en función de si quieres evadir ciertos mecanismos de defensa, según el ancho de banda, etc.
Escáner NULL
El siguiente tipo de escáner: NULL. Ejemplos de cómo se haría este tipo de sondeo:
nmap -v -sN -p 8080 server1.ejemplo.com nmap -sN -T5 192.168.1.4
Como vez en esos ejemplos, también se pueden usar los templates que he comentado antes… No quiero ser repetido, pero ya sabes que puedes ir combinando las opciones y parámetros como quieras, con bastante flexibilidad.
Recuerda que tanto NULL, XMAS y FIN no pueden distinguir entre puertos abiertos y filtrados en muchos escenarios. Para ayudar a nmap a que los pueda distinguir, puedes usar la opción -sV:
nmap -sN -T2 -sV -p 80,21,23 192.168.4.1
Escáner Xmas
El sondeo “Navidad”
nmap -sX -T2 -v2 -p 80 192.168.1.4
En este caso he introducido otra nueva variable, y es -v, que especifica el nivel de detalle que quieres. En este caso es 2, en vez del modo verbose normal que sería con -v. Se puede aplicar a los anteriores comandos también si lo necesitas.
Más ejemplos con nmap
A parte de los anteriores, también puedes usar otras de la enorme cantidad de opciones de las que dispone nmap. Por ejemplo, si quieres descubrir el tipo de sistema operativo en un sondeo, puedes usar la opción -O:
nmap -sV -O -v 192.168.4.1
Por otro lado, tienes que conocer que nmap puede usar una serie de scripts muy prácticos que pueden extender aún más sus capacidades y encontrar, por ejemplo, vulnerabilidades. Para actualizar la base de scripts de nmap usa:
nmap --script-updatedb
Para usar estos scripts, puedes hacer lo siguiente:
nmap -f -sS -sV --script auth 192.168.4.4
Observa que he usado auth, pero puedes usar más opciones:
- 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
También puedes usar script específicos para descubrir una vulnerabilidad concreta. Por ejemplo la SMB ms08-067:
nmap -p 445 --script smb-vuln-ms08-067 192.168.4.*
La cantidad de herramientas disponibles como ves son muy numerosas. Otra opción más, y con esto ya termino, sería realizar una comprobación de si es vulnerable a un ataque de fuerza bruta contra el protocolo SSH:
nmap --script ssh-brute.nse 192.168.41.14
Más información
Para más información, puedes usar el comando man en tu distro y también este otro manual online. Allí encontrarás todo lo que necesitas saber sobre esta compleja herramienta.
man nmap
No obstante, espero que estos ejemplos te sirvan de algo, ya sabes que puedes dejar tus comentarios…