对中兴光猫zteOnu.exe项目的简单分析(提供下载地址)
0.前言
首先声明一下,这个帖子是对已经开源的项目进行交流学习,只是帮你了解这个开源项目的原理,不破解任何东西。
在二手市场买了一个光猫,但是通过恢复出厂设置,管理员账号并不是默认密码,是没办法获取到之前运营商设置的随机密码,因为按reast只能恢复用户设置内容,最后通过工具恢复,感谢这位恩山论坛朋友帮我恢复出厂设置。
光猫是G7615V2电信江苏地区的(管理员密码是随机的),于是对这个开源zteOnu工具感兴趣,同时感谢开源作者的贡献。

1.项目地址
GitHub - Septrum101/zteOnu: A tool that can open ZTE onu device factory mode
下载软件:Releases · Septrum101/zteOnu
2.实现原理
猜测项目原始来源:应该反编译中兴某一个专门用来进行出产设置的工具,应该是是逆向了官方的TelnetONU。
这个zteOnu工具的实现的具体流程如下:
┌──────────────┐ HTTP (TCP 8080) ┌──────────────┐
│ 本机脚本 │ ←——————————————→ │ 光猫 Web │
└────┬─────────┘ └────┬─────────┘
│ │
│ 1. 激活工厂接口 │
│ 2. 请求 FactoryMode │
│ 3. 拿随机数→算密钥 │
│ 4. 加密发送账号密码 │
│ 5. 拿到临时 Telnet 账号/密码 │
├─────── 以下走 Telnet (TCP 23) ─────────┤
│ 6. 登录临时 shell │
│ 7. 5 条 sendcmd 改写 TelnetCfg 表 │
│ 8. reboot │
│ ▼
│ Flash 中的 db 被固化
│ 9. 重启完成 → Telnet 23 端口永久开放
中兴光猫内部其实是预留了一个工厂接口用来开启临时的Telnet给维护人员进行测试.
这个接口只能允许特定的网口mac申请访问,也相当限制指定机器访问这个接口
为什么MAC地址要设置:00:07:29:55:35:57 呢?
因为zteOnu并没有完全破解绑定MAC的解密原理,解决办法就只能是根据已知的MAC发送的数据进行解密,电脑也就只能改成这个数据对应的MAC,这个数据在Sendinfo阶段上传,后面会详细说明。
这里说明一下Telnet:
目前大部分光猫是运行的liunx系统,一般系统调试会通过Telnet进行无线设置,比如文件删除移动,调用系统工具等,并且Telnet通过账号,密码访问liunx主机,这个Telnet在liunx是权限大小的,好比Win shell.
这里以中兴默认路由器192.168.1.1地址80端口为例子
1.首先进入重置工厂模式 (reset),POST方式访问地址http://192.168.1.1:80/webFac
Body内容是 SendSq.gch
2.然后请求进入工厂模式,POST方式访问地址http://192.168.1.1:80/webFac
Body内容是 RequestFactoryMode.gch
前面都是没有加密的明文传输
3.获取交流密钥阶段,POST方式访问地址http://192.168.1.1:80/webFac
Body内容是SendSq.gch?rand=3
也就是发一个rand随机数1给光猫,光猫收到后也会发一个rand随机数2给zteOnu
光猫,zteOnu知道双方的随机数后 根据别人不知道的相同的密钥生成数据生成一个临时的交流密钥,
加密后面的交流内容。这样做是为了防止过程被公开,增加安全性,同时这个随机数是随机的,这个密钥只能用于本次通信。
4.发送加密的机器MAC数据和接口的版本信息比如version61。Sendinfo阶段,POST方式访问地址http://192.168.1.1:80/webFac
这个阶段,通过发送加密的mac数据给光猫,如果光猫解密了Sendinfo数据,判断发送的数据是加密的机器MAC,才允许通过下面的阶段,同时连接Telnet也只能根据这个MAC地址的机器连接,否则即使密码正确也不能访问。
前面说了00:07:29:55:35:57 这个mac地址,因为没有解决mac地址的加密绑定方法,因此只能将加密后的信息重新发生,加密了改变不了,所以就只能改电脑的实际mac来解决
5.进入登录阶段,获取交流密钥后,然后通过光猫的超级账号密码登录工厂模式
于是通过之前获取的密钥加密下面字符,发送:
CheckLoginAuth.gch?&version61&user=超级账号&pass=超级密码
然后会得到相应响应值,可以判断是否成功。
6.进入Telnet开启阶段,成功后,关键一步获取临时的Telnet账号密码
通过之前获取的密钥加密下面字符,发送:
提交FactoryMode.gch?mode=2&user=notused
然后光猫会返回:
通过之前获取的密钥解密出下面字符 :
FactoryMode.gch?user=临时的Telnet账号&pass=临时的Telnet密码
后面就可以通过这个账号登录Telnet,然后重新设置光猫配置表,开启长期的Telnet。
3.zteOnu使用命令
注意:这个工具必须知道网页的超级密码才能开启Telnet
zteOnu.exe --telnet --user 运营商(默认)超级账号 --pass 运营商(默认)超级密码 --ip 192.168.1.1 --port 80或者是8080
4.Python版本
5.总结知识
我们可以将其这样的加密方法归类为一种 基于挑战-响应(Challenge-Response)的简易对称加密认证流程。
挑战-响应是一种身份验证机制:
验证方(Verifier) 向 声称者(Claimant) 发送一个随机值(称为“挑战”),
声称者使用该挑战和一个共享秘密(如密码、密钥)计算出一个“响应”,
验证方用相同逻辑验证该响应是否正确,从而判断对方是否知道该秘密。
这种方式避免了直接在网络上传输密码,提高了安全性。
对称是什么?
- 双方(客户端和服务器)共享同一个秘密(如密码、设备密钥、MAC 地址等);
- 计算响应时都使用相同的算法 + 相同的秘密;
- 不涉及公钥/私钥(非对称加密),所以称为 对称认证。
注意:这里“对称”指的是密钥共享模型,不一定是用 AES 等对称加密算法。
这类机制在嵌入式设备中很常见,容易实现,属于“security through obscurity”(隐蔽式安全),不过一旦算法泄露(如通过固件提取或抓包分析等),整个认证即失效。
6.对厂商的建议
一劳永逸,直接使用芯片内部的专门硬件非对称加密模块,防止密钥泄露,参考目前Xbox游戏机加密手段。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)