domingo, 8 de noviembre de 2020

TryHackMe: Nmap y algunas de sus opciones

 

Aquí os traigo un pequeño resumen sobre qué es la herramienta Nmap, cómo funciona y algunas de sus opciones. Nmap es un escáner de puertos que se utilizar mucho en técnicas de hacking ético (y también algunos no tan éticos), y es muy útil a la hora de determinar algunas de las vulnerabilidades del objetivo del ataque.

Este artículo es otra de mis traducciones de TryHackMe, en este caso de la sala de Nmap, aunque le he cambiado alguna cosilla que he considerado no sería demasiado útil o sería algo lioso para aquellos que no estéis familiarizados con herramientas de este tipo y con el sistema operativo Linux, que es donde se usa Nmap mayoritariamente.

Cabe decir que Nmap viene preinstalado en algunas distribuciones de Linux, como por ejemplo Kali Linux (que es la que yo utilizo). Kali Linux trae varias herramientas preinstaladas, por lo cual es la distribución que recomiendo a todo aquél o aquélla que quiera adentrarse en este mundillo.

Y sin más dilación, vamos al tema.

Introducción al escaneo de puertos

Cuando hablamos de hacking, el conocimiento es poder. Cuanto más conocimiento tengas sobre un sistema objetivo o una red, más opciones de tenerlo disponible. Esto hace que sea imperativo realizar una numeración adecuada antes de realizar cualquier intento de explotación.

Digamos que se nos ha dado una IP (o varias direcciones IP) para realizar una auditoría de seguridad sobre ellas. Antes de hacer nada, debemos hacernos una idea de cuál es el escenario que estamos atacando. Esto significa que necesitamos establecer qué servicios están corriendo en nuestro objetivo.

Por ejemplo, quizás uno de ellos sea un servidor web, y otro esté actuando como Windows Active Directory Domain Controller. Lo primero que debemos hacer para establecer este “mapa” del escenario es lo que se llama un escaneo de puertos. Cuando un ordenador corre un servicio de red, abre un elemento en la red llamado “puerto” para recibir la conexión.

Los puertos son necesarios para realizar múltiples peticiones de red o tener distintos servicios disponibles. Por ejemplo, cuando cargas muchas páginas a la vez en un navegador web, el programa debe tener una forma de determinar qué pestaña carga qué página. Esto se hace estableciendo conexiones a servidores web remotos utilizando diferentes puertos en tu máquina local.

De la misma forma, si quieres que un servidor sea capaz de correr más de un servicio (por ejemplo, quizás quieras que tu servidor web corra ambas versiones de la página web, HTTP y HTTPS), entonces necesitas una forma de direccionar el tráfico al servicio apropiado. Una vez más, los puertos son la solución a esto.

Las conexiones en red se realizan entre dos puertos, un puerto abierto para escuchar en el servidor y un puerto seleccionado aleatoriamente en tu ordenador. Por ejemplo, cuando conectas a una página web, tu ordenador podría abrir el puerto 49534 para conectar al puerto del servidor 443.


Como en el ejemplo anterior, el diagrama muestra qué ocurre cuando conectas a numerosos sitios web al mismo tiempo. Tu ordenador abre en cada caso un puerto alto distinto (aleatoriamente), el cual se usa para sus comunicaciones con el servidor remoto.

Cada ordenador tiene un total de 65535 puertos disponibles; de todas formas, algunos de ellos están registrados como puertos estándar. Por ejemplo, un servicio web HTTP se puede encontrar casi siempre en el puerto 80 del servidor. Un servicio web HTTPS se puede encontrar en el puerto 443. Windows NETBIOS se encuentra en el puerto 139 y SMB en el puerto 445. Es importante tener esto en cuenta: hay 1024 puertos considerados como conocidos. De todas formas, especialmente en un CTF (Catch The Flag – Atrapa La Bandera), no es raro que incluso estos puertos se encuentren alterados, haciendo más imperativa aún la realización de una enumeración apropiada del objetivo.

Si no sabemos cuáles de estos puertos están abiertos, no tenemos ninguna esperanza de atacar con éxito el objetivo; debido a ello, es crucial que empecemos cualquier ataque con un escaneo de puertos. Esto se puede llevar a cabo de distintas formas, aunque la más habitual es el uso de una herramienta llamada Nmap, la cual es el tema central de esta sala.

Nmap se puede usar para realizar distintos tipos de escaneo de puertos. Los más habituales serán introducidos en las siguientes tareas. De todos modos, la teoría básica es esta: Nmap conectará a cada puerto del objetivo por turnos. Dependiendo de la respuesta que obtenga del puerto destino, éste será determinado como abierto, cerrado o filtrado (habitualmente por un cortafuegos). Una vez que sepamos qué puertos están abiertos, podemos ver y enumerar qué servicios están corriendo en cada puerto, ya sea manualmente o mediante el mismo Nmap.

Pero, ¿por qué Nmap? La respuesta corta es que ahora mismo es el estándar de la industria por una razón: ningún otro escáner de puertos se acerca a su funcionalidad (aunque algunos recién llegados empiezan a igualarlo en velocidad). Es una herramienta extremadamente potente, y lo que la hace aún más poderosa es su motor de scripting, el cual puede usarse para escanear vulnerabilidades y, en algunos casos, incluso realizar la explotación directamente. Una vez más, esto será visto en tareas próximas.

Por ahora, es importante que entiendas qué es un escáner de puertos, por qué es necesario y que Nmap es la herramienta a elegir para cualquiera que se inicie en esta enumeración.

 

Opciones de Nmap

Aquí os muestro algunas de las opciones más comúnmente utilizadas en Nmap. Cuando la opción contiene una palabra completa, introduciremos dos guiones antes de la palabra, mientras que para las abreviaturas solo usaremos uno. Para todas las opciones escribiremos nmap seguido de la opción:

-          Para acceder al menú de ayuda de la herramienta, escribe --help o -h.

-          Para realizar un escaneo sigiloso, la primera opción para un escaneo SYN es -sS.

-          El escaneo UDP no es tan útil, pero para realizarlo deberemos escribir -sU.

-          Si queremos detectar el sistema operativo del objetivo, usaremos la opción -O.

-          Para saber la versión del servicio corriendo en un puerto, utilizaremos -sV.

-          La opción para un escaneo verboso es -v, y para un escaneo muy verboso, -vv.

-          Para guardar los resultados de un escaneo en un documento xml, la opción es -oX.

-          Los escaneos agresivos pueden ser útiles allí donde otros no nos dan el resultado deseado, si no nos importa hacer mucho ruido. La opción será -A.

-          Si queremos escanear un puerto concreto, utilizaremos -p.

-          Si deseamos usar un script del motor de scripting de nmap, utilizaremos --script.

-          Y si queremos correr todos los scripts para una vulnerabilidad, --script vuln.

-          Por último, si no queremos hacer ping al host, utilizaremos -Pn.

No hay comentarios:

Publicar un comentario