0.前言

首先声明一下,这个帖子是对已经开源的项目进行交流学习,只是帮你了解这个开源项目的原理,不破解任何东西。

在二手市场买了一个光猫,但是通过恢复出厂设置,管理员账号并不是默认密码,是没办法获取到之前运营商设置的随机密码,因为按reast只能恢复用户设置内容,最后通过工具恢复,感谢这位恩山论坛朋友帮我恢复出厂设置。

3550387095  https://www.right.com.cn/forum/?815290

光猫是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版本

GitHub - douniwan5788/zte_modem_tools: tools for zte modem

5.总结知识


我们可以将其这样的加密方法归类为一种 基于挑战-响应(Challenge-Response)的简易对称加密认证流程


挑战-响应是一种身份验证机制:

验证方(Verifier)声称者(Claimant) 发送一个随机值(称为“挑战”),
声称者使用该挑战和一个共享秘密(如密码、密钥)计算出一个“响应”,
验证方用相同逻辑验证该响应是否正确,从而判断对方是否知道该秘密。

这种方式避免了直接在网络上传输密码,提高了安全性。


对称是什么?

  • 双方(客户端和服务器)共享同一个秘密(如密码、设备密钥、MAC 地址等);
  • 计算响应时都使用相同的算法 + 相同的秘密;
  • 不涉及公钥/私钥(非对称加密),所以称为 对称认证

注意:这里“对称”指的是密钥共享模型,不一定是用 AES 等对称加密算法。


这类机制在嵌入式设备中很常见,容易实现,属于“security through obscurity”(隐蔽式安全),不过一旦算法泄露(如通过固件提取或抓包分析等),整个认证即失效

6.对厂商的建议


一劳永逸,直接使用芯片内部的专门硬件非对称加密模块,防止密钥泄露,参考目前Xbox游戏机加密手段。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐