ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

一条命令解锁中兴光猫工厂模式:zteOnu 从零到一实战指南

一条命令解锁中兴光猫工厂模式:zteOnu 从零到一实战指南 一条命令解锁中兴光猫工厂模式zteOnu 从零到一实战指南【免费下载链接】zteOnuA tool that can open ZTE onu device factory mode项目地址: https://gitcode.com/gh_mirrors/zt/zteOnu你有没有遇到过这样的场景光猫后台登录成功满屏的灰色选项运营商把 Telnet、调试接口、高级配置全部锁死你想拿 root 权限翻遍论坛找到的教程不是版本过旧就是要手动抓包、逆向 AES、敲几十行 Python折腾一整晚最后卡在某个校验上。这正是 zteOnu 存在的原因——它把开启中兴 ONU 工厂模式 永久 Telnet这整套逆向流程压缩成了一条命令。读完这篇文章你将从零编译出工具、跑通最小可用闭环、理解它背后 AES-ECB 加密与 MAC 校验的实现原理并拿到批量管理与二次开发可直接套用的模板。第一个问题开个 Telnet 为什么这么难中兴光猫的 Web 管理界面背后有一个隐藏的webFac接口它承担着工厂级认证与授权。问题在于这个接口的通信是加密的密钥由服务器按秒级随机数动态生成登录凭证要过一层 AES 校验到了较新的固件版本还要额外校验客户端 MAC 地址校验不过直接拒绝。手动操作意味着你要同时搞定动态密钥推导ECB 加密报文构造MAC 魔数生成三件事任何一步出错都只能重来。zteOnu 的做法很直接把这三件事全部封装进 Go 代码里你只需要提供设备的 IP 管理员账密剩下的交给程序自动重试完成。三步跑通最小可用闭环第一步拿到源码并编译git clone https://gitcode.com/gh_mirrors/zt/zteOnu cd zteOnu go build -o zteonu main.go这段命令从仓库拉取源码然后用 Go 直接编译出名为zteonu的二进制。项目只依赖cobra命令行框架和restyHTTP 客户端两个库go build会自动拉取不需要额外配置。成功特征当前目录出现zteonu可执行文件失败排查如果提示go: go.mod file not found说明你不在项目根目录如果报网络错误先确认 Go 模块代理可达。第二步用默认参数发起第一次连接./zteonu -i 192.168.1.1工具默认使用telecomadmin / nE7jA%5m作为管理员凭证默认走 8080 端口访问webFac。成功输出如下注意它分为两个阶段先是 5 个步骤逐条打勾然后给出工厂模式的 Telnet 凭证----------------------------------- step [0] reset factory: ok step [1] request factory mode: ok step [2] send sq: ok step [3] check login auth: ok step [4] enter factory mode: ok ----------------------------------- user: root pass: Zte521失败特征如果看到step [x] ...: errors user or password说明账密不对用-u/-p换成你光猫实际的管理员账户如果connection refused多半是 HTTP 管理端口不是 8080加--port指定。工具内部对每个步骤做了最多 10 次自动重试间隔 500ms所以偶尔一次握手失败不用慌它会自己再来一轮。第三步验证工厂凭证是否有效用上一步输出的root / Zte521直接登录 Telnettelnet 192.168.1.1能进入设备 shell就说明工厂模式真的开成功了。到这里你已经完成了 zteOnu 的最小可用闭环——这也是很多教程停在的地方但工具的价值远不止于此。核心能力拆解每条命令背后发生了什么能力一工厂模式绕开运营商权限墙 ⚙️解决什么问题普通管理员登录后只能看到运营商允许的功能工厂模式则暴露全部隐藏配置项是拿到 root 权限的前提。背后原理一句话工具模拟设备出厂流程通过webFac接口依次发送SendSq.gch、RequestFactoryMode.gch等请求用服务器下发的随机数推导出 24 字节 AES 密钥对CheckLoginAuth.gch等指令做 ECB 加密后经webFacEntry提交完成认证并换取工厂凭证。核心逻辑在app/factory/factory.go的handle()方法中完整流程可以画成下面这张图step[0] reset factory → 激活 web 服务 发送 SendSq.gch清状态 step[1] request factory mode → 发送 RequestFactoryMode.gch请求进入工厂流程 step[2] send sq → 带秒级随机数请求换取动态 AES 密钥 step[3] check login auth → 用密钥加密账密提交 webFacEntry 认证 step[4] enter factory mode → 解密响应解析出 root / 密码操作与输出解读上面最小闭环里的 5 行ok就是这 5 步逐一通过。值得注意的是第 3 步有个版本分支老固件直接走CheckLoginAuth新固件则要先发一个由 MAC 派生的SendInfo报文再认证——这正是我们后面要讲的--new模式。能力二永久 Telnet重启不失效 解决什么问题工厂模式给的凭证是一次性的设备重启后可能失效永久 Telnet 则把服务写进设备数据库重启后依然可用。背后原理一句话工具用拿到的 root 凭证登录 Telnet然后连续执行sendcmd 1 DB set TelnetCfg 0 ...系列命令把 Telnet 开关、登录名、密码、连接数、权限等级全部写死最后DB save落盘。对应源码在app/telnet/telnet.go的modifyDB()核心就这 6 条命令prefix : sendcmd 1 DB set TelnetCfg 0 lanEnable : prefix Lan_Enable 1 // 打开 Telnet tsLanUser : prefix TSLan_UName root // 固定用户名 root tsLanPwd : prefix TSLan_UPwd Zte521 // 固定密码 maxConn : prefix Max_Con_Num 3 // 最大连接数 initSecLvl : prefix InitSecLvl 3 // 权限等级开到最高操作演示./zteonu -i 192.168.1.1 --telnet输出解读与上一次不同这次不会停在输出凭证就结束而是继续打印Permanent Telnet succeed user: root, pass: Zte521 wait reboot..注意最后一行——工具在写完数据库后主动发了一条reboot命令让设备重启重启完成后 Telnet 即永久生效。小坑提醒如果Permanent Telnet succeed迟迟不出现先确认工厂模式这步是否成功工具是串行依赖的第 4 步没拿到凭证Telnet 阶段根本不会开始。能力三自定义端口少挨一次扫描解决什么问题8080 和 23 是扫描器最爱光顾的默认端口。背后原理两个参数分别控制 HTTP 管理端口和 Telnet 端口最终拼进http://{ip}:{port}/webFac和net.Dial的目标地址。./zteonu -i 192.168.1.1 --port 8888 --telnet --tp 2323如果设备的管理端口改过比如改成 80必须带--port否则第一步reset factory就会报连接失败。从能用到用好--new 模式与 MAC 校验的玄机老方法在某些新固件上会卡在step [3]报info error。原因是新固件的认证流程增加了一道 MAC 校验设备会从你提交的SendInfo报文中还原出客户端 MAC再和自己的白名单比对。zteOnu 的解法很有意思它逆向出了这个 46 字节报文的生成规则——12 个小端uint16值每个值后面跟两个固定零字节MAC 的每个字节以 XOR 方式折叠进两个值里。因为 XOR 运算是可逆的工具只要拿到任意客户端 MAC就能重新算出对应的合法报文不再依赖官方示例里那个特定的00:07:29:55:35:57。# 用本机第一块非回环网卡的 MAC 派生报文 ./zteonu -i 192.168.1.1 --new # 指定用哪块网卡的 MAC比如有线网卡 eth0 ./zteonu -i 192.168.1.1 --new --iface eth0 # 直接手写一个设备认可的 MAC ./zteonu -i 192.168.1.1 --new -m 00:07:29:55:35:57这里有个需要留意的点设备只认它接受的 MAC。如果你所在的环境里设备白名单就是示例那个 MAC直接用-m 00:07:29:55:35:57最省事如果你的网卡 MAC 恰好被接受--new不加任何参数即可。报文生成逻辑见app/factory/model.go的MacToMagicBytes()注释里完整记录了逆向推导过程想研究逆向思路的可以从这里入手。真实场景中的三种玩法玩法一家庭网络日常调试单台设备、一次性操作把命令收进 shell 别名里随用随调# 写入 ~/.bashrc alias onuzteonu -i 192.168.1.1 --port 8080 alias onu-telnetzteonu -i 192.168.1.1 --port 8080 --telnet之后onu-telnet一条命令完成开工厂模式 → 开永久 Telnet → 重启重启完直接telnet 192.168.1.1进去改桥接、关 TR069、看光功率。玩法二批量环境下的自动化巡检多台设备场景下写个循环脚本即可注意每台之间留出重启等待时间for ip in 192.168.1.10 192.168.1.11 192.168.1.12; do echo $ip ./zteonu -i $ip --telnet echo ok: $ip || echo fail: $ip sleep 30 # 等待设备重启完成 done建议把-u、-p统一成环境变量传参别写死在脚本里失败重试次数由工具内部控制脚本层只需要关注退出码。玩法三二次开发把能力嵌进自己的程序工具的三个模块边界非常清晰cmd负责参数解析app/factory负责认证握手app/telnet负责设备命令下发utils提供 AES-ECB 加解密。想嵌入自己的 Go 项目直接复用utils.ECBEncrypt/ECBDecrypt和factory.New().Handle()即可例如做一个带 Web 界面的光猫管理后台把一键开 Telnet做成按钮。入口main.go只有 10 行改造成本很低。收尾四个雷区与三条最佳实践雷区一默认账密是公开的。telecomadmin / nE7jA%5m、root / Zte521都是公开默认值开完 Telnet 第一件事就是改密码否则等于把设备管理权交给内网里的任何人。雷区二--telnet会触发重启。它执行完会发reboot在线业务会瞬断。批量操作时务必错开时间别让整批设备同时重启。雷区三固件版本决定走哪条路。老固件默认方法即可新固件带 MAC 校验要用--new且 MAC 必须被设备接受否则反复报info error。雷区四端口猜测成本很高。设备管理端口若被运营商改过--port传错会让所有步骤卡在连接阶段先浏览器确认一下能打开管理页的端口。最佳实践一操作前先备份配置中兴设备一般自带配置文件导出功能改动前导出一份出问题可回滚。最佳实践二先在测试设备上验证再上生产网络调试完如不需要常开把Lan_Enable改回 0 再DB save。最佳实践三记录每台设备的固件版本与成功参数组合普通模式还是--new、哪个 MAC下次操作直接套用省去试错。下一步你可以做什么回到开头的痛点手动逆向要三天zteOnu 把它压缩成一条命令——现在你已经知道这条命令每一步在做什么、卡住时去哪里排查、以及它背后那段 AES 与 MAC 校验的故事。下一步你可以顺着app/factory/model.go里的逆向注释自己复现一遍 46 字节报文的推导过程也可以给--new模式补一个自动探测被接受的 MAC的小功能或者把批量脚本升级成并发版用 goroutine 同时处理多台设备。工具本身是开源的改动它、理解它本身就是对这套设备协议最好的学习方式。【免费下载链接】zteOnuA tool that can open ZTE onu device factory mode项目地址: https://gitcode.com/gh_mirrors/zt/zteOnu创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表