
1. 项目概述从一次“裸奔”的远程登录说起如果你在运维、开发或者网络安全领域摸爬滚打过几年一定对Telnet这个名字不陌生。这个诞生于上世纪69年的老牌协议曾经是远程管理服务器的绝对主力。但今天我们提起它更多是作为一个“反面教材”——一个将“明文传输”风险赤裸裸展示给全世界的经典案例。我最近在内部安全巡检中依然发现有些测试环境甚至老旧设备还在使用Telnet进行管理问起原因往往是“方便”、“临时用一下”。这种“裸奔”式的操作就像把保险箱密码写在便签纸上贴在办公室门口风险不言而喻。这个项目的核心就是通过最直观、最有力的方式——抓包分析来验证Telnet协议明文传输的巨大安全隐患。我们将使用网络分析领域的“瑞士军刀”Wireshark亲手捕获并解析一次Telnet会话的全过程让你亲眼看到用户名和密码是如何以任何人都能看懂的形式在网络中“裸奔”的。这不仅仅是一次工具教学更是一次深刻的安全意识洗礼。无论你是刚入行的运维新人想理解网络协议安全的重要性还是经验丰富的开发者需要向团队证明加密传输的必要性或是网络安全爱好者希望掌握基础的流量分析技能这次手把手的实战都能让你收获满满。2. 环境准备与工具部署搭建你的“取证实验室”工欲善其事必先利其器。我们的“取证”环境不需要复杂的网络拓扑关键在于准备好“攻击方”抓包机和“受害方”Telnet服务器与客户端。2.1 核心工具选型与安装Wireshark是我们的主角。选择它的理由很充分开源免费、功能强大、跨平台支持Windows、macOS、Linux、拥有最完善的协议解析器Dissector库。对于我们的实验任何较新的稳定版本如4.0系列均可。安装时注意勾选“Install Npcap”Windows或确保拥有相应权限Linux/macOS这是抓包功能的核心驱动。注意在Windows上安装时如果遇到“Npcap兼容性”选项建议选择“Install Npcap in WinPcap API-compatible Mode”以确保对旧版应用程序的最大兼容性。在Linux上你可能需要通过sudo usermod -aG wireshark $USER命令将当前用户加入wireshark组然后注销重新登录才能免root权限抓包。Telnet服务器与客户端为了最纯粹地展示风险我们直接在本地环境搭建。在Linux如Ubuntu上安装OpenSSH的Telnet服务器端和客户端非常方便sudo apt-get install telnetd telnet。在Windows 10/11上Telnet客户端默认未安装需要在“启用或关闭Windows功能”中勾选“Telnet客户端”服务器端则更推荐使用第三方软件如telnetd或者直接使用Linux虚拟机作为服务器。网络环境为了确保能抓到清晰的流量最简单的方案是使用一台机器同时运行Telnet服务器、客户端和Wireshark。通过连接localhost127.0.0.1或本机局域网IP所有流量都在本机网卡环回接口上流转Wireshark可以轻松捕获。如果你有两台实体机将它们接入同一个没有复杂隔离的交换机或路由器下即可。2.2 Wireshark初始配置要点第一次打开Wireshark界面可能有些复杂。我们聚焦几个关键配置选择正确的网卡在初始界面或“捕获”-“选项”中你会看到一列网络接口。对于本机实验选择“Adapter for loopback traffic capture”或类似描述的回环接口在Windows上可能是Npcap Loopback Adapter。如果是在局域网内两台机器间测试则选择连接局域网的物理网卡如“以太网”、“Wi-Fi”。设置捕获过滤器Capture Filter这是一个在抓包时丢弃无关数据包、提升性能的强大功能。由于我们只关心Telnet流量可以将其设置为tcp port 23。这样Wireshark只会捕获源端口或目标端口为23Telnet默认端口的TCP流量屏蔽其他所有网络噪音。准备显示过滤器Display Filter抓包后用于在庞大数据中快速定位目标。常用的Telnet相关过滤器有telnet显示所有Telnet协议数据包、tcp.port 23显示端口23的TCP包。我们可以提前在过滤器栏输入telnet并保存。3. Telnet协议风险深度解析为什么说它在“裸奔”在动手抓包前我们必须从原理上理解Telnet的风险根源。这不仅仅是“密码明文”那么简单。3.1 Telnet协议的工作机制与设计缺陷Telnet协议基于TCP默认使用23端口。它的设计目标是提供一个标准的、面向终端的远程登录方法。其核心缺陷在于整个会话过程包括认证阶段用户名、密码和后续的所有命令、输出默认都使用未加密的8位字节数据流进行传输。协议本身包含了一些控制命令如IAC, Interpret As Command用于协商终端类型、窗口大小等但这些协商信息本身也是明文。这意味着任何一个能够访问你网络流量的人比如同一局域网内的攻击者或者路径上的恶意路由器都可以通过“搭线窃听”Sniffing的方式完整地重建你的整个操作会话。3.2 明文传输的具体风险场景认证信息窃取这是最直接的风险。攻击者捕获数据包后可以轻易提取出用户名和密码从而获得对服务器的完全控制权。敏感数据泄露登录后你执行的任何命令如cat /etc/passwd、mysql -u root -p、查看的任何文件内容、输出的任何日志都暴露无遗。会话劫持Session Hijacking在特定条件下攻击者不仅可以窃听还可以向会话中注入恶意命令或者劫持已经建立的TCP连接冒充合法用户进行操作。中间人攻击Man-in-the-Middle, MITM在更主动的攻击中攻击者可以插入到客户端和服务器之间不仅窃听还能篡改双方通信的内容。与Telnet形成鲜明对比的是SSHSecure Shell协议。SSH在建立连接时通过非对称加密算法如RSA、ECDSA进行密钥交换然后使用对称加密算法如AES、ChaCha20对整个通信通道进行加密。你抓取SSH的流量看到的只是毫无意义的加密数据流。因此在任何生产环境或涉及敏感信息的测试环境中用SSH全面替代Telnet是毫无争议的安全基线要求。4. 实战抓包亲手捕获“飞行中”的密码理论说再多不如亲手验证一次。下面我们开始完整的抓包实战流程。4.1 启动捕获与发起Telnet连接首先确保你的Telnet服务器已启动。在Ubuntu上安装telnetd后可能需要通过sudo systemctl start inetd或sudo systemctl start xinetd来启动服务取决于系统使用的超级守护进程。打开Wireshark选择正确的环回或物理网卡接口在捕获过滤器栏输入tcp port 23。点击左上角的“鲨鱼鳍”按钮开始捕获。此时Wireshark界面会开始滚动但因为我们还没有Telnet流量所以可能一片空白或只有零星的其他包。打开你的终端Linux/macOS的TerminalWindows的CMD或PowerShell输入Telnet连接命令。例如连接本机telnet 127.0.0.1。如果连接成功你会看到类似“Ubuntu 20.04 login:”的提示。此时立即回到Wireshark界面。你应该能看到数据包列表开始快速增加出现了目标端口为23的TCP SYN包、SYN-ACK、ACK三次握手包标志着TCP连接建立成功。4.2 关键交互过程的包解析现在在Telnet客户端依次输入用户名和密码为了实验可以在本地创建一个测试用户如用户testuser密码Test123!。完成登录后在Telnet客户端执行一两个简单命令如pwd、ls。然后在Telnet客户端输入exit或logout结束会话。回到Wireshark点击红色方块按钮停止捕获。此时我们拥有了整个Telnet会话的完整数据包记录。第一步定位登录过程的数据包在Wireshark顶部的显示过滤器栏输入telnet并回车。列表将只显示被识别为Telnet协议的数据包。这些包通常标记为“Telnet Data”。你需要仔细浏览这些数据包寻找包含你输入字符的包。第二步解读“Info”列与跟踪TCP流Wireshark的“Info”列会简要显示数据包内容。对于Telnet Data包它可能会直接显示传输的字符比如“Username: ”或你输入的用户名片段。更高效的方法是使用Wireshark的“跟踪流”功能。在数据包列表中找到任何一个Telnet Data包右键点击它。选择“追踪流” - “TCP流”。此时会弹出一个新窗口以ASCII形式或你选择的编码完整展示该TCP连接中所有客户端发送和服务器返回的数据。震撼的一幕就在这里你输入的每一个字符包括用户名、密码、执行的命令都会像电影字幕一样清晰呈现。密码Test123!会毫无遮掩地出现在数据流中。第三步深入数据包详情面板关闭TCP流窗口回到主界面。点击任意一个包含关键信息如密码字符的Telnet Data包。中间的面板会显示数据包的详细分层信息。Frame物理帧信息。Ethernet II数据链路层信息。Internet Protocol Version 4网络层IP信息。Transmission Control Protocol传输层TCP信息包含源、目标端口、序列号等。Telnet应用层信息。展开它你会看到“Data: ...”字段里面正是明文传输的字符。在下方十六进制面板Hex dump中你也能直接看到对应的ASCII码如74 65 73 74 75 73 65 72对应testuser。实操心得在跟踪TCP流时默认视图可能将客户端你发送的数据显示为红色服务器返回的数据显示为蓝色。你的密码就在红色的数据段里。如果数据流看起来混乱夹杂着0xff 0xfb之类的字符那是Telnet的控制命令IAC可以暂时忽略聚焦在可读的ASCII字符上。5. Wireshark核心使用技巧与过滤器精讲一次成功的抓包分析离不开对Wireshark过滤器的熟练运用。这能帮你从海量数据中瞬间定位目标。5.1 捕获过滤器 vs. 显示过滤器这是两个核心概念用途截然不同捕获过滤器Capture Filter在抓包前设置语法遵循BPFBerkeley Packet Filter用于决定哪些包能被抓取到内存或硬盘。它像是一个筛子在数据进入时就过滤掉不关心的流量节省系统资源。语法示例host 192.168.1.100 and tcp port 23只抓来自或去往192.168.1.100的Telnet流量。显示过滤器Display Filter在抓包后设置语法是Wireshark自有的用于在已捕获的数据包中筛选显示。它只是改变视图不改变已捕获的数据。语法更强大、易读。示例ip.addr 192.168.1.100 tcp.port 23效果类似但用于显示过滤。对于本次实验我们先用tcp port 23这个捕获过滤器聚焦目标避免干扰。分析时再用更灵活的显示过滤器深入挖掘。5.2 针对Telnet分析的实用显示过滤器基础定位telnet显示所有Telnet协议包。tcp.port 23显示所有涉及23端口的TCP包包括握手、传输、挥手。聚焦数据内容telnet.data显示所有包含Telnet数据的包。telnet.data contains login显示数据部分包含“login”字符串的Telnet包。你可以把login替换成你猜测的用户名或密码片段。结合IP和会话ip.src 192.168.1.5 telnet显示来自IP 192.168.1.5的所有Telnet包。tcp.stream eq 0显示TCP流索引为0的整个会话的所有包流索引在包详情TCP层可以看到。这对于完整分析一次登录过程非常有用。5.3 数据包解读与标记技巧面对一个具体的数据包如何快速获取信息时间戳了解事件发生的绝对和相对时间。源/目的IP和端口确定通信双方。客户端通常使用随机高端口号如54321服务器端是23。协议列确认是TELNET协议。长度列数据包大小纯交互命令通常很小。信息列最直观常显示关键数据摘要。你可以右键点击重要的数据包如包含密码的那个选择“标记/取消标记数据包”或按CtrlM。被标记的包会高亮显示方便后续集中查看或导出。6. 从攻防视角看风险攻击者会如何利用作为防御者我们理解了风险。现在让我们切换视角看看一个潜在的内部或局域网攻击者会如何利用这种“裸奔”流量。6.1 攻击者视角下的信息收集与利用假设攻击者已经通过某种手段如ARP欺骗、接入交换机镜像端口获取了你的局域网流量。被动监听他只需要像我们一样在Wireshark中设置过滤器tcp port 23然后静静等待。任何经过他网卡的Telnet流量都会被捕获。提取凭证通过跟踪TCP流他能在几秒钟内提取出明文密码。他可能会编写简单的脚本自动从抓取的pcap文件中提取所有可能的用户名密码对。扩大战果获得一台服务器的权限后他可能会尝试用相同的密码横向移动很多管理员有重复使用密码的习惯或者查看历史命令、寻找敏感文件进一步渗透内网。6.2 防御措施与最佳实践知己知彼百战不殆。了解攻击方式后我们的防御策略就非常清晰了立即禁用并替换生产环境无条件禁用Telnet服务。使用systemctl disable --now telnet.socketsystemd系统或类似命令彻底关闭。统一迁移至SSH在所有需要远程管理的设备上部署SSH服务如OpenSSH。SSH的加密特性使得抓包变得毫无意义。网络隔离与访问控制如果因特殊原因如老旧设备必须使用Telnet将其限制在独立的、物理隔离的管理网络内绝不暴露在办公网或互联网。在防火墙或交换机上配置严格的访问控制列表ACL只允许特定的管理终端IP地址访问设备的23端口。启用增强型认证如果设备支持一些较新的网络设备如某些路由器、交换机的Telnet服务支持与AAA认证、授权、记账服务器如TACACS、RADIUS结合。虽然流量仍是明文但至少密码不在设备本地且审计更完善。但这只是缓解措施并非根本解决方案。加密隧道封装作为临时或过渡方案可以考虑将Telnet流量封装在加密隧道中。例如先建立一条SSH隧道再将本地端口转发到远程的Telnet端口。这样本地到服务器之间的Telnet流量就在SSH加密通道内传输了。命令示例ssh -L 2323:目标设备IP:23 跳板机用户跳板机IP -N然后本地连接telnet 127.0.0.1 2323。重要警告上述第3、4点只是在无法立即消除Telnet时的权宜之计。安全的核心原则是“默认拒绝最小权限”。最终目标必须是彻底淘汰不安全的明文协议。7. 常见问题与排查技巧实录在实际操作和分析中你可能会遇到以下问题。这里记录了我踩过的坑和解决方案。7.1 抓不到Telnet包问题启动了Wireshark也发起了Telnet连接但列表里没有Telnet包或只有TCP握手包。排查检查网卡确认Wireshark选择的网卡是正确的。对于本机连接必须选环回适配器。检查捕获过滤器确认捕获过滤器没有设置错误例如误设为tcp.port 23这是显示过滤器语法。捕获过滤器应为tcp port 23。检查服务状态确认Telnet服务器确实在运行并监听23端口。在Linux上使用sudo netstat -tlnp | grep :23查看。权限问题Linux如果使用非root用户抓非环回接口的包需要按照前文所述将用户加入wireshark组并重新登录。7.2 抓到的包内容乱码或看不到密码问题在TCP流或数据包详情中看到的不是清晰的ASCII字符而是乱码或控制字符。排查Telnet选项协商Telnet会话开始时会有一系列选项协商IAC命令这些在数据流中显示为乱码。你需要滚动TCP流窗口跳过最开始的这些协商数据后面才是真正的用户输入和服务器回显。字符编码确保TCP流窗口的编码设置正确。通常选择“ASCII”或“UTF-8”即可正确显示英文和数字。如果是中文环境可能需要尝试“GBK”或“GB2312”。密码回显有时服务器会关闭本地回显echo off你在客户端输入密码时看不到任何字符这是正常的。但在网络流量中你输入的每一个字符依然会以明文发送。在Wireshark的TCP流中这些字符是依次出现的你需要仔细在客户端发送的数据区通常是红色寻找。7.3 Wireshark显示过滤器不生效问题输入了telnet过滤器但列表没有变化或提示语法错误。排查语法正确性显示过滤器非常严格。telnet是有效的协议过滤器。如果输入tcp.port 23注意是双等号。逻辑与是逻辑或是||。应用过滤器输入后需要点击过滤器输入框右侧的蓝色向右箭头或按回车键才能应用。绿色表示语法正确且已应用红色表示语法错误。没有匹配包过滤器语法正确但无显示可能是因为当前捕获的数据包中没有符合条件的数据。检查是否抓到了正确的流量。7.4 如何保存和分享抓包结果分析完成后你可能需要保存证据或与他人协作分析。保存文件点击“文件”-“保存”或“另存为”可以选择保存为Wireshark默认的.pcapng格式推荐支持更多元数据或传统的.pcap格式。导出特定数据包你可以先使用显示过滤器筛选出关键包如包含密码的那部分然后点击“文件”-“导出特定分组”只保存筛选后的包文件更小。导出TCP流内容在跟踪TCP流的窗口有“另存为”按钮可以将会话的纯文本内容保存下来这对于提取凭证非常方便。注意隐私分享pcap文件前务必意识到其中可能包含敏感信息密码、命令。可以使用Wireshark的“编辑”-“首选项”-“协议”-“TELNET”中配置一个“密钥”来对Telnet数据负载进行简单混淆但这并非强加密或者确保只在安全可信的环境分享。