# 23 - Pentesting Telnet {{#include ../banners/hacktricks-training.md}} ## **Podstawowe informacje** Telnet to protokół sieciowy, który daje użytkownikom nieszyfrowany sposób dostępu do komputera przez sieć. **Domyślny port:** 23 ``` 23/tcp open telnet ``` ## **Enumeracja** ### **Zbieranie banerów** ```bash nc -vn 23 ``` Wszystkie interesujące enumeracje można wykonać za pomocą **nmap**: ```bash nmap -n -sV -Pn --script "*telnet* and safe" -p 23 ``` Skrypt `telnet-ntlm-info.nse` uzyska informacje NTLM (wersje Windows). Z [telnet RFC](https://datatracker.ietf.org/doc/html/rfc854): W protokole TELNET znajdują się różne "**opcje**", które będą zatwierdzone i mogą być używane w strukturze "**DO, DON'T, WILL, WON'T**", aby umożliwić użytkownikowi i serwerowi zgodzenie się na użycie bardziej złożonego (lub może po prostu innego) zestawu konwencji dla ich połączenia TELNET. Takie opcje mogą obejmować zmianę zestawu znaków, tryb echa itp. **Wiem, że możliwe jest enumerowanie tych opcji, ale nie wiem jak, więc daj mi znać, jeśli wiesz jak.** ### [Brute force](../generic-hacking/brute-force.md#telnet) ## Plik konfiguracyjny ```bash /etc/inetd.conf /etc/xinetd.d/telnet /etc/xinetd.d/stelnet ``` ## Automatyczne polecenia 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' ``` ### Recent Vulnerabilities (2022-2025) * **CVE-2024-45698 – D-Link Wi-Fi 6 routers (DIR-X4860)**: Wbudowana usługa Telnet akceptowała twardo zakodowane dane uwierzytelniające i nie sanitizowała wejścia, co pozwalało na nieautoryzowane zdalne RCE jako root za pomocą stworzonych poleceń na porcie 23. Naprawiono w oprogramowaniu układowym ≥ 1.04B05. * **CVE-2023-40478 – NETGEAR RAX30**: Przepełnienie bufora oparte na stosie w poleceniu Telnet CLI `passwd` pozwala sąsiedniemu atakującemu na ominięcie uwierzytelnienia i wykonanie dowolnego kodu jako root. * **CVE-2022-39028 – GNU inetutils telnetd**: Sekwencja dwóch bajtów (`0xff 0xf7` / `0xff 0xf8`) wywołuje dereferencję wskaźnika NULL, co może spowodować awarię `telnetd`, prowadząc do trwałego DoS po kilku awariach. Pamiętaj o tych CVE podczas triage podatności — jeśli cel działa na niepoprawionym oprogramowaniu układowym lub przestarzałym demonie Telnet inetutils, możesz mieć prostą drogę do wykonania kodu lub zakłócającego DoS. ### Sniffing Credentials & Man-in-the-Middle Telnet przesyła wszystko, w tym dane uwierzytelniające, w **czystym tekście**. Dwa szybkie sposoby na ich przechwycenie: ```bash # 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 spoofing ARP (np. `arpspoof`/`ettercap`) z tymi samymi filtrami sniffingowymi, aby zbierać hasła w sieciach przełączanych. ### Zautomatyzowane ataki brute-force / Password Spraying ```bash # Hydra (stop at first valid login) hydra -L users.txt -P rockyou.txt -t 4 -f telnet:// # Ncrack (drop to interactive session on success) ncrack -p 23 --user admin -P common-pass.txt --connection-limit 4 # Medusa (parallel hosts) medusa -M telnet -h targets.txt -U users.txt -P passwords.txt -t 6 -f ``` Większość botnetów IoT (warianty Mirai) nadal skanuje port 23 z małymi słownikami domyślnych poświadczeń—odzwierciedlenie tej logiki może szybko zidentyfikować słabe urządzenia. ### Eksploatacja i post-eksploatacja Metasploit ma kilka przydatnych modułów: * `auxiliary/scanner/telnet/telnet_version` – enumeracja banerów i opcji. * `auxiliary/scanner/telnet/brute_telnet` – wielowątkowe łamanie haseł. * `auxiliary/scanner/telnet/telnet_encrypt_overflow` – RCE przeciwko podatnemu Telnetowi Solaris 9/10 (obsługa opcji ENCRYPT). * `exploit/linux/mips/netgear_telnetenable` – włącza usługę telnet za pomocą spreparowanego pakietu na wielu routerach NETGEAR. Po uzyskaniu powłoki pamiętaj, że **TTY są zazwyczaj głupie**; zaktualizuj za pomocą `python -c 'import pty;pty.spawn("/bin/bash")'` lub użyj [HackTricks TTY tricks](/generic-hacking/reverse-shells/full-ttys.md). ### Wzmocnienie i wykrywanie (kącik niebieskiego zespołu) 1. Preferuj SSH i całkowicie wyłącz usługę Telnet. 2. Jeśli Telnet jest wymagany, przypisz go tylko do VLAN-ów zarządzających, egzekwuj ACL i owiń demon w TCP wrappers (`/etc/hosts.allow`). 3. Zastąp przestarzałe implementacje `telnetd` `ssl-telnet` lub `telnetd-ssl`, aby dodać szyfrowanie transportowe, ale **to tylko chroni dane w tranzycie—zgadywanie haseł pozostaje trywialne**. 4. Monitoruj ruch wychodzący do portu 23; kompromitacje często generują odwrotne powłoki przez Telnet, aby obejść surowe filtry egress HTTP. ## Odniesienia * D-Link Advisory – CVE-2024-45698 Krytyczne Telnet RCE. * NVD – CVE-2022-39028 inetutils `telnetd` DoS. {{#include ../banners/hacktricks-training.md}}