0. 查看设备信息

首先,直接在浏览器中访问光猫后台管理页面:
http://192.168.1.1:8080

此时可以看到天翼网关的登录界面。尝试使用默认的超级管理员账号和密码登录:

  • 用户名: telecomadmin
  • 密码: nE7jA%5m

如果登录失败,说明该批次/版本的默认超级密码已被修改。此时,可以使用光猫背部的普通账户和密码进行登录,登录后便能查看到光猫的具体设备信息。以我这台设备为例,型号为 TEWA-707G v2


1. 获取设备配置文件

经过查阅资料,发现该型号光猫默认开启了 21 (FTP) 端口。

我们可以直接使用光猫背面的普通用户账号和密码,通过 FTP 工具(如 FileZilla 或 Windows 资源管理器)连接到光猫:

  • 主机: 192.168.1.1
  • 端口: 21
  • 用户名: 光猫背部的普通用户名(通常为 useradmin
  • 密码: 光猫背部的普通用户密码

连接成功后,在 FTP 目录中找到并下载设备的配置文件:
/userconfig/cfg/db_user_cfg.xml

⚠️ 提示:该配置文件经过了加密保存,直接用文本编辑器打开是一堆乱码,无法直接读取其中的敏感信息。我们需要对其进行解密。


2. 解密配置文件

关于具体的 AES 解密原理与结构体分析,可以参考 吾爱破解大佬的分析解密过程

这里提供一个用于解密该配置文件的 Python 3 脚本 decode.py。请确保你的 Python 环境中已安装 pycryptodome 库(若未安装,可执行 pip install pycryptodome)。

解密脚本 decode.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
from Crypto.Cipher import AES
from binascii import a2b_hex

# 固定的解密 Key
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

# 读取加密文件,并输出解密后的 XML 配置文件
try:
with open("db_user_cfg.xml", "rb") as cfg_file, open("db_user_cfg.decode.xml", "w", encoding="utf-8") as dec_file:
file_header = cfg_file.read(60)
while True:
trunk_info = cfg_file.read(12)
if not trunk_info or len(trunk_info) < 12:
break
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(f"Trunk Info -> Real Size: {trunk_real_size}, Trunk Size: {trunk_size}, Next: {next_trunk}")

decrypted_data = decrypt(trunk_data.hex())
dec_file.write(decrypted_data.decode(encoding="utf-8", errors="ignore"))

if next_trunk == 0:
break
print("解密完成!已生成解密后的配置文件: db_user_cfg.decode.xml")
except FileNotFoundError:
print("错误:未在当前目录下找到 db_user_cfg.xml 配置文件,请先从光猫下载。")

decode.py 与下载的 db_user_cfg.xml 放在同一目录下,运行以下命令:

1
python decode.py

运行完成后,即可获得解密后的明文配置文件 db_user_cfg.decode.xml


3. 获取超级密码并开启 Telnet

3.1 获取超级密码

使用文本编辑器打开解密后的 db_user_cfg.decode.xml,在全局搜索关键字:

1
telecomadmin

在其附近的属性或行中,即可找到超级管理员的密码。例如我这台设备解密出来的密码为:
eWUyG!9%(不同设备的超级密码通常是不一样的)。

3.2 开启 Telnet

拿到超级密码后,先登录光猫的 Web 后台:http://192.168.1.1:8080

然后直接访问以下隐藏的管理网址来开启 Telnet 服务:
http://192.168.1.1:8080/getpage.gch?pid=1002&nextpage=tele_sec_tserver_t.gch

勾选开启 Telnet 服务并保存:


4. 解密 Telnet 与 su 提权密码

4.1 获取 Telnet 登录密码

在解密后的配置文件中搜索关键字:

1
TelnetUser

这附近会包含 Telnet 登录所需的用户名 and 密码(通常密码也是经过加密的)。

4.2 计算 su 提权密码

在 Telnet 连接后,要想执行更高级的指令,需要通过 su 命令提权。而 su 提权的密码是根据光猫的 MAC 地址 计算出来的。你可以在解密后的配置文件或光猫背部贴纸上找到精准的 MAC 地址。

这里提供从 恩山无线论坛大佬分享的方案 整理而来的 Python 3 计算脚本 supass.py

su 提权密码计算脚本 supass.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
def generate_su_pass(mac_str):
cts = [
'QbNUTaMecPWVSKdCgXIJRrsfYXwyqpvnDHWzQuPmAGtAxRTphBcwBnNkjbFmvVMqaFkEutSrDCxsCKjBzEyDEUJTZfHZghMHYFdeASGNaUgFtdbYRkshJHkFNXMcKdfw',
'NXMcKdfwRkshJHkFaUgFtdbYYFdeASGNZfHZghMHzEyDEUJTDCxsCKjBaFkEutSrjbFmvVMqhBcwBnNkAGtAxRTpDHWzQuPmYXwyqpvngXIJRrsfcPWVSKdCQbNUTaMe',
'eMaTUNbQCdKSVWPcfsrRJIXgnvpqywXYmPuQzWHDpTRxAtGAkNnBwcBhqMVvmFbjrStuEkFaBjKCsxCDTJUEDyEzHMhgZHfZNGSAedFYYbdtFgUaFkHJhskRwfdKcMXN',
'CbntTaMGFPWTSkdCtXIYRrsfaXyyqpvRbHWAJuPSAGtacRTpVKcmBnNevbFMvSMPDFkEuRSDXCssCKjszEyDEUJCZfckghBHYFseASaNaUgFPfbYRLSubTkFKXMcKdfH',
'gXIJRrsfNXMcKdfwYXwZqpvnQuPmDHWzAGtQxRTpjbFmvVMqDCxsjBCKzEyDEUJTHbCwBnIkZfHZghMHYASGFdeNcPWVSKdCaUgFtdbYRkshJHkF'+'QbNUTaMeaFkLutSr'
]
# 清洗MAC地址格式
hex_clean = ''.join(c for c in mac_str.upper() if c in '0123456789ABCDEF')
if len(hex_clean) < 12:
return "MAC 地址格式错误"

v19 = [ord(c) for c in reversed(hex_clean[-8:])]
v10 = next(((c - 48 | j) for j, c in enumerate(v19) if 49 <= c <= 57), 5)
results = [[] for _ in range(len(cts))]

for k in range(len(v19)):
v15 = v19[k] & v19[7 - k] if k < 4 else v19[k] | v19[k - 4]
v16 = v15 + v10
if v16 > 127:
v16, v10 = k, k
for i in range(len(cts)):
results[i].append(cts[i][v16])
v10 += max(k, 1)

return ' '.join(''.join(lst) for lst in results)

if __name__ == "__main__":
# 请将 AAAAAAAAAAAA 替换为你光猫的真实 MAC 地址(不区分大小写与符号分隔符)
mac_address = "AAAAAAAAAAAA"
passwords = generate_su_pass(mac_address)
print("计算出的密码列表如下:")
print(passwords)
print("\n提示:解密出的第一个密码即为 su 提权密码。")

将脚本中的 mac_address 替换为你设备的真实 MAC 地址,运行脚本即可得到提权密码。

至此,你已成功获取了光猫的超级密码,开启了 Telnet 并取得了最高的 su 根权限,可以自由地进行桥接、修改配置等深度折腾了!