TEWA-707E光猫超级密码获取实战:FTP访问与AES解密全流程

📅 2026/7/4 11:46:47
TEWA-707E光猫超级密码获取实战:FTP访问与AES解密全流程
1. 项目概述与核心目标最近在折腾家里的网络发现运营商配的TEWA-707E光猫功能限制挺多想改个桥接或者看看详细的连接状态都挺费劲原因就在于我们拿到的只是普通用户权限真正的“超级管理员”密码被运营商远程下发并加密存储了。这个项目就是一次完整的实战记录目标是通过分析光猫的文件系统找到那个被AES加密的配置文件并最终解密拿到超级密码。整个过程涉及网络协议、文件系统访问和密码学解密听起来复杂但跟着步骤一步步来其实没那么玄乎。无论你是想优化家庭网络比如改桥接让路由器拨号还是单纯对嵌入式设备的逆向感兴趣这篇指南都能给你提供一条清晰的路径。核心要解决的问题很明确获取TEWA-707E光猫的超级管理员密码。这个密码通常被称为“telecomadmin”账户的密码有了它你就能解锁光猫的所有设置选项包括修改上网模式、端口映射、查看光模块详细信息等。运营商为了防止用户随意改动导致故障这个密码是动态变化的并且加密后存放在设备本地。我们的思路就是先通过光猫自身可能开放的FTP服务把包含密码的配置文件“偷”出来然后分析其加密方式最后用AES算法进行解密。2. 技术背景与准备工作在开始动手之前有必要了解一下我们面对的是什么以及需要准备哪些“武器”。TEWA-707E是一款GPON光猫由中兴通讯制造尽管品牌是TEWA实为中兴方案。这类设备通常运行一个裁剪过的Linux系统文件系统里存放着所有配置、日志和程序。2.1 为什么是FTP现代光猫为了运维方便常常会内置一些服务Telnet和FTP是常见的两个后台入口。Telnet功能强大可以直接获得Shell但近年来新设备普遍默认关闭或加强了认证。FTP文件传输协议服务有时会被忽略或者认证较为简单成为我们进入文件系统的突破口。我们的首要目标就是检查光猫是否开启了FTP服务并尝试用已知的或默认的凭证登录。2.2 AES加密是什么AES高级加密标准是一种对称加密算法简单说就是加密和解密用同一把钥匙。在光猫的场景里运营商用一把特定的“密钥”Key对超级密码等敏感信息进行加密后存储。我们要解密就必须找到或推导出这把密钥以及加密时使用的其他参数如初始化向量IV、加密模式等。光猫使用的通常是AES-128-CBC模式这是一种块加密模式安全性很高但如果我们能拿到密钥解密就是瞬间的事。2.3 工具清单工欲善其事必先利其器。以下是整个流程需要用到的工具大部分都是免费开源的网络扫描与连接工具Advanced IP Scanner / Angry IP Scanner用于快速扫描局域网内设备开放的端口确认FTP服务端口21是否存在。FileZilla Client图形化FTP客户端操作直观适合文件传输。PuTTY / Windows Terminal如果需要尝试Telnet端口23或后续可能的操作。编程与解密环境Python 3.6我们的核心解密脚本将用Python编写。因为它拥有丰富的库处理加密、字节操作非常方便。PyCryptodome 库这是Python下功能强大的加密工具库我们将用它来实现AES解密。安装命令很简单pip install pycryptodome。分析与编辑工具Notepad 或 VS Code用于查看和编辑文本类配置文件。HxD 或 010 Editor十六进制编辑器。当配置文件是二进制格式或者我们需要精确查看文件头、特定偏移量的数据时它就必不可少了。比如判断一个文件是否被AES加密看其数据是否呈现高随机性像乱码用十六进制编辑器一看便知。知识准备光猫的默认管理IP通常是192.168.1.1和登录地址。光猫背面的普通用户账号密码用于登录Web管理界面。基本的命令行操作知识。注意在进行任何操作前请务必知晓破解自有设备用于学习研究目的通常可以但切勿用于干扰他人网络或非法用途。操作可能导致设备配置丢失建议先记录下原有的关键设置如PPPoE账号密码、VLAN ID等。3. 实战步骤一定位并访问光猫FTP服务第一步是找到进入光猫文件系统的门。我们假设光猫的FTP服务以较弱的认证或默认密码运行。3.1 确定光猫IP与扫描端口首先让你的电脑连接到光猫发出的Wi-Fi或用网线直连光猫的LAN口。然后查看自己电脑获取到的网关地址这就是光猫的管理IP绝大多数情况下是192.168.1.1。打开Advanced IP Scanner将扫描范围设置为192.168.1.1到192.168.1.255开始扫描。重点关注IP为192.168.1.1的设备查看它开放的端口。如果看到21/tcp端口显示为open或filtered那说明FTP服务很可能存在。3.2 尝试FTP连接打开FileZilla在主机栏输入光猫的IP192.168.1.1端口留空默认21。用户名和密码是这一步的关键。可以尝试一些常见的组合用户名admin 密码admin用户名user 密码user用户名ftp 密码ftp用户名root 密码root或Zte521一些中兴设备常用也可以尝试用户名密码都为空。点击“快速连接”。如果连接成功右侧“远程站点”窗口会显示光猫文件系统的目录列表通常类似于/根目录。如果失败FileZilla会提示“认证失败”或“无法连接”。这意味着FTP服务可能认证较强或者根本没开。如果没开这条路可能就走不通了需要寻找其他漏洞或利用已知的临时开启FTP的方法这超出了本文基础范围。实操心得我手头的这台TEWA-707E使用user/user这个组合成功连上了。不同批次、不同运营商定制的设备默认凭证可能不同需要多尝试也可以在相关的技术论坛搜索特定型号的默认FTP密码。3.3 定位关键配置文件连接成功后你就像进入了光猫的“硬盘”。我们需要找到存放配置的文件。常见的路径有/var/config//mnt/config//userconfig//etc/直接在根目录下寻找db_user_cfg.xml或cfg_db_user.xml之类的文件。对于TEWA-707E关键文件通常是/var/config/lastgood.xml或/userconfig/cfg/db_user_cfg.xml。这个文件包含了几乎所有的用户配置包括加密后的超级密码。通过FileZilla将这个文件下载到本地电脑。重要提示lastgood.xml这个文件名很有深意它意思是“最后一次好的配置”。设备在每次成功保存配置后都会生成这个文件作为备份。而当前运行的配置可能在内存或其他临时文件中。下载备份文件是更安全的选择不会影响设备当前运行。4. 实战步骤二分析配置文件与识别加密数据拿到lastgood.xml后先用Notepad打开它。你会看到这是一个XML格式的文件内容结构清晰但其中一些字段的值看起来是长长的、毫无规律的字符串这就是被加密的数据。4.1 寻找加密的密码字段在XML文件中搜索以下关键词telecomadminPassword(注意大小写)Pass(可能缩写)你可能会找到类似这样的段落MgmtUser UserId1 Nametelecomadmin Password$2$...一串很长的Base64或十六进制样子的字符串...$ UserLevel0/或者X_UserInstance InstanceID1 Usernametelecomadmin PasswordA9B8C7D6E5F4...一串十六进制字符 UserLevel0/关键点来了加密后的数据表现形式可能有几种以$分隔的字符串类似$2$...$...$这可能是一种哈希如bcrypt或特定格式的加密标识。纯十六进制字符串由0-9, A-F组成的字符串长度通常是32、48或64的倍数。Base64编码字符串由A-Z, a-z, 0-9, , /, 组成的字符串。在TEWA-707E的案例中更常见的是一串长的、连续的十六进制字符没有明显的分隔符。这就是被AES-CBC加密后再以十六进制形式表示的数据。4.2 确认加密模式与寻找密钥线索光猫厂商为了批量运维通常不会为每一台设备生成独一无二的密钥。密钥往往是硬编码在固件程序里或者是通过设备序列号、MAC地址等唯一标识符经过固定算法推导出来的。我们的任务就是找到这个推导规律。在lastgood.xml文件中除了密码还要仔细寻找以下信息DeviceIdSerialNumber(SN)MACAddress(可能标记为MAC或EthernetMAC)ProductClass这些信息可能是推导密钥的“盐”Salt或直接参与运算。例如一个经典的也是本文后续解密示例采用的密钥生成方式是取设备MAC地址的前12位去掉冒号将其作为密钥。假设你找到光猫的MAC地址是A0:B1:C2:D3:E4:F5那么可能的密钥就是a0b1c2d3e4f5共12字节96位。但AES-128需要16字节128位的密钥所以有时会在后面补零或者与一个固定字符串拼接。如何验证这个猜想这就需要结合对固件的逆向分析或社区积累的经验。幸运的是对于中兴系的光猫其加密方案在爱好者社区中已有大量研究。我们可以基于这些已知模式进行尝试。5. 实战步骤三编写Python脚本进行AES解密这是最核心的一步。我们假设已经确定加密方式是AES-128-CBC密钥Key由设备MAC地址前12位如a0b1c2d3e4f5补4个零00构成即a0b1c2d3e4f50000。初始化向量IV全为零。5.1 解密脚本详解下面是一个完整的Python解密脚本我加了详细注释你可以直接修改使用。#!/usr/bin/env python3 # -*- coding: utf-8 -*- from Crypto.Cipher import AES from binascii import unhexlify, hexlify import re def decrypt_aes_cbc(encrypted_hex, key_hex, iv_hexb00000000000000000000000000000000): 使用AES-128-CBC模式解密。 :param encrypted_hex: 加密数据的十六进制字符串 :param key_hex: 密钥的十六进制字符串32字符16字节 :param iv_hex: 初始化向量的十六进制字符串32字符16字节默认全零 :return: 解密后的原始字节串以及尝试解码为UTF-8的字符串 # 将十六进制字符串转换为字节数据 encrypted_data unhexlify(encrypted_hex) key unhexlify(key_hex) iv unhexlify(iv_hex) # 创建AES解密器使用CBC模式 cipher AES.new(key, AES.MODE_CBC, iv) # 执行解密 decrypted_data cipher.decrypt(encrypted_data) # 处理PKCS#7填充AES-CBC常用填充方式 # 解密后最后一个字节的值表示填充的长度 padding_len decrypted_data[-1] # 验证填充是否有效 if padding_len AES.block_size: # AES块大小是16字节 # 检查最后 padding_len 个字节是否都等于 padding_len if all(byte padding_len for byte in decrypted_data[-padding_len:]): # 去除填充 decrypted_data decrypted_data[:-padding_len] else: print(f[警告] 填充字节验证失败可能密钥或IV错误。最后一个字节是{padding_len}) # 仍然尝试去除但结果可能包含乱码 decrypted_data decrypted_data[:-padding_len] else: print(f[警告] 填充长度异常{padding_len}可能不是PKCS#7填充或解密失败。) # 尝试将解密后的字节数据转换为字符串 try: decrypted_text decrypted_data.decode(utf-8) except UnicodeDecodeError: decrypted_text [解密结果无法用UTF-8解码可能是二进制数据或密钥错误] print(decrypted_text) # 也可以尝试其他编码如 gbk, latin-1 # try: # decrypted_text decrypted_data.decode(gbk) # except: # pass return decrypted_data, decrypted_text def extract_mac_and_encrypted_password(xml_content): 从XML内容中提取MAC地址和加密的密码。 :param xml_content: 配置文件的文本内容 :return: (mac_address, encrypted_password_hex) 元组 mac_pattern rMACAddress([0-9A-F]{12})/MACAddress # 密码模式寻找包含telecomadmin且Password属性为长十六进制串的节点 # 这个正则可能需要根据实际XML结构微调 password_pattern rUsernametelecomadmin[^]*Password([0-9A-F]) mac_match re.search(mac_pattern, xml_content, re.IGNORECASE) pass_match re.search(password_pattern, xml_content, re.IGNORECASE) mac mac_match.group(1).lower() if mac_match else None enc_pass pass_match.group(1) if pass_match else None if not mac: # 尝试其他可能的MAC标签 alt_mac_patterns [ rEthernetMAC([0-9A-F:]{17})/EthernetMAC, rMAC([0-9A-F:]{17}) ] for pattern in alt_mac_patterns: match re.search(pattern, xml_content, re.IGNORECASE) if match: mac match.group(1).replace(:, ).lower()[:12] # 取无冒号的前12位 break return mac, enc_pass def main(): # 1. 读取下载的配置文件 config_file_path lastgood.xml # 修改为你的文件路径 try: with open(config_file_path, r, encodingutf-8) as f: xml_content f.read() except FileNotFoundError: print(f错误找不到文件 {config_file_path}) return except UnicodeDecodeError: # 如果utf-8失败尝试其他编码 with open(config_file_path, rb) as f: xml_content f.read().decode(latin-1) # 2. 提取MAC和加密密码 mac, encrypted_password_hex extract_mac_and_encrypted_password(xml_content) if not mac: print(错误无法从配置文件中提取MAC地址。) return if not encrypted_password_hex: print(错误无法找到telecomadmin的加密密码字段。) # 可以尝试手动搜索其他可能的密码字段 print(请在XML文件中手动搜索包含Password的长字符串并复制其值。) manual_pass input(请手动输入加密的十六进制密码字符串).strip() if manual_pass: encrypted_password_hex manual_pass else: return print(f提取到的MAC地址前12位 {mac}) print(f提取到的加密密码十六进制 {encrypted_password_hex[:50]}...) # 只显示前50位 # 3. 构建密钥基于已知模式MAC前12位 0000 # 例如 MAC 前12位是 a0b1c2d3e4f5则密钥为 a0b1c2d3e4f50000 (16字节) if len(mac) 12: key_hex mac[:12] 0000 # 补4个零凑齐16字节 else: print(fMAC地址长度不足12位{mac}无法生成标准密钥。) # 尝试其他密钥生成方案例如直接使用MAC并补零至16字节 key_hex mac.ljust(16, 0) # 左对齐右侧补零 print(f生成的AES密钥十六进制 {key_hex}) # 4. 设置初始化向量IV通常全零 iv_hex 00000000000000000000000000000000 # 5. 执行解密 print(\n开始解密...) decrypted_bytes, decrypted_text decrypt_aes_cbc(encrypted_password_hex, key_hex, iv_hex) print(f解密后的字节数据 {hexlify(decrypted_bytes[:20])}...) # 显示前20字节的hex print(f解密后的文本尝试UTF-8 {decrypted_text}) # 6. 输出最终可能的密码 # 解密结果可能直接是密码也可能包含一些前缀或后缀。常见的是纯ASCII字符串。 if decrypted_text and all(32 ord(c) 127 for c in decrypted_text): # 判断是否为可打印ASCII print(f\n[成功] 超级密码可能是 {decrypted_text}) else: print(\n[注意] 解密结果不是纯文本。可能原因) print( 1. 密钥或IV错误。) print( 2. 加密模式不是AES-128-CBC。) print( 3. 加密数据可能不是密码字段或是其他格式。) print( 4. 需要处理额外的编码如Base64解码后再解密。) # 建议将解密出的字节以十六进制打印出来供进一步分析 print(f解密结果的完整十六进制{hexlify(decrypted_bytes).decode()}) if __name__ __main__: main()5.2 脚本使用与调整安装依赖在命令行运行pip install pycryptodome。准备文件将下载的lastgood.xml文件放在与脚本相同的目录或者修改脚本中的config_file_path变量为你的文件路径。运行脚本在命令行执行python decrypt_tewa.py。分析结果如果脚本打印出像telecomadminXXXXXXXX后8位是数字字母组合这样的字符串那么恭喜你这就是超级密码。如果输出是乱码或提示失败说明密钥生成方式不对。这时就需要尝试其他密钥推导方案。常见的其他密钥生成方案如果上述MAC补零法无效方案A密钥 MAC地址前12位 固定的4字节字符串如a0b1c2d3e4f5abcd。这个abcd需要根据固件版本猜测或从固件中逆向。方案B密钥 设备序列号SN的某一部分。方案C密钥是硬编码的固定值与设备无关。例如对所有同型号光猫都用同一个密钥1234567890abcdef。实操心得解密失败时不要慌。首先确认你提取的加密字符串是否正确。有时密码字段在XML里可能被CDATA包裹或者属性名有细微差别。其次用十六进制编辑器如HxD直接打开lastgood.xml搜索telecomadmin的ASCII码74 65 6C 65 63 6F 6D 61 64 6D 69 6E在其附近寻找长串的十六进制数据这能帮你准确定位加密块。最后多去相关技术论坛搜索你的光猫具体型号和硬件版本很可能已经有人分享出了正确的密钥生成算法。6. 常见问题排查与进阶技巧即使按照指南操作你也可能会遇到各种问题。下面是我在多次实践中总结的常见坑点和解决方法。6.1 问题排查速查表问题现象可能原因排查步骤与解决方案FTP无法连接1. FTP服务未开启。2. 端口被防火墙过滤。3. 默认密码错误。1. 使用端口扫描器确认21端口状态。2. 尝试Telnet 23端口看是否有交互界面。3. 搜索该型号光猫的“开启FTP”或“开启Telnet”的临时方法通常通过某个特定的HTTP请求触发。找到的配置文件是空的或很小下载了错误的文件或当前运行配置不在默认路径。1. 在FTP目录中多翻找尝试cfg、data、etc等子目录。2. 尝试查找default.cfg、factory.conf等文件。3. 通过Telnet如果可用使用cat、find命令寻找大体积的XML或DB文件。XML中找不到加密的密码字段1. 密码字段名不同。2. 密码存储在二进制数据库文件中。1. 在XML中搜索Password、pass、userpwd、crypto等关键词。2. 查找扩展名为.db、.sqlite的文件下载后用SQLite浏览器打开查看。Python脚本解密输出乱码1. 密钥错误最常见。2. 加密模式不是AES-128-CBC。3. IV不是全零。4. 加密数据不是纯AES可能先经过了Base64编码或压缩。1.尝试其他密钥用设备SN、标识符等生成密钥尝试。2.尝试其他模式如AES-128-ECBECB模式不需要IV。修改脚本中的AES.MODE_CBC为AES.MODE_ECB并移除IV参数。3.检查IV有些设备会用MAC地址或其他值作为IV。尝试用密钥的前16字节作为IV。4.预处理数据如果加密字符串包含$或类似Base64的结尾先进行Base64解码base64.b64decode()后再解密。解密出的密码登录失败1. 解密出的字符串并非最终密码可能包含前缀或时间戳。2. 运营商远程更改了密码配置文件未及时更新。3. Web界面有额外的验证机制。1. 仔细查看解密出的字符串真正的密码可能在后8位或中间某段。尝试用telecomadmin加上解密出的后8位作为密码。2. 在光猫的Web登录界面按F12打开开发者工具在“网络”选项卡中尝试登录查看提交的请求确认密码字段的格式。3. 尝试使用获取到的密码通过Telnet登录有时Web和Telnet的认证是分开的。脚本提示“填充字节验证失败”密钥错误导致解密出的数据不符合PKCS#7填充规则。忽略这个警告直接查看解密出的字节数据的前后部分。如果密钥接近正确有时仍能解出部分可读信息。关注解密结果的开头或结尾是否有telecomadmin或类似字符。6.2 进阶技巧当标准方法失效时如果所有常见密钥都尝试失败你可能需要深入一步固件分析从官网或论坛下载对应光猫型号的固件升级包.bin文件。用binwalk工具解包固件在解压出的文件系统中搜索包含aes、crypto、decrypt等关键词的脚本或配置文件可能直接找到密钥或算法。内存抓取这是一个更高级的方法。如果光猫有开启Telnet或SSH的漏洞登录后可以尝试使用cat /proc/mtd查看内存分区然后用dd命令将config分区或整个内存 dump 出来在dump出的数据中搜索密码明文或密钥。这需要一定的Linux操作知识。社区力量在像“宽带技术网”、“恩山无线论坛”这样的专业社区搜索你的光猫完整型号包括硬件版本号如TEWA-707E 1.0。很大概率已经有网友分享了“一键获取”工具或最新的算法。这些工具通常集成了针对不同版本设备的多种解密方案。6.3 安全与后续操作建议成功获取超级密码后立即登录验证用telecomadmin和破解的密码登录光猫的Web管理界面http://192.168.1.1确认权限。修改密码谨慎你可以在超级管理员界面修改这个密码。但请注意有些地区运营商的RMS远程管理系统会定期下发配置可能覆盖你的修改。修改前最好记录下原密码。进行所需设置最常见的操作是改为“桥接”模式。在网络设置或宽带设置里找到连接名称是INTERNET或VID_XX的连接将其模式从“路由”改为“桥接”并记下VLAN ID。保存后光猫就只负责光电转换由你自己的路由器进行PPPoE拨号通常能提升网络性能和功能自由度。备份配置在修改任何设置前最好在超级管理员界面找到“备份配置”功能下载一个配置文件到电脑。万一改乱了可以“恢复配置”救回来。整个过程从扫描端口到最终解密是一次对家庭网络设备“黑盒”的探索。它融合了网络、系统和密码学的知识。失败是常态尤其是面对不同运营商、不同批次的设备时。关键是多尝试、多搜索、多分析。每一次成功的破解不仅解决了一个实际问题更是一次宝贵的技术实践。