def check_prev_logins(): if os.name != 'nt': return 5, "PREV LOGINS are None.", "This test can only be run on Windows. Considering this test successful." users, nusers, _ = win32net.NetUserEnum(None, 2) logons = 0 for user in users: logons += int(user['num_logons']) description = f"PREV LOGINS will look for the amount of logins on the pc." explanation = f"Amount of logins on the pc is {logons}." if logons < 25: score = 1 explanation = explanation + " Looks like a VM or a new PC." elif logons < 100: score = 2 explanation = explanation + " Looks like a VM or a new PC." elif logons < 200: score = 3 explanation = explanation + " Looks like a VM or rather unused PC." elif logons < 1000: score = 4 else: score = 5 return score, description, explanation
def users(): result = [] users, _, _ = win32net.NetUserEnum(None, 3) current = win32api.GetUserName() UF_ACCOUNT_DISABLE = 2 UF_LOCKOUT = 16 for user in users: if user['flags'] & (UF_ACCOUNT_DISABLE | UF_LOCKOUT): continue result.append({ 'name': to_unicode(user['name']), 'groups': [ to_unicode(x) for x in win32net.NetUserGetLocalGroups( None, user['name']) ], 'admin': user['priv'] == 2, 'home': (to_unicode(user['logon_server']) + u'\\' + to_unicode(user['home_dir'])) if user['home_dir'] else u'default' }) return {'current': current, 'users': result}
def exists(self): users, _, _ = win32net.NetUserEnum(None, 0) #print users for user in users: if user['name'] == self.name: return True return False
def _get_system_users(cls): """Return all users defined on the Windows system.""" # XXX - Does Windows allow usernames with chars outside of # ASCII set? In that case we need to convert this to unicode. return [ entry['name'] for entry in win32net.NetUserEnum(None, 0)[0] ]
def GetUsersList(filterFunc=None): ret = [] flResume = 1 while flResume: lst, cnt, flResume = win32net.NetUserEnum(None, 0) ret += map(lambda x: x['name'], lst) return filter(filterFunc, ret)
def system_user_exists(user): """Check if the user exists on the system""" local_users = win32net.NetUserEnum(None, 0)[0] for local_user in local_users: if local_user['name'] == user.name: return True return False
def list_users(): ''' Return a list of all users on Windows Returns: list: A list of all users on the system CLI Example: .. code-block:: bash salt '*' user.list_users ''' res = 0 user_list = [] dowhile = True try: while res or dowhile: dowhile = False (users, _, res) = win32net.NetUserEnum(None, 0, win32netcon.FILTER_NORMAL_ACCOUNT, res, win32netcon.MAX_PREFERRED_LENGTH) for user in users: user_list.append(user['name']) return user_list except win32net.error: pass
def Main(): cgiEnv = lib_common.ScriptEnvironment() hostname = cgiEnv.GetId() node_host = lib_uris.gUriGen.HostnameUri(hostname) grph = cgiEnv.GetGraph() try: lib_win32.WNetAddConnect(hostname) except Exception as exc: lib_common.ErrorMessageHtml("NetUserEnum:" + str(exc)) # This could be a parameter. Hard-coded value for the moment. if lib_util.is_local_address(hostname): level = 2 # 1,2 else: level = 2 # 1,2 logging.debug("hostname=%s level=%d", hostname, level) resume_handle = 0 while True: try: # Connects a computer to or disconnects a computer from a shared resource, or displays information about computer connections. # The command also controls persistent net connections. Used without parameters, net use retrieves a list of network connections. # net use [{DeviceName | *}] [\\ComputerName\ShareName[\volume]] [{Password | *}]] [/user:[DomainName\]UserName] # [/user:[DottedDomainName\]UserName] [/user: [UserName@DottedDomainName] [/savecred] [/smartcard] [{/delete | /persistent:{yes | no}}] # https://mail.python.org/pipermail/python-win32/2003-April/000961.html lst_users, total, resume_handle = win32net.NetUserEnum( hostname, level, win32netcon.FILTER_NORMAL_ACCOUNT, resume_handle) except Exception as exc: lib_common.ErrorMessageHtml("NetUserEnum:" + str(exc)) for usr_elt in lst_users: # {'comment': u'Built-in account for administering the computer/domain', 'workstations': u'', 'country_code': 0L, 'last_logon': 1426 # 729970L, 'full_name': u'', 'parms': u'', 'code_page': 0L, 'priv': 2L, 'auth_flags': 0L, 'logon_server': u'\\\\*', 'home_dir': u'', ' # usr_comment': u'', 'acct_expires': 4294967295L, 'bad_pw_count': 0L, 'logon_hours': '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff # \xff\xff\xff\xff\xff\xff\xff\xff\xff', 'password': None, 'units_per_week': 168L, 'last_logoff': 0L, 'name': u'Administrator', 'max_s # torage': 4294967295L, 'num_logons': 11L, 'password_age': 191184801L, 'flags': 66083L, 'script_path': u''}, user_name = usr_elt['name'] node_user = survol_Win32_UserAccount.MakeUri(user_name, hostname) grph.add((node_host, pc.property_user, node_user)) try: txt_comment = usr_elt['comment'] grph.add((node_user, pc.property_information, lib_util.NodeLiteral(txt_comment))) except KeyError: pass if resume_handle == 0: break cgiEnv.OutCgiRdf()
def get_users_windows(level=3): """ Only works on windows :param level: The information level of the data. (0, 1, 2, 3, 10, 11, 20, 23 or 24) :return: All the users. This includes Administrator, Guest and DefaultAccount """ return win32net.NetUserEnum(platform.uname()[1], level)[0]
def _get_current_users(self): if "Linux" in plugin.get_os(): return common.get_current_users() elif "Windows" in plugin.get_os(): all_users = [] data = list(win32net.NetUserEnum(None, 0))[0] for piece in data: all_users.append(piece["name"]) return all_users
def listSystemUsers(self): """ List system users @return: list of system user names """ self._log_info("Listing System Users") users = [entry["name"] for entry in win32net.NetUserEnum(None, 0)[0]] return users
def listSystemUsers(self): """ List system users @return: list of system user names """ pylabs.q.logger.log('Listing System Users', 6) users = [entry['name'] for entry in win32net.NetUserEnum(None, 0)[0]] return users
def listUsers(): user_list = [] resume_handle = 0 while True: #Params: server (none is local pc), level (detail level), filter type, pointer for continuing user search result = win32net.NetUserEnum(None, 0, win32netcon.FILTER_NORMAL_ACCOUNT, resume_handle) user_list += [user['name'] for user in result[0]] resume_handle = result[2] if not resume_handle: break return user_list
def __get_users__(self): """ Renvoie un dictionnaire des utilisateurs du serveur. Infos disponibles : acct_expires full_name max_storage primary_group_id auth_flags home_dir name priv bad_pw_count home_dir_drive num_logons profile code_page last_logoff parms script_path comment last_logon password units_per_week country_code logon_hours password_age user_id flags logon_self.server password_expired usr_comment N.B. On met les noms d'utilisteurs en minuscules pour ne pas être emmerdé quand on voudra faire "if nom in liste" """ users_list = {} users_dict = {} Reprise = 0 Enr, Total, Reprise = win32net.NetUserEnum( self.server, 3, win32netcon.FILTER_NORMAL_ACCOUNT, Reprise, 1) while Reprise > 0: for Champ in Enr: users_list[Champ['name'].lower()] = [ Champ['full_name'], Champ['comment'], Champ['usr_comment'], Champ['user_id'], Champ['flags'] ] users_dict[Champ['name'].lower()] = { cle: Champ[cle] for cle in Champ if cle != 'name' } Enr, Total, Reprise = win32net.NetUserEnum( self.server, 3, win32netcon.FILTER_NORMAL_ACCOUNT, Reprise, 1) if 'système' not in users_list: users_list['système'] = ['Système', 'Système', '', 0, 4260353] return users_list, users_dict
def _isUser(self, username, domain, server): resume = 'init' userslist = [] while resume: if resume == 'init': resume = 0 try: users, total, resume = win32net.NetUserEnum(server, 0, win32netcon.FILTER_NORMAL_ACCOUNT, 0) userslist += users for userinfo in users: if username.lower() == str(userinfo['name']).lower(): return True except win32net.error, err: #print err return False
def UserEnum(): "Enumerates all the local users" resume = 0 nuser = 0 while 1: data, total, resume = win32net.NetUserEnum(server, 3, win32netcon.FILTER_NORMAL_ACCOUNT, resume) verbose("Call to NetUserEnum obtained %d entries of %d total" % (len(data), total)) for user in data: verbose("Found user %s" % user['name']) nuser = nuser + 1 if not resume: break assert nuser, "Could not find any users!" print "Enumerated all the local users"
def listusers(server=None): level = 0 filter = win32netcon.FILTER_NORMAL_ACCOUNT resume_handle = 0 my_user_list = [] while True: result = win32net.NetUserEnum(server, level, filter, resume_handle) my_user_list += [user['name'] for user in result[0]] resume_handle = result[2] if not resume_handle: break my_user_list.sort() return my_user_list
def get_users() -> list: if not requirement.are_presents(['win32net', 'win32netcon']): if requirement.is_present('os'): return [os.getusername()] else: return [] filter = win32netcon.FILTER_NORMAL_ACCOUNT resume_handle = 0 user_list = [] while True: result = win32net.NetUserEnum(None, 0, filter, resume_handle) user_list += [user['name'] for user in result[0]] resume_handle = result[2] if not resume_handle: break user_list.sort() return user_list
def list_users(): ''' Return a list of users on Windows ''' res = 1 users = [] user_list = [] try: while res: (users, _, res) = win32net.NetUserEnum('localhost', 3, win32netcon.FILTER_NORMAL_ACCOUNT, res, win32netcon.MAX_PREFERRED_LENGTH) for user in users: user_list.append(user['name']) return user_list except win32net.error: pass
def add_user(self, username, homedir=None, **kwargs): """Add a "real" system user to the virtual users table. If no homedir argument is specified the user's profile directory will possibly be determined and used. The keyword arguments in kwargs are the same expected by the original add_user method: "perm", "msg_login" and "msg_quit". """ # get the list of all available users on the system and check # if provided username exists users = [entry['name'] for entry in win32net.NetUserEnum(None, 0)[0]] if not username in users: raise ftpserver.AuthorizerError('No such user "%s".' %username) if not homedir: homedir = get_profile_dir(username) ftpserver.DummyAuthorizer.add_user(self, username, '', homedir, **kwargs)
def run(self): silent = positive(self.parameters['SILENT'].value) activeroot = self.parameters['ACTIVEROOT'].value import win32net ip = get_address_from_active_root(activeroot) if ip is None: log.err('Cannot get proper address for active root.') return None # get all users rh = 0 while True: users = win32net.NetUserEnum(ip, 1, rh) unixusers = [] # prepare list of unix-style values for user in users[0]: username = user['name'] uid = str(win32net.NetUserGetInfo(ip, username, 4)['user_sid'])[6:].split('-')[-1] admin = is_admin(username, self.parameters['ACTIVEROOT'].value) if not silent: if admin: log.ok('User %s - %s (Administrator)' % (uid, username)) else: log.ok('User %s - %s' % (uid, username)) unixusers.append([username, None, uid, None, None, None, None, admin]) #db['analysis'].add_user(activeroot, uid, username, admin) result = db['analysis'].add_users(activeroot, unixusers, USERS_UNIXLIKE) if result == DB_ERROR: log.err('Cannot insert users into DB.') else: if not silent: log.ok('%d users added/updated.' % (len(unixusers))) #groups = win32net.NetLocalGroupEnum(ip, 1) #groups = win32net.NetUserGetLocalGroups(ip, username, 2) # TODO how to get GID???? #for group in groups[0]: # print(group) # print(win32net.NetLocalGroupGetInfo(ip, group['name'], 1)) # insert ug if rh == 0: break return None
def listLocalUsers(): try: users = win32net.NetUserEnum('localhost', 0) except: print_fail('[!] Error with NetUserEnum API call, cannot list users') #print win32api.GetLastError() return None usernames = [] print 'Local User Accounts (with Local Groups)' print '---------------------------------------' for user in users[0]: usernames.append(user['name']) groups = win32net.NetUserGetLocalGroups(None, user['name'], 0) if 'Administrators' in groups or 'Administrateurs' in groups: print_yellow(' %s [%s]' % (user['name'], '-'.join(groups))) else: print ' %s [%s]' % (user['name'], '-'.join(groups)) print return usernames
def _isUser(self, username, domain, server): resume = "init" while resume: if resume == "init": resume = 0 try: users, _total, resume = win32net.NetUserEnum( server, 0, win32netcon.FILTER_NORMAL_ACCOUNT, 0) # Make sure, we compare unicode un = username.decode("utf8").lower() for userinfo in users: uiname = userinfo.get("name") assert uiname assert isinstance(uiname, unicode) if un == userinfo["name"].lower(): return True except win32net.error, e: _logger.exception("NetUserEnum: %s" % e) return False
def getall_users(server): '''This functions returns a list of id and full_names on an NT server''' j=1 res=1 users=[] user_list=[] try: while res: (users,total,res) = win32net.NetUserEnum(server,3,win32netcon.FILTER_NORMAL_ACCOUNT,res,win32netcon.MAX_PREFERRED_LENGTH) for i in users: add=0 login=str(i['name']) info_dict=win32net.NetUserGetInfo(server, login, 3) full_name=str(info_dict['full_name']) j=j+1 user_list.append(login+'\t'+full_name) return user_list except win32net.error: print(traceback.format_tb(sys.exc_info()[2]),'\n',sys.exc_type,'\n',sys.exc_value)
def get_all(self): if not self.users: try: level = 0 resume = 0 while True: userlist, total, resume = win32net.NetUserEnum(wpc.conf.remote_server, level, 0, resume, 999999) #print u for u in userlist: # self.users.append(user['name']) #try: sid, name, type = wpc.conf.cache.LookupAccountName(wpc.conf.remote_server, u['name']) self.users.append(User(sid)) #except: # print "[E] failed to lookup sid of %s" % user['name'] if resume == 0: break except pywintypes.error as e: print("[E] %s: %s" % (e[1], e[2])) return self.users
def list_users(): ''' Return a list of users on Windows ''' res = 0 users = [] user_list = [] dowhile = True try: while res or dowhile: dowhile = False (users, _, res) = win32net.NetUserEnum(None, 0, win32netcon.FILTER_NORMAL_ACCOUNT, res, win32netcon.MAX_PREFERRED_LENGTH) for user in users: user_list.append(user['name']) return user_list except win32net.error: pass
def get_filtered(self, ): if self.users == []: #try: level = 1 resume = 0 while True: userlist, total, resume = win32net.NetUserEnum( wpc.conf.remote_server, level, 0, resume, 999999) #print u for u in userlist: # self.users.append(user['name']) #try: sid, name, type = wpc.conf.cache.LookupAccountName( wpc.conf.remote_server, u['name']) self.users.append(user(sid)) #except: # print "[E] failed to lookup sid of %s" % user['name'] if resume == 0: break return self.users
def list_users(): ''' Return a list of users on Windows ''' res = 0 users = [] user_list = [] dowhile = True try: while res or dowhile: dowhile = False (users, _, res) = win32net.NetUserEnum('localhost', 3, win32netcon.FILTER_NORMAL_ACCOUNT, res, win32netcon.MAX_PREFERRED_LENGTH) for user in users: user_list.append(user['name']) log.debug('User: {0}'.format(str(user))) return user_list except win32net.error: pass
def users(): result = [] users, _, _ = win32net.NetUserEnum(None, 1) current = win32api.GetUserName() UF_ACCOUNT_DISABLE = 2 UF_LOCKOUT = 16 for user in users: if user['flags'] & (UF_ACCOUNT_DISABLE | UF_LOCKOUT): continue result.append({ 'name': user['name'], 'groups': win32net.NetUserGetLocalGroups(None, user['name']), 'admin': user['priv'] == 2 }) return {'current': current, 'users': result}
def _is_user(self, user_name, domain, server): resume = "init" while resume: if resume == "init": resume = 0 try: users, _total, resume = win32net.NetUserEnum( server, 0, win32netcon.FILTER_NORMAL_ACCOUNT, 0) # Make sure, we compare unicode un = compat.to_unicode(user_name).lower() for userinfo in users: uiname = userinfo.get("name") assert uiname assert compat.is_unicode(uiname) if un == userinfo["name"].lower(): return True except win32net.error as e: _logger.exception("NetUserEnum: %s" % e) return False _logger.info("User '%s' not found on server '%s'" % (user_name, server)) return False