新光猫(中兴方案)配置(db_user_cfg.xml)解密方案

查看 162|回复 11
作者:Leland   
新光猫(中兴方案)配置(db_user_cfg.xml)解密方案
前言
家里最近升级了宽带,换了个新光猫(型号UNG300Z),心血来潮想进后台开下ipv6改改桥接啥的,可惜网上完全没有这个型号猫的信息,其他通用密码试过了也进不去光猫,于是今天鼓捣了一天总算把超级密码给倒腾出来了,顺便逆向了配置的解密方案,特此记录一下。
新光猫指的是网上那些解密方法都没办法解密的情况下使用的,我查询我这个光猫20年八月份才推出,确实算是比较新。  
说明
本文的通用用户名密码使用的是移动的CMCCAdmin,aDm8H%MdA,电信/联通可能需要用相应的通用密码。通用用户名密码一般是写死在代码里面的,与超级密码可以动态改变不同。  
逆向过程记录放在操作步骤后面
操作步骤
首先要打开光猫的telnet:
访问以下网址即可
http://192.168.1.1/usr=CMCCAdmin&psw=aDm8H%25MdA&cmd=1&telnet.gch
然后连接光猫:
telnet 192.168.1.1
Login: CMCCAdmin
Password: aDm8H%MdA
注意telnet一段时间无操作会自动断开。
此时已经进入了光猫,进入配置文件目录:
cd /userconfig/cfg
然后随意使用任何方法导出db_user_cfg.xml。
我这个光猫命令比较全,所以我使用了ftpput上传到服务器再下载,有的光猫有usb口什么的会更加方便。
然后用以下python脚本即可解密配置文件(有兴趣可以帮忙打包一下,我pc上环境不干净,打包很慢):
from Crypto.Cipher import AES
from binascii import a2b_hex
KEY = b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
def decrypt(text):
    cryptor = AES.new(KEY, AES.MODE_ECB)
    plain_text = cryptor.decrypt(a2b_hex(text))
    return plain_text
cfg_file = open("db_user_cfg.xml", "rb")
dec_file = open("db_user_cfg.decode.xml", "w")
file_header = cfg_file.read(60)
while 1:
    trunk_info = cfg_file.read(12)
    trunk_data = cfg_file.read(65536)
    trunk_real_size = int.from_bytes(trunk_info[0:4], byteorder='big', signed=False)
    trunk_size = int.from_bytes(trunk_info[4:8], byteorder='big', signed=False)
    next_trunk = int.from_bytes(trunk_info[8:12], byteorder='big', signed=False)
    print(trunk_real_size, trunk_size, next_trunk)
    dec_file.write(decrypt(trunk_data.hex()).decode(encoding="utf-8"))
    if next_trunk==0:
        break
逆向思路与过程
找到配置文件
首先通览根目录,与普通的linux根目录对比容易关注到userconfig文件夹。
浏览userconfig文件夹后我们可以发现cfg文件夹中有三个文件值得注意:
db_backup_cfg.xml
db_default_cfg.xml
db_user_cfg.xml
可惜db_user_cfg.xml和db_backup_cfg.xml都是加密的,到这里也没有什么进一步的思路了。  
浏览网页文件
于是我想到访问光猫时候网页奇怪的后缀xxx.gch,这不是一个常见的网页后缀,于是可以全盘扫描gch后缀的文件:
find / -name "*.gch"
不难发现全部存放在/home/httpd目录下,没看来这是什么语言,但是简单的理解还是能做到,定位到/home/httpd/auth/impl.gch中莫名其妙地调用了一个login函数,没有从任何地方导入,思路似乎又就此中断了。  
逆向httpd
纠结一段时间后httpd引起了我的注意,回想起访问光猫404界面时最下方有一行小字Mini web server 1.0 ZTE corp 2005.。会不会是httpd进程有猫腻呢?
全盘搜索一下httpd,找到了它,在/sbin/httpd。导出到ida进行逆向分析。
搜索字符串login,果然在init_extern_funcs函数中出现了,再看这函数命名,不摆明了刚才追踪不到的login函数就是在这儿注册的吗?


ida_login函数.png (127.72 KB, 下载次数: 0)
下载附件
2022-1-17 21:20 上传

可惜,跟进si_webd_f_login是给我看得晕头转向完全找不到北,使用的一些导入函数(出现在ida imports栏里)又完全找不到出处(这个可能是我的问题,有什么方便的办法可以查看从哪里导入的请指教)。这条线索又断了。  
瞎鼓捣
我甚至考虑了hook函数来看一下,可惜刚写了个demo上传重启之后文件立刻消失了,这条路也走不通。
看一眼进程
我决定看一眼进程有没有什么异常,果然有几个看起来不太正常的进程,其中一个便是我们的主角cpsd


ps_cspd.png (9.26 KB, 下载次数: 0)
下载附件
ps_cspd
2022-1-17 21:21 上传

从/bin/cspd把我们的主角请出来到ida做个客,看一眼导出函数,好家伙


cspd_1.png (29.16 KB, 下载次数: 0)
下载附件
导出函数
2022-1-17 21:21 上传

至此已经完成了大半了,接下来的就是些静态分析的工作了,关键的aes密码设置在decry_param函数里面,密码就是16个0x00而已。
文件大体结构可以看这篇文章:中兴光猫配置文件db_user_cfg.xml结构分析及解密,唯一的不同就是数据部分变成了AES加密而已。

新光, 函数

18284968629   

楼主好 我也是这款光猫 --四川绵阳移动 结合你的文章和网络上搜索的文章发现密码加密了,经过几天不断百度 搜索到这篇文章 https://blog.csdn.net/weixin_46308166/article/details/125951193  按照这个方法成功查询密码 账号CMCCAdmin 密码     I*2Xu8Hi3   感谢
Leland
OP
  


wasd3152 发表于 2022-1-17 23:21
decry_param,好家伙这个玩意应该可以执行吧,如果可以直接执行,直接拿到已经解密的文件,在拷贝出已经解 ...

那个cspd里面的一个函数而已,整个挺复杂的,而且是arm架构,应该不太能运行起来
cydiansu   

这个猫还不错,还可以telnet,现在猫连上 运营商好多都关闭了端口.
努力画图   

这个牛逼               
随缘的风   

看起来很厉害,直接问装维人员拿不可以吗
hao138   

技术性尝试,积极支持。
xukelinboy   


随缘的风 发表于 2022-1-17 21:40
看起来很厉害,直接问装维人员拿不可以吗

个个像你这样想,技术就不会进步了!!!
彭于晏yu   

学习了感谢分享
aonima   

感谢分享,学习了
您需要登录后才可以回帖 登录 | 立即注册

返回顶部