1. 项目概述一台光猫的探索之旅最近在整理家里的网络设备翻出来一台闲置的中兴 ZXHN F650 光猫。这玩意儿大家都不陌生运营商装宽带时免费配的用几年升级套餐就给换新的旧的就扔角落里吃灰了。我手里这台是 GPON ONU 的型号也就是我们常说的“光猫”负责把光纤里的光信号转换成家里路由器能处理的电信号。按理说这种设备用户层面能操作的功能极其有限无非就是在网页里改个Wi-Fi密码、看看连接状态。但作为一个喜欢折腾网络设备的人我总好奇这黑色塑料盒子里面到底藏了多少“秘密”——那些运营商隐藏起来的配置项、调试接口甚至是理论上可以但被限制的功能。正好手头有台闲置的弄坏了也不心疼于是决定拿它来“开刀”深入了解一下GPON光猫的内部世界。这个过程与其说是破解不如说是一次系统的学习和探索目标很单纯看看能从这台最普通的消费级设备里学到多少关于固网接入和终端设备管理的知识。2. 设备初探与基础认知2.1 ZXHN F650 是什么GPON ONU又意味着什么在开始任何操作之前我们得先搞清楚研究对象。ZXHN F650 是中兴通讯生产的一款GPON终端设备广泛被国内运营商采购并配发给家庭宽带用户。它的核心角色是ONU。这里需要简单解释几个关键术语这对后续所有操作的理解都至关重要GPON: 吉比特无源光网络。这是一种光纤接入技术标准你可以把它想象成一条信息高速公路从运营商机房OLT一直通到你家门口而这条公路是“无源”的中间不需要供电的中继设备靠光分路器来分信号因此稳定且维护成本低。OLT: 光线路终端在运营商机房是这条高速公路的“总收费站”和“调度中心”。ONU: 光网络单元就是放在你家里的这个F650它是高速公路的“你家专属出口”。它负责与OLT“握手”通信验证身份通过LOID或Password然后建立连接把千兆级别的光信号转换解调为电信号供后面的路由器、电脑使用。所以这台F650本质上是一个高度定制化、为运营商批量管理而设计的嵌入式Linux设备。它的硬件包括PON光模块、CPU、内存、闪存以及以太网交换芯片和Wi-Fi模块如果有的话。软件则是一套深度定制的系统包含了对接OLT的底层协议栈、提供用户网页界面的HTTP服务、以及各种运营商用于远程管理的后台进程。2.2 为什么要“学习”它潜在需求与风险警示对于普通用户光猫就是个“透明”的桥接设备最好别动。那为什么我们还要研究它需求来自几个方面获取超管权限运营商安装人员通常只给用户级账号功能受限。超管账号可以开启真正的桥接模式由性能更好的路由器拨号、查看详细的光功率和线路质量、修改防火墙规则等这对追求网络质量和自定义设置的用户很有吸引力。解除连接数限制部分地区的运营商光猫会限制同一时间内的终端连接数量研究它可能找到解除或修改限制的方法。学习网络协议与设备管理对于网络爱好者或从业者光猫是一个绝佳的、低成本的学习样板可以实地了解TR-069远程管理协议、OMCI管理通道、VLAN配置、IPTV和VoIP的承载原理等。挖掘闲置设备潜力比如能否利用其硬件跑一些简单的服务虽然可能性极低但探索过程本身就有价值。重要提示在进行任何操作前你必须清楚以下风险变砖风险误操作可能导致设备无法启动彻底报废。网络中断风险错误配置可能导致无法上网影响家人或自己正常使用。信息泄露风险设备中的LOID、VLAN ID、电话鉴权密码等信息属于敏感配置切勿泄露。违反服务条款自行修改运营商设备配置可能违反宽带服务协议运营商有权拒绝提供支持。因此强烈建议仅在闲置的、已退网的设备上进行实验。如果是在用设备请务必在操作前完整备份所有配置并知晓恢复方法。3. 突破口选择Telnet的启用与访问3.1 为什么是Telnet对于这类嵌入式设备常见的内部访问接口有串口TTL、Telnet、SSH等。串口需要拆机焊接门槛较高。而很多光猫的固件中其实保留了Telnet服务只是默认关闭或对特定IP段开放。Telnet是一个古老的网络协议用于在命令行下远程管理设备它传输的数据是明文的安全性很差但这恰恰为我们的“学习”打开了一扇窗。通过Telnet我们有可能获得一个Busybox或Ash shell从而在设备内部执行命令查看文件系统。3.2 寻找开启Telnet的方法根据网络上的经验中兴系列光猫开启Telnet的方法有一定规律但不同批次、不同运营商定制的固件可能差异很大。常见思路如下网页漏洞/隐藏页面尝试访问一些已知的或猜测的CGI页面。例如在浏览器中输入http://192.168.1.1/getpage.gch?pid1002nextpagetele_sec_tserver_t.gch这类链接可能会跳转到一个隐藏的Telnet设置页面。这需要搜集针对特定型号的“秘籍”。使用专用工具网络上流传一些针对中兴光猫的工具例如“中兴Telnet开启工具”等。其原理通常是向光猫的某个特定端口如80端口发送构造好的HTTP请求这个请求中包含开启Telnet服务的指令。使用此类工具需要极度谨慎务必从可信来源获取并在虚拟机或隔离环境中运行以防捆绑恶意软件。临时文件暴露通过访问http://192.168.1.1/backupsettings.conf或http://192.168.1.1/cgi-bin/backupsettings.cgi等路径尝试下载配置文件。如果成功这个XML格式的文件里可能包含经过加密或Base64编码的管理员密码解码后或许能用于登录网页管理界面进而寻找开启Telnet的选项。默认密码尝试尝试常见的默认超管账号密码组合如telecomadmin/nE7jA%5m注意这是很早以前的默认密码现在多数已改或admin/admin。不同运营商定制版不同例如移动可能是CMCCAdmin加上一个通用密码。我的实操路径我首先尝试了网页隐藏地址法。在F650的Web界面通常是192.168.1.1用用户账号登录后在地址栏尝试了多个已知的疑似路径均返回404或权限错误。接着我尝试了下载配置文件。访问http://192.168.1.1/backupsettings.conf浏览器果然开始下载一个文件。用文本编辑器打开这是一个巨大的XML文件里面包含了设备的几乎所有配置。我搜索“telnet”、“useradmin”、“telecomadmin”等关键词。很快找到了类似Telnet1/Telnet的字段值为1可能表示开启更重要的是找到了Usernametelecomadmin/Username和Password....一串加密字符.../Password的字段。中兴光猫的密码通常采用Base64编码。我将那串加密字符复制出来在网上找一个在线的Base64解码工具进行解码。解码后得到了一串看似乱码的字符这其实是二次加密的结果。根据经验这可能是MD5加密或者是中兴的一种私有算法。我并没有继续暴力破解这个密码因为我的目的不是破解在用设备而是学习。这个配置文件本身已经是一个宝库里面包含了LOID、VLAN设置、Wi-Fi射频参数等大量信息值得仔细研究。3.3 利用Sendcmd这个“后门”命令在研读配置文件和学习社区经验时一个高频出现的词是sendcmd。这似乎是中兴光猫固件里内置的一个调试命令功能非常强大可以直接向设备的内核模块或管理进程发送指令相当于一个“后门”。但sendcmd命令通常需要在设备的Linux shell下执行。那么问题回到了原点如何获得shell这里有一个经典的“漏洞”利用方式它不依赖于开启完整的Telnet服务而是利用某个CGI页面的命令注入漏洞。具体操作请仅在实验环境中尝试确保电脑和光猫在同一局域网连接光猫的Wi-Fi或LAN口。打开浏览器访问一个特殊的URL。这个URL因固件版本而异一个历史上可用的例子格式是http://192.168.1.1/cgi-bin/luci/;stok/locale?formcountryoperationwritecountry$(COMMAND_HERE)。将COMMAND_HERE替换为你想要执行的命令。例如替换为telnetd -l /bin/sh这个命令的意思是启动telnet守护进程并将登录后的shell指定为/bin/sh。如果漏洞存在且命令注入成功访问这个URL后光猫就会在后台默默启动Telnet服务。我的实际操作与思考我并没有直接在地址栏输入上述命令因为这种攻击方式过于“粗暴”且不确定性高。我更倾向于寻找更稳定、可复现的方法。我在一份技术资料中看到对于某些版本可以通过访问http://192.168.1.1/getpage.gch?pid1002nextpagetele_sec_tserver_t.gch这个链接如果运气好会直接显示一个Telnet服务器开关的页面而该页面的访问控制可能存在漏洞允许未授权开启。我尝试了这个链接。页面竟然真的加载了是一个名为“TELNET服务器控制”的页面里面有两个选项“TELNET服务器”和“LAN侧TELNET控制”后面分别跟着“禁止”和“允许”的单选按钮。这简直是意外之喜。我尝试将“TELNET服务器”从“禁止”改为“允许”然后点击“保存/应用”。页面刷新后我立刻打开电脑的命令提示符CMD输入telnet 192.168.1.1。屏幕上显示“正在连接192.168.1.1...”接着出现了经典的登录提示“ZXHN F650 login:”。我尝试输入在配置文件中看到的telecomadmin作为用户名密码则尝试了刚才Base64解码后得到的那串字符未二次解密的部分以及一些简单密码均告失败。这说明Telnet服务虽然开启了但认证关卡依然存在。不过开启服务本身已经是重大进展。4. 深入核心探索文件系统与配置结构4.1 寻找可用的Telnet凭证既然服务开了门锁着就得找钥匙。钥匙可能在哪默认凭证再次尝试中兴或运营商的常见默认密码组合。配置文件中的明文仔细查看之前下载的backupsettings.conf搜索所有Password字段除了超管的还有普通用户useradmin的以及其他服务如FTP的密码。有时普通用户的密码是明文的或者加密方式更简单。固件通用密码在某些固件版本中存在一个“调试密码”或“工程模式密码”可能是不公开的。我决定采用一种“旁路”思路。既然网页上那个隐藏页面能打开并且允许我操作Telnet开关那么这个页面本身可能就运行在某种权限上下文下能够执行一些特权操作。我查看了该页面的HTML源码浏览器右键“查看页面源代码”寻找表单提交的地址。发现它提交到了一个名为web_shell_cmd.gch的CGI脚本。这启发了我是否存在一个CGI脚本可以直接执行命令并返回结果经过搜索我构造了这样一个请求http://192.168.1.1/cgi-bin/web_shell_cmd.gch?commandls -la /通过浏览器访问这个链接页面返回了光猫根目录的文件列表这是一个重大的突破。这个web_shell_cmd.gch脚本没有做好权限校验允许远程执行命令。请注意这是一个严重的安全漏洞但在我们这里成了学习的钥匙。4.2 利用命令执行探索系统有了命令执行能力我就可以像在本地一样浏览光猫的系统了。我执行了一些基础命令来了解系统概况cat /proc/version查看内核版本和编译信息。df -h查看磁盘分区和使用情况。free查看内存使用情况。ps查看当前运行的进程列表。输出显示这是一个基于Linux 2.6.x内核的系统使用BusyBox作为基础工具集闪存被划分为多个分区包括只读的根文件系统和一个可读写的配置分区。接下来我寻找用户和密码文件cat /etc/passwd看到了系统用户列表包括root、admin、user等。cat /etc/shadow这个文件通常存放加密后的密码但访问被拒绝权限不足。find / -name \*pass*\ -o -name \*shadow*\ -o -name \*account*\在整个文件系统搜索相关文件。最终在一个非标准的路径下如/userconfig/cfg或/data目录下我找到了存放配置文件的目录里面有一些.xml或.db文件。使用cat命令查看这些文件发现了包括Telnet登录密码在内的多种凭证信息。这些密码有时是明文有时是简单的可逆编码。实操心得在嵌入式设备中由于存储空间和安全性考虑通常认为设备在封闭的内网密码的存储方式往往没有PC系统那么严格。多花时间在配置文件目录/etc/config/userconfig/data等进行查找经常会有意外发现。使用grep命令进行关键词搜索非常高效例如grep -r \password\ /userconfig/。4.3 理解关键配置文件通过命令执行我直接读取了几个关键文件/etc/init.d/telnetdTelnet服务的启动脚本。查看它可以帮助理解Telnet是如何被管理的以及是否绑定了特定的认证方式。/etc/config目录下的网络配置文件这里定义了WAN连接PPPoE、桥接、LAN设置、DHCP、防火墙规则等。这是理解光猫网络拓扑的核心。/etc/omci_start.sh或相关文件OMCI是ONU与OLT之间的管理协议这个脚本负责启动相关进程。/etc/tr069.confTR-069CWMP客户端的配置文件里面包含了ACS自动配置服务器的URL、连接用户名密码等。这是运营商能够远程管理甚至重置你光猫的通道。仔细阅读这些文件你对光猫如何工作会有恍然大悟的感觉。例如在WAN配置中你会看到你的宽带连接是PPPoE拨号对应你输入的宽带账号密码还是桥接模式。你会看到为IPTV业务单独划分的VLAN ID以及为VoIP电话设置的SIP服务器地址和鉴权信息。5. 实操获取稳定Shell与信息备份5.1 获取一个交互式Shell通过web_shell_cmd.gch执行命令是单向的不方便。我们的目标是获得一个完整的、交互式的Telnet或SSH会话。既然已经找到了Telnet的密码假设从配置文件中解密获得为admin123我回到命令提示符再次尝试Telnet登录telnet 192.168.1.1 login: root password: admin123登录成功提示符变成了#表示获得了root权限。现在我可以自由地在这个BusyBox shell中探索了。5.2 使用Sendcmd命令深入交互登录后第一件事就是尝试传说中的sendcmd命令。直接输入sendcmd系统显示了命令的帮助信息列出了可用的参数和功能码。这是一个非常强大的工具它允许你直接读取和修改设备的内部配置数据库MIB。一些常用的sendcmd命令示例sendcmd -g \pon\查看PON光模块的相关信息如序列号、状态。sendcmd -g \dev\查看设备信息。sendcmd -g \wan\查看WAN连接配置。sendcmd -g \lan\查看LAN口配置。sendcmd -g \wlancfg\查看Wi-Fi配置。sendcmd的“-g”参数是“get”用于查询。“-s”参数是“set”用于设置但使用-s修改配置风险极高可能导致配置错乱。在实验环境中可以尝试用sendcmd -d来查看更详细的数据结构定义。5.3 完整备份系统信息在做出任何改变之前备份是必须的。我做了以下几件事备份网页配置文件再次通过浏览器下载backupsettings.conf并保存好。备份关键系统文件在Telnet中使用cat命令将重要文件内容输出到终端然后复制粘贴保存到本地文本文件中。主要备份/etc/config/下的所有文件。/flash/cfg或/userconfig/cfg下的配置文件。/proc/mtdMTD分区信息。/proc/cpuinfo和/proc/meminfo硬件信息。记录关键参数手动记录下LOID、VLAN ID、PPPoE账号如有、Wi-Fi MAC地址、PON序列号等。这些是恢复网络必须的。6. 常见问题、排查与安全思考6.1 实操中遇到的典型问题Telnet无法连接端口23连接失败可能原因Telnet服务未成功启动防火墙规则阻止了23端口设备IP地址不是192.168.1.1。排查先用ping 192.168.1.1检查连通性。在光猫的Web界面或通过web_shell_cmd.gch执行netstat -tlnp查看23端口是否在监听。检查/var/run/telnetd.pid文件是否存在判断进程是否在运行。登录Telnet时提示密码错误可能原因密码不正确root用户可能被禁止登录认证方式不是简单的/etc/passwd和/etc/shadow。排查尝试其他可能的用户名如admin、zte、user。通过命令执行漏洞查看/etc/passwd文件确认可登录的shell/bin/sh或/bin/ash。重点搜索配置文件中的密码字段。执行sendcmd命令提示“Command not found”可能原因sendcmd不在默认的PATH环境变量中该固件版本移除了此命令。排查尝试输入完整路径如/bin/sendcmd或/sbin/sendcmd。使用find / -name sendcmd命令在全盘搜索。误操作导致无法上网可能原因修改了WAN连接参数、VLAN设置、删除了关键配置文件。恢复这是最需要避免的情况。如果网页还能访问尝试在Web界面恢复出厂设置注意这会清空所有配置包括LOID需要重新向运营商索要或从备份中找回。如果网页无法访问但有Telnet尝试用sendcmd或直接编辑配置文件的方式改回原来的值。最彻底的方法是使用之前备份的backupsettings.conf在Web界面的“管理”-“设备管理”-“恢复配置文件”页面进行上传恢复。6.2 安全加固建议对学习者的反思经过这一番折腾从攻击者视角看这台光猫存在多处安全隐患隐藏的管理页面、命令注入漏洞、弱密码或明文存储密码、未授权访问的CGI脚本。这给我们作为设备使用者和管理者一些启示修改默认密码无论是用户级还是超管级第一时间修改默认密码。关闭不必要的服务如果不用FTP、Telnet、远程管理TR-069如果允许关闭尽量关闭。更新固件虽然运营商推送更新较慢但新固件通常会修复已知漏洞。网络隔离将光猫放在家庭防火墙之后或者启用光猫自带的防火墙功能限制外网对管理端口的访问。6.3 关于网络热词工具的辨析在搜索过程中你会看到很多诸如“中兴telnet工具v2.0”、“Telnet工具安卓版”等关键词。请理性看待这些工具原理它们大多是自动化了发送特定HTTP请求包的过程本质上和你手动构造URL注入命令是一样的。风险来历不明的工具可能包含病毒、木马。它们可能只针对特定型号和固件版本并不通用。建议优先通过分析、查找资料手动操作这本身就是学习过程。如果必须使用工具请在虚拟机中运行并做好网络隔离。折腾这台ZXHN F650的过程就像一次有趣的数字考古。你面对的不是冰冷的设备而是一个为特定任务高度优化的、充满历史痕迹的嵌入式系统。你学到的远不止“如何开启Telnet”而是对整个家庭网络接入层的工作原理、运营商设备的管控方式、以及嵌入式Linux系统的基本面貌有了第一手的、深刻的认识。最后记住知识是用来理解和建设的请务必在合法、合规、且不影响他人的前提下进行你的探索。