ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

3个命令拿下中兴光猫最高权限:zteOnu工厂模式与永久Telnet实操全解

3个命令拿下中兴光猫最高权限:zteOnu工厂模式与永久Telnet实操全解 3个命令拿下中兴光猫最高权限zteOnu工厂模式与永久Telnet实操全解【免费下载链接】zteOnuA tool that can open ZTE onu device factory mode项目地址: https://gitcode.com/gh_mirrors/zt/zteOnu如果你的光猫是中兴ZTEONU 设备大概率经历过这样的憋屈明明设备硬件支持、固件也带能力但运营商在出厂配置里把 Telnet 关了、把超级管理页藏了你想改个桥接、看个光功率、调个 VLAN都只能对着只读的普通界面干瞪眼。zteOnu 就是为解决这个痛点而生的开源小工具——它通过模拟设备出厂时的webFac认证流程帮你打开中兴光猫的工厂模式并可选地写入永久 Telnet 配置让你拿回设备的完全控制权。本文会从编译到原理带你完整走一遍这条解锁之路。开箱先看清它到底能替你做什么在动手之前先用 30 秒建立一个全景认知。zteOnu 的定位非常聚焦它不做网管、不做测速、不做拨号只干两件事——开工厂模式、开永久 Telnet。能力解决的问题适合谁工厂模式Factory Mode拿到root级登录凭证进入设备隐藏管理面想改桥接、调光功率、备份配置的高级用户永久 Telnet重启不掉线随时用命令行接管设备运维、自动化脚本、长期折腾党新旧两套认证方案兼容老固件与带SendInfo校验的新固件固件版本较新的设备用户自定义端口避开默认端口扫描降低暴露面公网/半公网环境下的谨慎派一句话总结它是拿钥匙的工具不是开门后的管家。后面所有的高级玩法都以拿到这串凭证为起点。照抄即用5 分钟跑通第一次解锁第一步准备环境一台装了 Go 1.20 的电脑项目本身基于 Go 编写编译非常轻量一台中兴 ONU 光猫电脑与光猫处于同一网段一个具备管理员权限的账号默认telecomadmin/nE7jA%5m这是电信设备的常见出厂组合第二步获取源码并编译git clone https://gitcode.com/gh_mirrors/zt/zteOnu cd zteOnu go build -o zteonu main.go编译产物就是一个单文件可执行程序zteonu不依赖任何运行时拷到哪都能跑。第三条命令执行解锁./zteonu -i 192.168.1.1-i指定光猫 IP默认就是192.168.1.1多数情况下可以省略。预期输出长这样ZteONU dev, built at unknown source: ... ----------------------------------- 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✅ 看到user: root / pass: Zte521说明你已经拿到了工厂模式凭证。这串凭证就是后续所有高级操作的通行证——你可以用它直接登录光猫的 Telnet 服务如果设备本身开了或配合工具完成配置修改。功能逐个击破三条高频指令背后的机关 中兴光猫工厂模式解锁的正确姿势它解决什么问题普通管理员界面只暴露有限配置项工厂模式则打开全部隐藏开关。底层原理点到即止设备存在一个隐藏的webFac入口是出厂调试用的认证通道。工具按出厂流程逐步提交SendSq.gch、RequestFactoryMode.gch、CheckLoginAuth.gch等请求每个请求之间用动态派生出的 AES-ECB 密钥加密载荷最终触发FactoryMode.gch返回user/pass字段——这串凭证就是工厂账号。可复制的命令# 默认管理员账号电信常见组合 ./zteonu -i 192.168.1.1 # 换了管理密码手动指定 ./zteonu -u telecomadmin -p 你的密码 -i 192.168.1.1 # 管理端口被改过比如 8080 之外 ./zteonu -i 192.168.1.1 --port 8080预期结果输出逐步ok的 5 步流程最后打印工厂账号密码。如果哪一步失败工具会自动重试最多 10 次每次间隔 0.5 秒。 zteOnu 开启 Telnet一条命令拿到永久通道它解决什么问题很多固件即使开了 Telnet重启后又被还原成关闭状态——因为 Telnet 开关写在设备数据库DB里普通操作改不到根子上。底层原理拿到工厂凭证后工具直接用 Telnet 登录设备向设备数据库写入TelnetCfg配置项Lan_Enable 1、TSLan_UName root、TSLan_UPwd Zte521、Max_Con_Num 3、InitSecLvl 3然后执行DB save持久化最后reboot让配置生效。因为改的是持久化数据库重启后依然有效。可复制的命令./zteonu -i 192.168.1.1 --telnet预期结果Permanent Telnet succeed user: root, pass: Zte521 wait reboot..设备自动重启后用任意终端验证telnet 192.168.1.1 23输入root/Zte521即可登录命令行。如果不想用默认 23 端口加--tp指定./zteonu -i 192.168.1.1 --telnet --tp 2323 --new 新模式为什么 SendInfo 里藏着一个 MAC它解决什么问题部分新固件在认证链路上多了一道SendInfo校验——设备会校验客户端发来的魔法载荷里编码的 MAC 是否在白名单内旧方案在新固件上会卡在check login auth一步。底层原理项目通过逆向设备的校验虚拟机发现这个 46 字节载荷本质是 12 个 little-endian 的uint16值每个值后跟两个固定 0 字节MAC 的每个字节被 XOR 进了对应的值字节。于是工具可以把载荷拆成与设备无关的固定帧和与 MAC 相关的可变部分只要知道当前网卡的 MAC就能实时算出合法的载荷——不需要再专门去伪造成00:07:29:55:35:57。可复制的命令# 自动取本机第一个非回环网卡的 MAC 生成载荷 ./zteonu -i 192.168.1.1 --new # 指定用哪个网卡的 MAC ./zteonu -i 192.168.1.1 --new --iface en0 # 或直接指定设备认可的 MAC历史经验值 ./zteonu -i 192.168.1.1 --new -m 00:07:29:55:35:57 # 新方案 永久 Telnet 一步到位 ./zteonu -i 192.168.1.1 --new --telnet预期结果与旧方案输出一致但step [3]内部多执行了一次SendInfo请求——成功则说明设备认可了当前 MAC 派生的载荷。源码透视一次 webFac 握手是怎么发生的项目的代码结构非常清爽五分钟就能读透zteOnu/ ├── main.go # 入口只负责调用 cmd.Execute() ├── cmd/ │ ├── root.go # Cobra 命令行定义 参数绑定 主流程编排 │ └── version.go # version 子命令 ├── app/ │ ├── factory/ # 工厂模式核心核心中的核心 │ │ ├── factory.go # 5 步握手流程 重试逻辑 │ │ └── model.go # AES 密钥池 MAC 载荷推导 │ └── telnet/ # 永久 Telnet 实现 │ ├── telnet.go # 登录、写 DB、保存、重启 │ └── model.go # Telnet 连接结构 ├── utils/ # AES-ECB 加解密工具 └── version/ # 版本信息握手主流程Handle() 的 5 个台阶func (f *Factory) handle() (tlUser string, tlPass string, err error) { fmt.Print(step [0] reset factory: ) if err f.reset(); err ! nil { return } // 先激活 web 服务 fmt.Println(ok) fmt.Print(step [1] request factory mode: ) if err f.reqFactoryMode(); err ! nil { return } // 提交 RequestFactoryMode.gch fmt.Println(ok) fmt.Print(step [2] send sq: ) ver, err f.sendSq() // 拿随机数 rand派生 AES 密钥 if err ! nil { return } fmt.Println(ok) fmt.Print(step [3] check login auth: ) switch ver { case 1: f.checkLoginAuth() // 老固件直接验密 case 2: f.sendInfo(); f.checkLoginAuth() // 新固件先发 MAC 载荷再验密 } fmt.Println(ok) fmt.Print(step [4] enter factory mode: ) tlUser, tlPass, err f.factoryMode() // FactoryMode.gch 返回 user/pass if err ! nil { return } fmt.Println(ok) return }值得注意的是Handle()外层的重试循环单次握手失败最多重试 10 次。这背后是对真实设备行为的妥协——光猫的 web 服务有时刚唤醒第一次请求会吞掉连接重试是提高成功率最朴素的工程手段。密钥派生AES-ECB 密钥池 XORfunc getKeyPool(version uint8, r int, newR int) []byte { idx : r keyPool : AesKeyPool[idx : idx24] // 老固件直接用秒数索引 if version 2 { idx ((0x1000193*r)0x3F ^ newR) % 60 // 新固件随机数参与混合 keyPool AesKeyPoolNew[idx : idx24] } newKeyPool : make([]byte, len(keyPool)) for i : range keyPool { newKeyPool[i] (keyPool[i] ^ 0xA5) 0xFF // 每个字节异或 0xA5 } return newKeyPool }设备用秒级随机数当索引从内置密钥池取 24 字节再整体异或0xA5得到会话密钥工具侧只要复刻这条派生规则就能和设备的 AES-ECB 加密对齐。这是整个工具能骗过认证的最关键一环。永久 Telnet改的不是开关是数据库prefix : sendcmd 1 DB set TelnetCfg 0 lanEnable : prefix Lan_Enable 1 tsLanUser : prefix TSLan_UName root tsLanPwd : prefix TSLan_UPwd Zte521 maxConn : prefix Max_Con_Num 3 initSecLvl: prefix InitSecLvl 3 t.sendCmd(lanEnable, tsLanUser, tsLanPwd, maxConn, initSecLvl) t.sendCmd(sendcmd 1 DB save) t.sendCmd(reboot)sendcmd 1 DB是中兴设备的数据库操作接口DB save把改动写入持久层。所以永久二字的本质是改的是配置库不是运行时状态。踩坑实录四个高频翻车现场❌ 现象一connection refused/ 连接超时根因绝大多数是 IP 或端口不对或者电脑与光猫不在同一网段。解决办法先ping 192.168.1.1确认连通确认管理端口默认 8080未被运营商改掉检查本机防火墙是否拦截了出站请求。❌ 现象二step [3] check login auth: errors user or password根因管理员账号密码不对。telecomadmin是电信常见组合但不代表你的设备一定用它。解决办法尝试不同运营商默认组合——电信telecomadmin/nE7jA%5m、移动CMCCAdmin/aDm8H%MdA、联通CUAdmin/CUAdmin如果密码被运营商改过只能先通过其他渠道如光猫标签、客服拿到管理员密码。❌ 现象三--new模式报new mode requires a usable MAC根因工具找不到合适的本机网卡 MAC比如全是回环地址或虚拟网卡或者设备只认特定 MAC。解决办法显式指定--iface eth0选择物理网卡或直接-m 00:07:29:55:35:57传历史白名单 MAC实在不行就切回旧方案试试固件是否支持。❌ 现象四Telnet 显示成功但连不上根因端口没对上或设备还在重启中。解决办法确认--tp端口与连接命令一致wait reboot..后多等 1~2 分钟再连若仍失败重新执行一遍--telnet写库操作是幂等的重跑无副作用。再进一步把解锁动作沉淀成脚本 批量解锁一台台来别贪快#!/bin/bash # 批量开启工厂模式 永久 Telnet for ip in 192.168.1.1 192.168.1.2 192.168.1.3; do echo processing $ip ./zteonu -i $ip --telnet echo OK: $ip || echo FAIL: $ip sleep 5 # 给设备留重启时间避免打爆 web 服务 done 并发提速goroutine 的正确打开方式工具本身是单线程的但它的 HTTP 握手是纯 IO 操作天然适合并发。写个小 wrapper 用 Go 并发调用时注意两点控制并发数建议 ≤5避免光猫 web 服务被瞬间打挂每个协程独立编译参数不要共享变量。# 简单粗暴的 xargs 并发示例4 并发 printf 192.168.1.1\n192.168.1.2\n... | xargs -P 4 -I {} ./zteonu -i {} --new️ 拿到钥匙之后三件立刻该做的事改密码root/Zte521是公开凭证登录后第一时间用sendcmd 1 DB set TelnetCfg 0 TSLan_UPwd换掉改端口把 Telnet 从 23 挪到高位端口如 2323/8023降低被批量扫描命中的概率留备份动手改配置前先把原厂配置sendcmd 1 DB dump导出留存方便回溯。写在最后工具是钥匙责任在拿钥匙的人回到开头那个问题——zteOnu 值得装吗如果你只是嫌光猫后台难用那它对你只是锦上添花如果你要做桥接、要调光功率、要写自动化脚本管理家庭/办公网络那它就是刚需。它的价值在于把逆向固件、逆向加密、逆向校验虚拟机这些脏活累活全部封装进一条命令让不懂底层协议的普通用户也能安全地拿到控制权。适用人群网络运维、技术极客、家庭网络优化者、设备安全研究者。最后必须说清的风险这类工具本质上是在做设备提权操作——修改设备数据库、开放 Telnet 通道都有一定的变砖和安全隐患。请务必只在自己拥有或已获授权的设备上操作只在受信网络内使用用完及时收紧端口和密码。能力越大责任越大解锁之前先想清楚你要拿这份权限去做什么。【免费下载链接】zteOnuA tool that can open ZTE onu device factory mode项目地址: https://gitcode.com/gh_mirrors/zt/zteOnu创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进