Tutorial de Nmap
Buenas tardes amigos el dia de hoy tenemos un pequeno tutorial preparado para Nmap ("Network Mapper").
Nmap es una de las herramientas mas populares entre todos los profesionales de cyberseguridad y adminitradores en redes, por su versatilidad y facil uso. Nmap nos permite encontrar los servidores, computadores/ordenadores que son parte de una red, tambien nos permite encontrar los puertos y servicios de estos servidores, y nos permite ejecutar subrutinas (llamados scripts) que nos adaptarnos a cualquier red.
Nmap puede ser instalado en Linux, MacOS y Windows, sin embargo se prefiere el uso de nmap dentro de Linux dado a que todos los scripts y la mayoria del soporte esta orientado a Linux. Este tutorial estara completamente dirigido para los usuarios Linux, mas especificamente para Kali Linux.
Para descargar Nmap e instalarlo en tu equipo, porfavor visita el sitio oficial de Nmap "https://nmap.org/" .
Basicamenete podemos correr manejador de paquetes de Linux e instalar nmap desde la terminal. En distribuciones basadas en Debian (Ubuntu, Kali, etc) basta con un apt install nmap.
Para verificar la instalacion, podemos ejecutar el comando nmap -V para ver la version de nmap, que al momento de escribir esta nota es 7.93
Ahora, para facilitar este ejericio, he creado una pequena red local donde se encuentran un switch (192.168.1.1), 2 servidores (192.168.1.121 y 192.168.1.249) y mi equipo para escanear la red (192.168.1.250), ademas de otros servidores. todos ellos se encuentran en la red 192.168.1.0/24. Espero el siguiente diagrama pueda esclarecer y dar mejor visibilidad de la red.
Ping Sweep
Si quisieramos mandar un "ping" a las 256 direcciones IP dentro de la red 192.168.1.0/24 (es decir, 192.168.1.0-255), con el fin de descubrir otros sistemas dentro de la red lo hariamos de la siguiente manera, usando el comando nmap -sn 192.168.1.0/24. A esto se le conoce como "ping sweep".
Si analizamos el resultado, encontramos 6 sistemas dentro de la red, sin embargo para simplificar este tutorial solo nos enfocaremos en los sistemas mencionados anteriormente.
Tambien me gustaria mencionar que Nmap generalmente envia paquetes "ping" cuando se usa la opcion "-sn", sin embargo nmap tambien puede mandar paquetes SYN de TCP a los puertos 80 y 443, o simplemente mandar paquetes ARP en el caso de ser un super usuario.
Escaneo con un Archivo de Texto como Input
Ahora, si tenemos una lista de direcciones IP en un archivo de texto; Nmap tambien puede leer el archivo, y esto se ejecuta con la opcion "-iL". Si quisieramos mandar paquetes "ping" a los servidores dentro de una lista lo hariamos con el comando "nmap -sn -iL lista_de_servidores.txt". Me he tomado la libertad de escribir las direcciones IP de nuestros dos servidores (192.168.1.121 y 249) en la litsa "lista_de_servidores.txt" para ejecutar el comando.
El primer comando "cat lista_de_servidores.txt" simplemente imprime el contenido del archivo "lista_de_servidores.txt", el segundo comando, ejecuta Nmap con un "ping sweep" a los servidores que se encuentran dentro del archivo "lista_de_servidores.txt". Al analizar los resultados nos damos cuenta de que Nmap encontro los dos servidores en linea.
Guardar Output en Archivo
Para analizar sistemas grandes con bastantes servidores, o si simplemente necesitamos guardar los resultados para un reporte, nmap nos permite guardar los resultados de varias opciones: La opcion "-oN" nos permite digir el output (o guardar) en formato Nmap (texto); la opcion "-oX" no permite guardar los resultados en formato XML (util para algunas APIs que necesitan los resultados en forma estructurada como Zenmap). y finalmente la opcion -oG nos permite guardar los resultados de cada servidor en una sola linea (grepable), el cual es util cuando al usar herramientas de busqueda y filtrado como GREP, y nos visualiza los los resultados de una solo linea.
Para mantener este tutorial sencillo, usaremos unicamente la opcion "-oN", asi para guardar nuestro ping sweep inicial usaremos el siguiente comando: "nmap -sn 192.168.1.0/24 -oN ping_sweep_resultados.txt".
En este ejemplo nos podemos dar cuenta que Nmap guarda los resulta en el archivo "ping_sweep_resultados.txt", y despues usamos el comando "cat" para ver sus contenidos.
Escaneo Predeterminado
Ahora vamos a realizar un escaneo predeterminado de cada uno de los dos servidores. El comando que vamos a ejecutar es "nmap" acompanado con la direccion IP de cada uno de los servidores.
Lo que vemos en el resultado son lo puertos de cada uno de los servidores de los que en Nmap encontro "abiertos" y es posible establecer una conexion TCP usando ese puerto.
El formato de los resultados es simple: Numero de puerto, Estado del puerto, el Tipo de servicio detras del puerto. En este punto Nmap simplemente asume el tipo de servicio que esta detras del puerto, para encontrar realmente el tipo de servicio y su version instalada, se tienen que ejecutar Nmap con scripts, pero eso discutiremos mas adelante en este tutorial. Mientras tanto, creo que es importante al menos mencionar que es lo que Nmap hizo para obtener estos resultados. En un escaneo predeterminado de Nmap, primero se manda un paquete "ping" para verficar que el servidor este en linea, seguido se escanean los primeros 1000 puertos mas comunes, por lo cual Nmap manda paquetes SYN de TCP, si el servidor responde con un SYN-ACK por un determinado puerto, Nmap completa el TCP handshake mandando un paquete ACK. Y finalmente Nmap imprime los resultados.
En el primer servidor (SQL01, 192.168.1.121) nos damos cuenta que tiene 5 puertos abiertos: 80, 135, 139, 445, 1433. Mientras que el segundo servidor (SQL02, 192.168.1.249) tiene unicamente 3 puertos abiertos: 22, 80, 3306.
Escaneo con Deteccion de Version y Deteccion de Sistema Operativo
Ahora, para evitar mandar "ping" o paquetes de descubrimiento cada vez que escaneamos un servidor, usaremos la opcion "-Pn", tambien vamos a especificar unicamente los puertos que ya decubrimos y asi evitar seguir mandando paquetes a puertos cerrados, esto lo podemos realizar con la opcion "-p". Finalmente usaremos la opciones "-sV" para detectar la version de cada puerto y la opcion "-O" para tratar de descubrir el sistema operativo del servidor. Entonces el comando a ejecutar sera el siguiente: "nmap -Pn -p 80,135,139,445,1433 -sV -O 192.168.1.121" para el primer servidor y "nmap -Pn -p 22,20,3306 -sV -O para el segundo servidor". No olvidemos que la opcion -O require ser super usuario, por la tanto necesitamos la usar el comando sudo junto con nuestro comando nmap para ejecutar todo el comando completo como super usuario.
Al ver los resultados nos damos cuenta que Nmap nos permite ver la version de cada servicio que esta destras de cada puerto en cada servidor. El primer servidor (SQL01) esta ejecutando varios servicios, entre ellos Internet Information Services (Microsoft IIS version 10, l cual es el servidor web predeterminado de Microsoft) en el puerto 80, SQL Server en el puerto 1433; tambien podemos ver que nmap detecta que el servidor es Windows Server 2016.
Al ver los resultados del 2do servidor (SQL02), nos damos cuenta de que tiene servicios como OpenSSH 8.9 para Ubuntu, Apache 2.4 (Servidor Web) y en el puerto 3306 esta MariaDB. Tambien Nmap nos detecta que el servidor es Linux.
Scripts: Escaneo con Scripts Predeterminados
Una de las mas grandes ventajas de nmap es que es muy flexible y que se pueden crear scripts (rutinas/automatizacion) para que nmap los ejecute. Tambien Nmap cuenta con una amplia lista de scripts que nos permite descubrir aun mas cosas de un servidor. Nmap tiene un modulo llamado "Motor de Scripts de Nmap" (Nmap Scripting Engine [NSE]) el cual se encarga de ejecutar los scripts. Para ejecutar los scripts predeterminados de nmap usamos la opcion "-sC", a estos scripts se le conocen como escripts seguros, sin embargo aun siguen siendo intrusivos, asi que cualquier escaneo despues de este punto debe ser cuidadosamente planeado y autorizado, con el fin de evitar un mal uso. El comando que utilizaremos para ejecutar los scripts predeterminados seran "nmap -Pn -sV -sC -p 80,135,139,445,1433 192.168.1.121" para el primer servidor, y "nmap -Pn -sV -sC -p 22,80,3306 192.168.1.249" para el segundo servidor.
Al analizar los resultados nos damos cuenta de que tenemos aun mas informacion acerca de cada servidor. Parte de los scripts predeterminados que se ejecutaron incluyen metodos para descubrir LDAP, SMB, HTTP, etc. En el servidor Windows (SQL01) no damos enteramos del tipo de autenticacion utilizado para SMB (puerto 445). Tambien nos damos cuenta de que los dos servidores en web en SQL01 y SQL02 tienen una instalacion predeterminadas, simpletemente por los titulos: "It Works!" en Apache y "IIS Windows Server" para IIS.
Scripts: Escaneo Agresivo
Siguiente podemos utilizar la opcion "-A" para que Nmap escanee con la opcion the scripts agresivos, estos scripts incluyen los scripts predeterminados y otros a se les considera agresivos. Por lo tanto ejecutaremos el siguiente comando: "nmap -Pn -sV -A -p 80,135,139,445,1433 192.168.1.121" para el servidor SQL01 y "nmap -Pn -sV -A -p 22,80,3306 192.168.1.249" para SQL02.
Scripts: Escaneo con uno o mas Scripts especificos
Tambien es posible usar nmap para escanear utilizando un script en especifico, para ello se utiliza la opcion "--script". En ejemplo usaremos el script "smb-enum-share" para enumerar los directorios compartidos del servidor SQL01. Recordemos que Windows utiliza el protocolo SMB para compartir directorios con otros dispositivos en la red, y tambien recordemos que SMB utiliza el puerto 445 y el puerto 139 para compatibilidad con el protocolo viejo de NetBIOS. Por lo tanto nuestro comando sera el siguiente: "nmap -Pn -sV -p 139,445 --script smb-enum-shares 192.168.1.121".
Al analizar los resultados nos damos cuenta que Nmap descubrio 4 directorios compartidos: ADMIN, C, IPC y USERS. El Contenido de cada uno de estos directorios es irrelevante para este tutorial, sin embargo pudimos demostrar la capacidad y versatilidad de Nmpa para ejecutar scripts. Tambien es posible ejecutar mas de un script al mismo tiempo, por ejemplo si quisieramos ejecutar todos los scripts disponibles para enumerar SMB, podemos usar la siguiente sintaxis: "nmap --script smb-enum-script1,smb-enum-scrip2,...", y tambien podemos hacerlo mas eficiente al usar el comodin "*" y asi ejecutar todos los scripts que comiencen con "smb-enum". Los scripts que Nmap lleva instalados por predeterminado que co mienzan con smb-enum son los siguientes: smb-enum-shares, smb-enum-groups, smb-enum-processes, smb-enum-services, smb-enum-sessions, smb-enum-domains, smb-enum-users. Por lo tanto nosotros ejecutaremos el siguiente comando: "nmap -Pn -sV -p 139,445 --script smb-enum-* 192.168.1.121".
Podemos ver en el resultado que Nmap ejecuto los scripts, y aunque en esta ocasion no hubo resultados adicionales, podemos darnos cuenta de la manera de ejecutar varios scripts especificos.
Aqui puedes encontrar la documentacion oficial y una lista de los scripts disponibles para usar con nmap: "https://nmap.org/nsedoc/scripts/".
Dada a la versatilidad de Nmap; nos tomaria mucho tiempo en mencionar y explorar todas sus opciones, por ejemplo este tiene la opcion de escanear direcciones IP en version 6 (IPv6) con la opcion "-6". Tambien escanear puertos UDP con la opcion "-sU"; y hasta es posible cambiar la velocidad del escaneo en nmap con la opcion "-T". Sin embargo para mantener corto este tutorial exploraremos todas esas opciones en otra entrada de este Blog.
Conclusion
Nmap es una de las herramientas mas populares entre la comunidad de Administradores de Redes y Analistas de Securidad, simplemente por su versatilidad y poder.
Comentarios
Publicar un comentario