求助:如何通过Telnet修改华为HS8145C5光猫的Telnet密码及Web管理密码
我目前住在国内,平时靠各类VPN访问国际网络,但VPN经常被封,所以折腾起了路由器和光猫这些设备。
我用的是中国电信的HS8145C5光猫,每次用LOID注册后,运营商都会自动修改光猫的管理员密码,还会通过TR069 ACS远程阻断我的VPN连接,而且他们根本不给我LOID、PPPoE账号和密码!
不过我有光猫的物理权限,可以按重置键——每次重置后虽然断网,但能用默认账号telecomadmin和密码nE7jA%5m拿到管理员权限,这账号密码运营商当然不会主动给我。
后来我弄到了LOID,但每次注册光猫恢复上网后,管理员权限就没了,因为运营商会立刻把admin密码改成随机字符串。不过我找到了办法开启Telnet,还能导出配置文件获取加密后的Web管理密码,步骤是这样的:
telnet 192.168.1.1 root adminHW su shell cp /mnt/jffs2/hw_ctree.xml /mnt/jffs2/mycfg.xml.gz cd /mnt/jffs2 aescrypt2 1 mycfg.xml.gz tem gzip -d mycfg.xml.gz grep WebUserInfoInstance mycfg.xml rm mycfg.xml
Telnet的账号是root,密码是adminHW。最后grep会输出加密后的Web用户信息,比如:
<X_HW_WebUserInfoInstance InstanceID="1" ModifyPasswordFlag="0" UserName="useradmin" Password="$2!ZM$Idyl@J~}>8'n6KWMF|-@Koy>C,;ofJBq_'V5$" UserLevel="1" Enable="1" Alias="cpe-1"/> <X_HW_WebUserInfoInstance InstanceID="2" ModifyPasswordFlag="1" UserName="telecomadmin" Password="$2:8jUNk0n|HenK~CB|'^&Aopi"<v~xJmC&<!TXx`3$" UserLevel="0" Enable="1" Alias="cpe-2" PassMode="0"/>
这些密码是加密的,我用找到的工具(把密码贴到文本解密框点$2)能解密出真实密码。另外PPPoE密码我通过F12把输入框类型从password改成text拿到了,但它是64位十六进制字符串,查了下是SHA256(MD5(pwd)),我写了个Python脚本暴力破解出了原密码:
from hashlib import md5, sha256 count = 0 reversemap = dict() def guess(s): if s in reversemap: return reversemap[s] global count for n in range(count, 1000000000): i = str(n) digest = sha256(md5(i.encode()).hexdigest().encode()).hexdigest() reversemap[digest] = i if digest == s: count = n + 1 break return i
但拿到PPPoE密码也没用,因为我怎么都删不掉TR069的WAN连接。不过我有SU级别的Telnet权限,用找到的脚本把ISP接口改成了工厂接口:
cp -f /mnt/jffs2/hw_ctree.xml /mnt/jffs2/hw_ctree_bak.xml cp -f /mnt/jffs2/hw_boardinfo /mnt/jffs2/hw_boardinfo_bak cp -f /etc/wap/hw_default_ctree.xml /mnt/jffs2/hw_ctree.xml sed -i 's/^.*obj.id = "0x0000001a" ; obj.value =.*$/obj.id = "0x0000001a" ; obj.value = "COMMON";/' /mnt/jffs2/hw_boardinfo sed -i 's/^.*obj.id = "0x0000001b" ; obj.value =.*$/obj.id = "0x0000001b" ; obj.value = "COMMON";/' /mnt/jffs2/hw_boardinfo sed -i 's/^.*obj.id = "0x00000031" ; obj.value =.*$/obj.id = "0x00000031" ; obj.value = "NOCHOOSE";/' /mnt/jffs2/hw_boardinfo reboot
之后我把光猫改成桥接模式,用路由器拨号,删掉了TR069 WAN连接,禁用了ACS和定期上报,也失效了自动上报的登录信息——终于能正常用VPN了!但好景不长,运营商居然还能改我的光猫设置,想想也合理,我没改Telnet和Web的密码啊。
我知道配置都存在/mnt/jffs2/hw_ctree.xml里,这个文件是先gzip压缩再AES加密的,要是能修改密码那行,再重新压缩加密替换原文件应该就行,我找到了重新加密替换的命令:
gzip /mnt/jffs2/mycfg.xml aescrypt2 0 /mnt/jffs2/mycfg.xml.gz tem cp -f /mnt/jffs2/mycfg.xml.gz /mnt/jffs2/hw_ctree.xml
但问题是我现在不知道怎么编辑加密前的配置文件,而且改完接口后,密码加密方式变成带盐的了:
<X_HW_WebUserInfoInstance InstanceID="1" ModifyPasswordFlag="0" UserName="useradmin" Password="$2*P#<Rm12MIRDkTTWT1NLn01YXTlMwFM]>d=_$|A$0&VND3OIl~fvHI$bbo8Su>jVP)^v]MiPG>.u9'{N6n)]=cIhB0+>tG1IS|9R$" UserLevel="1" Enable="1" Alias="cpe-1" Salt="deeb9e44dc1b96caaa9c312d" PassMode="3"/> <X_HW_WebUserInfoInstance InstanceID="2" ModifyPasswordFlag="0" UserName="telecomadmin" Password="$2ha17UJ3)&/*k,o-D8Y1PJF:(4b^vWVK}$5:+UQ_0BJLWCDy:AGaY:~!_dBc'*E5DRc#De56S=r'dUHwUMP=b/h3V3:Fd^XB_MQ`N$" UserLevel="0" Enable="1" Alias="cpe-2" Salt="180cf7332c754daddf2d42f2" PassMode="3"/>
现在原来的解密工具用不了了,但我确定这些是加密不是哈希,因为我知道第一个解密后是zvsmc,第二个是默认的nE7jA%5m,猜测用的是AES加密。
另外我也改不了Telnet密码,光猫用的是BusyBox v1.26.2(Dopra Linux),试了passwd命令根本不行:
Login:root Password: WAP>passwd ERROR::Command is not existed WAP>su success! SU_WAP>passwd ERROR::Command is not existed SU_WAP>shell BusyBox v1.26.2 () built-in shell (ash) Enter 'help' for a list of built-in commands. profile close core dump WAP(Dopra Linux) # passwd passwd: no record of srv_ssmp in /etc/shadow, using /etc/passwd Changing password for srv_ssmp Old password: Incorrect password passwd: password for srv_ssmp is unchanged WAP(Dopra Linux) # passwd root passwd: srv_ssmp can't change password for root
我已经拿到了光猫的命令列表,也能备份和恢复配置文件(就是那个hw_ctree.xml),还查到华为用的是DES加密,找到了解密脚本正在逆向,但还是不知道怎么生成符合要求的加密密码来修改配置。
现在想请教大家:怎么才能修改这个HS8145C5光猫的Telnet密码和Web管理密码,让运营商不能再远程修改我的光猫设置?
备注:内容来源于stack exchange,提问作者Ξένη Γήινος




