Hacking de Infraestructura: Protocolo Telnet

En este post te traigo uno de los primeros protocolos de la historia de Internet: el protocolo Telnet. Este será un post cortito ya que este protocolo no da para mucho más, pero necesitaba incluirlo en esta sección pues el cliente es de mucha utilidad durante un pentesting.

En general telnet (RFC854) se ha utilizado para abrir una sesión con una máquina UNIX, de modo que múltiples usuarios con cuenta en la máquina, se conectan, abren sesión y pueden trabajar utilizando esa máquina. 

Sin embargo, hoy en día este protocolo apenas se utiliza. Una de las preguntas más sencillas que suelo hacer en las entrevistas de trabajo a los candidatos que quieren unirse a mi empresa actual es la siguiente: Imagina que un desarrollador te comenta que tiene un servidor y que lo planea gestionar mediante el protocolo telnet. ¿Te parece adecuado? ¿Recomendarías utilizar algún otro protocolo?

Obviamente la respuesta que espero es un rotundo no. Y es que todos los nombres de usuario y contraseñas necesarias para entrar en las máquina viajarán por la red como texto plano, pues el protocolo telnet no está cifrado. Cualquier persona que esté en tu misma red y se ponga a la escucha podrá interceptar toda la información que envíes con este protocolo. 

De hecho, el protocolo SSH fue creado precisamente para sustituir a Telnet y proporcionar una alternativa segura para el mantenimiento y gestión de servidores. Desde hace décadas telnet ha sido sustituido por Secure Shell. Si quieres descubrir las principales vulnerabilidades SSH y la forma de utilizar este protocolo a tu favor durante un pentesting, te recomiendo que le eches un vistazo a este post.

 

Hacking de Infraestructura: Protocolo Telnet

Conexión Telnet

Para conectarnos mediante telnet a un servidor, basta con ejecutar el comando «telnet <dominio/IP> <puerto>». Si no se indica puerto, se intentará conectar automáticamente al puerto 23.

El servicio telnet te proporciona una shell. El puerto en el que usualmente corre este protocolo es el puerto 23. Pero en este post también te hablaré del cliente de telnet, la herramienta que permite la conexión directa a diferentes protocolos.

El cliente de telnet es una herramienta para entrar de forma manual en los distintos servicios que corren en una máquina. Puedes utilizar telnet para acceder a cualquier puerto y comprobar que hay ahí. 

Por ejemplo, puedes utilizar telnet en el puerto 22 y ver la cabecera del servicio SSH,  telnet en el puerto 25 y mandar comandos del servicio de mensajeria SMTP:

Hacking de Infraestructura: Protocolo Telnet

Esto también es posible hacerlo con otras herramientas como netcat, sin embargo hay una sutil diferencia que puede hacer que intentar conectarte a un protocolo por telnet funcione mientras que por netcat no, y viceversa:

Veamos un ejemplo. A continuación tenemos un servidor en el que hay un servicio en el puerto 4386 que nmap no ha reconocido. Vamos a conectarnos con telnet:

Como podemos comprobar, este servicio permite ejecutar queries a una base de datos, y podemos conectarnos a traves de telnet. Sin embargo, veamos que pasa si probamos a conectarnos con nc o ncat:

Aunque también son herramientas que se pueden emplear para realizar estas conexiones entre servidores, vemos que no al enviar el comando help no recibimos más respuesta, por lo que tenemos que abortar sesión. Según mi experiencia es común que esto suceda, por ello es bueno que durante un pentesting probemos los servicios con distintas herramientas.

Pero a continuación vamos a descubrir por qué pasa esto en realidad. Para ello vamos a analizar el tráfico con wireshark. Esto es lo que obtenemos cuando escribimos el comando «help» al utilizar telnet:

Como mencioné anteriormente, podemos ver el tráfico en claro gracias a que este protocolo no está cifrado. Analicemos ahora el tráfico cuando escribimos «help» al utilizar nc:

Con telnet se manda 0d 0a y con nc solo se manda 0a. En ASCII code, 0a corresponde a \n, nueva línea, y 0d a  \r, retorno de carro.

Telnet manda \r\n cuando pulsas enter, mientras que netcat solo manda \n. El protocolo está esperando el retorno de carro también, por ello con netcat no funciona y con telnet sí.

En conclusión, siempre que encuentres un puerto extraño al realizar un pentesting, trata de utilizar el cliente telnet para obtener más información sobre ese puerto, pues de esta forma podrás ver de primera mano la información que te manda el servicio que esté corriendo. De esta forma quizá puedas obtener información útil como la cabecera que revela de qué servicio se trata y su versión. Pero si no funciona, no olvides probar con herramientas similares como netcat.

¿Tienes un email? No te pierdas el post de la semana que viene, en el que hablaré de las vulnerabilidades de los protocolos SMTP, POP3 e IMAP.

Lethani.

5/5 - (55 votos)

Deja un comentario