前言
2017年6月接入了北京联通的光纤宽带,从最开始的50M到现在提速到200M,也从海淀搬到了东城,两个区局都给的是上海贝尔的RG200O的光猫,从刚开始的为获取独立公网IP的目的到后续进行IPTV的优化组网,对RG200O也做了一些研究,本文做简单的记录。
1. 光猫设备介绍
光猫型号:上海贝尔RG200O(WO-36)
硬件版本:RG200O_V1A3
软件版本:E200OA3V15
光猫配置:EPON 1GE+3FE+2POTS+2.4GWifi
CPU信息:Broadcom BMIPS4350 V8.0(2 Core 400MHz)
内存信息:128MB(100200KB in /proc/meminfo)
2. 光猫破解研究
2.1 通过WEB管理界面破解桥接
选择联通的网络就是看重联通作为一级ISP接入的宽带可以获得公网IP,光猫的NAT性能和可配置选项都较弱,而且现在的光猫大部分都集成了路由功能,想要高效的利用网络,就需要破解光猫隐藏的桥接功能。
通过检索网上的信息得知可以通过WEB管理界面的隐藏元素将Internet上行WAN配置为桥接。如下图所示,只要使用运营商提供的普通用户和密码登录到WEB管理页面,转到【网络】-【宽带设置】选项卡通过F12调试工具找到图中的Table,并将图示两个元素的隐藏属性去除即可看到桥接配置选项,配置为Bridge保存选项即可通过下级路由进行PPPoE拨号获得公网IP。
2.2 进阶1-用油猴脚本开启隐藏功能
通过修改光猫桥接的方法,我们可以了解到普通用户登录到WEB管理界面会限制很多功能。网上有通过在WEB管理登录后下载backupsettings.conf获得管理员密码的方法,但基本上都是基于电信的RG200O-CA型号的,我进行尝试后发现获取的用户名和密码无法登录管理界面,联通光猫传言需要通过cu.html进行管理员登录的方法也不可行,cu.html的访问会被重定向到login界面并退出普通用户登录。
于是为了获得更完整的WEB管理功能,桥接功能的隐藏启发我大部分配置应该也都是在普通用户页面中的,只不过是被隐藏掉了,应该可以通过油猴脚本之类的网页辅助工具,开启普通用户下的隐藏功能。于是我仔细研究了WEB管理页面的源码,发现可以通过Hook页面调用的一个名为getCfg的JS函数来达到user登录显示CUAdmin管理选项的目的。
油猴脚本见 Github,使用后可以看到大部分对普通用户隐藏的选项,如下图是网络管理部分的区别。
2.3 进阶2-开放光猫telnet调试端口
在研究的过程中发现,电信的RG200O之前有scsrvcntr.cmd的后端path来开关telnet/ssh端口,测试这个设备的时候并未发现这个路径有页面,于是想到了用当前页面的一些form模拟电信光猫的管理页面向scsrvcntr.cmd强制请求开启telnet,经过Chrome Console内的一番操作后竟然成功了,开启了光猫的telnet端口。
但是光猫的telnet端口有默认密码,试验了几天之后终于试出了telnet密码是telnetadmin,成功进入光猫shell!
进入shell之后首先研究了光猫的www目录,发现了www目录中有一个较为异常的htm文件bjcfg.html,浏览之后发现这就是光猫的开发为维护人员留的backdoor,能实现直接向cgi请求scsrvcntr.cmd开启关闭telnet端口。如果一开始就知道这个路径就不用F12费尽心思的尝试请求了。
另外,SSH端口无法正常开启,内部的ssh进程启动后就会崩掉,有telnet暂时足够,没有继续深究。
2.4 进阶3-直接开启光猫管理员管理
太忙了… 有空再补… 收到Github上的朋友提了Issue,简单更新一下思路:
研究固件内的文件发现不同地区的配置在 /etc/cu/* 下,其中的 soft_feature.cfg 应该是针对不同地区的配置,其中有一项为 support_bjcu_admin 此项应该是导致 cu.html 被重定向的源头。
修改此项可以用两种办法:
- Shell 命令中有 soft_feature 命令,可以用来临时修改此配置,重启后会失效。
- 可以直接光猫区域配置文件 soft_feature.cfg。由于Root区是 RO 的,所以修改 /etc/cu/*/soft_feature.cfg (*代表区域配置,比如北京EPON对应asb-beijing-epon-h248) 文件需要用一些特殊的手段,我可能用了 mount –bind 覆盖了文件,或者是重新写入了squashfs。
目前已经用HG8240T代替了RG200O,所以说明的方法可能不准确,修改思路仅供参考。