Hacking ético: identificación de servicios con nmap
Tabla de contenidos
En el post anterior de hacking ético explicamos brevemente varias opciones para obtener una enumeración de direcciones IP y subdominios al realizar un proceso de hacking ético. Si te gustó que » esto es muy seguro porque quién va a saber que este subdominio existe «(que aunque no lo creas, es más común de lo que parece), no te pierdas cómo el»quién va a saber que pongo este servicio en este puerto con un número tan extraño»
En definitiva, en este post intentaremos ver cómo es posible hacer un inventario de puertos abiertos en una IP o rango de IPs, e incluso identificar la tecnología bajo un puerto abierto, cuando esto sea posible. Básicamente, este post se va a centrar en el uso de una herramienta fantástica y esencial, nmap. Aunque es una herramienta que se usa típicamente en Linux (y por supuesto incluida en la suite de referencia que uso en estos posts, Kali), ya se pueden encontrar compilaciones para otros sistemas operativos.
Antes de ir a trabajar, queremos advertir que nmap es una herramienta compleja y completa, con una gran cantidad de opciones, parámetros, etc.; Este post no pretende ser un manual para el uso de la herramienta, sino una introducción a la misma para entender la identificación de los servicios como una fase de piratería ética previa a la detección de vulnerabilidades. Para obtener más información sobre la herramienta, recomendamos leer su manual.
La herramienta nmap de Código Abierto permite realizar escaneos de red y puertos, pudiendo escanear un único destino, un rango, una lista de IPs Based Basados en TCP, UDP, ICMP, peticiones SCTP, etc. e incorpora varias técnicas de escaneo. En general, recomendamos actualizar algunos conocimientos sobre los protocolos de transporte, por ejemplo, recordar cómo funciona el establecimiento de una conexión TCP con la negociación en tres pasos: primero, llamada de tipo SYN del cliente a un puerto, respuesta RST si el puerto está cerrado o SYN-ACK si está abierto, y el ACK del cliente al servidor para completar el proceso. Nmap se basará en este tipo de mensajes para determinar si un puerto está escuchando o no en el destino. A veces, esto no se puede usar, o es detectado por el servidor remoto, y hay otras alternativas para escanear.
Sintaxis general
nmap { }
Nuestro primer escaneo
Podemos ejecutar el siguiente comando:
nmap 45.33.49.119
No estamos poniendo ningún tipo de encuesta, así que use la encuesta predeterminada, TCP SYN. nmap envía un SYN y asume que el puerto está abierto si recibe un SYN ACN. Tampoco hay un parámetro adicional de opciones, y como destino hay una única IP. Este comando nos dará un resultado similar al siguiente:
Starting Nmap 7.70 ( https://nmap.org ) at 2019-10-01 18:12 CESTNmap scan report for ack.nmap.org (45.33.49.119)Host is up (0.19s latency).Not shown: 993 filtered portsPORT STATE SERVICE22/tcp open ssh25/tcp open smtp70/tcp closed gopher80/tcp open http113/tcp closed ident443/tcp open https31337/tcp closed EliteNmap done: 1 IP address (1 host up) scanned in 10.86 seconds
Devolver en unos segundos una lista de puertos abiertos en esa IP, incluyendo un SSH, un servidor de correo SMTP, un servidor web y un posible orificio de retorno (https://www.speedguide.net/port.php?port=31337).
En muchos casos, esto es simplemente un primer punto de análisis, aunque, por ejemplo, el software detrás de un servidor FTP, SSH, etc., está completamente actualizado y no hay vulnerabilidades conocidas. Podría iniciar, por ejemplo, un ataque de fuerza bruta con un diccionario en el SSH o FTP que intenta acceder (hay un gran número de servidores de este tipo con credenciales predeterminadas o inseguras).
Hay herramientas automáticas (bots) que básicamente escanean continuamente amplios rangos de direcciones IP en busca de puertos abiertos reconocibles, por ejemplo, bases de datos (MongoDB, MySQL, PostgreSQL, etc.).), y cuando detectan un puerto abierto, intentan automáticamente un inicio de sesión con credenciales predeterminadas. Por ejemplo, en el caso de instalaciones típicas de LAMP / WAMP, un acceso root / al puerto MySQL. Y básicamente, un gran número de bases de datos han sido pirateadas sin intervención humana previa. Esto es viable incluso si lo tenemos abierto en otro puerto, ya que es posible identificar en muchos casos que lo que está en el puerto 5555 «engañar», por decir algo, es un MySQL a través de la huella digital del servicio, como veremos más adelante.
En resumen, es muy peligroso dejar credenciales por defecto en servidores web, routers, FTPs, SSHs, bases de datos because porque nadie necesita tener manía, un bot lo hará.
Un primer parámetro
Si queremos tener alguna información sobre cómo nmap ha obtenido esta información, podemos aumentar las trazas con el parámetro-v (verbose) o-vv, donde podemos ver que nmap ha estado emitiendo comandos SYN y en algunos casos recibiendo RESET (puerto cerrado), en otros SYN-ACK (puerto abierto) y en otros sin respuesta («filtrado»), lo que puede hacernos entender que un firewall está deteniendo nuestra solicitud:
PORT STATE SERVICE REASON22/tcp open ssh syn-ack ttl 5325/tcp open smtp syn-ack ttl 5370/tcp closed gopher reset ttl 5280/tcp open http syn-ack ttl 53113/tcp closed ident reset ttl 52443/tcp open https syn-ack ttl 5331337/tcp closed Elite reset ttl 53
Aumentar el rango de IPs para escanear
nmap 192.168.10.0/24 (subred completa)nmap 192.168.10.1-20 (20 IPs)nmap 192.168.10.*nmap 192.168.10.1 192.168.10.2 192.168.10.3
O, por ejemplo, imagine que hemos estado acumulando IPs a partir de nuestra enumeración inicial, y tenemos un archivo con las diferentes ips separadas por pestañas o saltos de línea (una IP o rango por línea). Podemos cargar el archivo con el parámetro-iL (lista de entrada) y así escanear todo el inventario de IP. También permite, por ejemplo, excluir algunas direcciones IP específicas con-exclude o-excludefile.
Definir los puertos a escanear
Podemos definir manualmente los puertos que queremos escanear. Por ejemplo, si buscamos servidores web en los puertos 80, 443 y 8080 en una subred, podríamos hacerlo con el parámetro-p:
nmap -p 80,443,8080 192.168.10.0/24
También podemos pedirle a nmap que escanee los » N » (enteros) puertos más comunes; por ejemplo, para escanear los 25 puertos más comunes en un rango de IPs:
nmap --top-ports 25 192.168.10.0/24
Recibir una respuesta como esta:
PORT STATE SERVICE21/tcp closed ftp22/tcp open ssh23/tcp closed telnet25/tcp closed smtp53/tcp open domain80/tcp open http110/tcp closed pop3111/tcp open rpcbind135/tcp closed msrpc139/tcp open netbios-ssn143/tcp closed imap199/tcp closed smux443/tcp closed https445/tcp open microsoft-ds587/tcp closed submission993/tcp closed imaps995/tcp closed pop3s1025/tcp closed NFS-or-IIS1720/tcp closed h323q9311723/tcp closed pptp3306/tcp closed mysql3389/tcp closed ms-wbt-server5900/tcp open vnc8080/tcp closed http-proxy8888/tcp closed sun-answerbook
Podemos pedir que se escaneen todos los puertos TCP, UDP y SCTP (más lentos) con el identificador p:
nmap -p- 192.168.10.0/24
Identificación de sistemas operativos y servicios
Como vemos, nmap nos permite detectar puertos que están escuchando en una IP o un rango. Más adelante también veremos cómo se pueden definir otras técnicas de encuesta. Además, nmap nos permite intentar identificar qué tecnología (producto, versión, etc.).) está detrás de un puerto abierto, o incluso del sistema operativo instalado en un servidor, con los parámetros-O y-sV. Esta detección se basa en la «firma» (huella digital) de las respuestas que el servicio da a ciertas llamadas.
nmap -O -sV 192.168.10.5
PORT STATE SERVICE VERSION22/tcp open ssh OpenSSH 6.7p1 Raspbian 5+deb8u3 (protocol 2.0)53/tcp open domain ISC BIND 9.9.5 (Raspbian Linux 8.0 (Jessie based))80/tcp open http Apache httpd 2.4.10 ((Raspbian))111/tcp open rpcbind 2-4 (RPC #100000)139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)445/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)4567/tcp open http Jetty 9.4.8.v201711215900/tcp open vnc RealVNC Enterprise 5.3 or later (protocol 5.0)MAC Address: B8:27:EB:CD:FE:89 (Raspberry Pi Foundation)Device type: general purposeRunning: Linux 3.X|4.XOS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4OS details: Linux 3.2 - 4.9Network Distance: 1 hopService Info: Host: RASPBERRYPI; OS: Linux; CPE: cpe:/o:linux:linux_kernel
En este caso, no solo sabemos que esta máquina tiene ciertos puertos abiertos. También nos dice que se trata de una Frambuesa que ejecuta Raspbian (con la que, por ejemplo, podríamos hacer una prueba de fuerza bruta con un usuario «pi», que es el usuario predeterminado), y las versiones de los diferentes puertos que están escuchando, para que esta información pueda ser utilizada para explotar vulnerabilidades sobre versiones no parcheadas, etc.
Usando más técnicas de sondeo
De forma predeterminada, nmap utiliza SYN como técnica de sondeo. Es una técnica rápida y no muy intrusiva / detectable, pero a veces, pero soporta un total de 12 técnicas diferentes que podemos definir como parámetros, como podemos ver en el manual de usuario de la herramienta.
Por ejemplo, si queremos hacer un escaneo basado en llamadas UDP, podemos hacer una llamada del tipo:
nmap -sU 192.168.10.5
Búsqueda de vulnerabilidades con nmap
Aunque existen herramientas más» cómodas » y específicas para la búsqueda de vulnerabilidades, como Nessus, o suites como Metasploit que consolida varias herramientas, nmap también permite realizar análisis de vulnerabilidades.
Para hacer esto, utiliza una serie de scripts Lua que se encuentran en una ruta de acceso de nuestra máquina (en el caso de Kali, en / usr / share / nmap / scripts /) y que se pueden invocar con –script o su equivalente-sC .
Los scripts pueden pertenecer a una o varias categorías, por lo que podemos pedirle a nmap que evalúe, por ejemplo, todos los scripts de una categoría contra un host. Hay algunas categorías especialmente interesantes como » vuln «(scripts dedicados a detectar vulnerabilidades en el destino),» exploit», etc.
Por ejemplo, si queremos analizar los scripts de categorías de vulnerabilidad en un host:
nmap --script vuln scanme.nmap.org
PORT STATE SERVICE22/tcp open ssh80/tcp open http| http-csrf: | Spidering limited to: maxdepth=3; maxpagecount=20; withinhost=scanme.nmap.org| Found the following possible CSRF vulnerabilities: | | Path: http://scanme.nmap.org:80/| Form id: cse-search-box-sidebar|_ Form action: https://nmap.org/search.html|http-dombased-xss: Couldn't find any DOM based XSS. | http-enum: | /images/: Potentially interesting directory w/ listing on 'apache/2.4.7 (ubuntu)' | /shared/: Potentially interesting directory w/ listing on 'apache/2.4.7 (ubuntu)'| http-slowloris-check: | VULNERABLE:| Slowloris DOS attack| State: LIKELY VULNERABLE| IDs: CVE:CVE-2007-6750| Slowloris tries to keep many connections to the target web server open and hold them open as long as possible. It accomplishes this by opening connections to the target web server and sending a partial request. By doing so, it starves the http server's resources causing Denial Of Service.| Disclosure date: 2009-09-17| References:| https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2007-6750|_ http://ha.ckers.org/slowloris/|_http-stored-xss: Couldn't find any stored XSS vulnerabilities.9929/tcp open nping-echo31337/tcp open Elite
Como podemos ver, el script ha detectado una vulnerabilidad potencial basada en el ataque de denegación de servicio de Slowloris. Si analizamos los scripts que se encuentran en la ruta mencionada anteriormente, vemos que hay precisamente uno que explota esta vulnerabilidad, llamado http-slowloris. Si queremos más información sobre el script podemos lanzar el siguiente comando:
nmap --script-help http-slowloris
Explicando cómo funciona el script, cómo iniciarlo (también es posible hacerlo con el propio nmap con –script y –script-args), etc. También podemos obtener, por ejemplo, una descripción de todos los scripts que buscan vulnerabilidades:
nmap --script-help vuln
También podemos, por ejemplo, lanzar todos los scripts de un tipo determinado. Por ejemplo, si queremos analizar vulnerabilidades a través del protocolo SMB en un host determinado:
nmap --script smb-* 192.168.10.5
También podemos, por ejemplo, evaluar una vulnerabilidad en toda nuestra red, eligiendo un script específico contra un rango. El parámetro-script
nmap --script-help vuln
nmap --script
En resumen, nmap incluso incluye opciones interesantes para evaluar vulnerabilidades e incluso lanzar exploits, aunque hay otras herramientas comúnmente utilizadas para este propósito.
Otras opciones interesantes
Como hemos comentado, nmap tiene muchas opciones y es imposible tratar de cubrir incluso un pequeño porcentaje en un post. De hecho, hay un libro oficial de nmap de casi 500 páginas But pero en cualquier caso intentamos comentar aquí algunos que parecen interesantes.
Como hemos comentado, nmap tiene muchas opciones y es imposible tratar de cubrir un pequeño porcentaje en un post. De hecho, hay un libro oficial de nmap de casi 500 páginas But pero en cualquier caso intentamos comentar aquí algunos que parecen interesantes.
- La herramienta le permite generar el resultado del escaneo en un archivo de salida procesable, por ejemplo, en formato XML, con -oX o-oN .
- Cuando escaneamos amplios rangos de IPs, podemos deshabilitar el intento de resolución inversa de DNS con el parámetro-n.
- Durante la ejecución de un comando podemos aumentar el nivel de información que se muestra en la consola (verbosidad) pulsando la tecla «V».
- Si tenemos un firewall que nos corta, podemos probar -Pn.
En resumen, hemos tratado de desarrollar una «breve» introducción a nmap como una herramienta para identificar puertos y servicios abiertos en un host o rango de IPs. En publicaciones posteriores veremos otras formas de detectar vulnerabilidades.
¿Todo listo?
Es hora de manejar documentos de manera más eficiente