def shares(self): shares = self.smb.listShares() count = 0 for i in range(len(shares)): count += 1 name = shares[i]['shi1_netname'][:-1] self.shares_list.append(name) comment = shares[i]['shi1_remark'][:-1] share_type = shares[i]['shi1_type'] _ = self.__share_info(name) max_uses = _['InfoStruct']['ShareInfo2']['shi2_max_uses'] # 4294967295L is unlimited current_uses = _['InfoStruct']['ShareInfo2']['shi2_current_uses'] permissions = _['InfoStruct']['ShareInfo2']['shi2_permissions'] # impacket always returns always 0 path = _['InfoStruct']['ShareInfo2']['shi2_path'] print('[%d] %s (comment: %s)' % (count, name, comment)) print('\tPath: %s' % path) print('\tUses: %d (max: %s)' % (current_uses, 'unlimited' if max_uses == 4294967295 else max_uses)) # print '\tType: %s' % share_type # print '\tPermissions: %d' % permissions msg = 'Which share do you want to connect to? (default: 1) ' limit = len(self.shares_list) choice = read_input(msg, limit) self.use(self.shares_list[choice - 1])
def main(): global conf global credentials global domains global have_readline global pool_thread banner() conf = cmdline_parser() check_conf() pool_thread = threading.BoundedSemaphore(conf.threads) try: for target in targets: pool_thread.acquire() current = test_login(target) current.daemon = True current.start() while threading.activeCount() > 1: a = 'Caughtit' pass except KeyboardInterrupt: print try: logger.warn('Test interrupted') a = 'Caughtit' stop_threads[0] = True except KeyboardInterrupt: print logger.info('User aborted') exit(1) if successes == 0: print '\nNo credentials worked on any target\n' exit(0) print '\nThe credentials worked in total %d times\n' % successes print 'TARGET SORTED RESULTS:\n' for target in targets: valid_credentials = target.get_valid_credentials() if len(valid_credentials) > 0: print target.get_identity() for valid_credential in valid_credentials: print ' %s' % valid_credential.get_identity() print print '\nUSER SORTED RESULTS:\n' for credential in credentials: valid_credentials = credential.get_valid_targets() if len(valid_credentials) > 0: print credential.get_identity() for valid_credential in valid_credentials: print ' %s' % valid_credential.get_identity() print if conf.smbcmdlist is not None: smb_cmd_list() if conf.oscmdlist is not None: os_cmd_list() if conf.batch or conf.smbcmdlist or conf.oscmdlist: return while True: msg = 'Do you want to establish a SMB shell from any of the targets? [Y/n] ' choice = raw_input(msg) if choice and choice[0].lower() != 'y': return counter = 0 targets_dict = {} msg = 'Which target do you want to connect to?' for target in targets: valid_credentials = target.get_valid_credentials() if len(valid_credentials) > 0: counter += 1 msg += '\n[%d] %s%s' % (counter, target.get_identity(), ' (default)' if counter == 1 else '') targets_dict[counter] = (target, valid_credentials) msg += '\n> ' choice = read_input(msg, counter) user_target, valid_credentials = targets_dict[int(choice)] counter = 0 credentials_dict = {} msg = 'Which credentials do you want to use to connect?' for credential in valid_credentials: counter += 1 msg += '\n[%d] %s%s' % (counter, credential.get_identity(), ' (default)' if counter == 1 else '') credentials_dict[counter] = credential msg += '\n> ' choice = read_input(msg, counter) user_credentials = credentials_dict[int(choice)] if sys.platform.lower() == 'win32' and have_readline: try: _outputfile = readline.GetOutputFile() except AttributeError: logger.debug('Failed GetOutputFile when using platform\'s readline library') have_readline = False uses_libedit = False if sys.platform.lower() == 'darwin' and have_readline: import commands (status, result) = commands.getstatusoutput('otool -L %s | grep libedit' % readline.__file__) if status == 0 and len(result) > 0: readline.parse_and_bind('bind ^I rl_complete') debugMsg = 'Leopard libedit detected when using platform\'s ' debugMsg += 'readline library' logger.debug(debugMsg) uses_libedit = True try: shell = InteractiveShell(user_target, user_credentials, conf.name) shell.cmdloop() except RuntimeError, e: logger.error('Runtime error: %s' % str(e)) except Exception, _: # traceback.print_exc() pass