Пример #1
0
    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
Пример #2
0
    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}
Пример #3
0
 def exists(self):
     users, _, _ = win32net.NetUserEnum(None, 0)
     #print users
     for user in users:
         if user['name'] == self.name:
             return True
     return False
Пример #4
0
 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]
     ]
Пример #5
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)
Пример #6
0
 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
Пример #7
0
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
Пример #8
0
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()
Пример #9
0
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]
Пример #10
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
Пример #11
0
    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
Пример #12
0
    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
Пример #13
0
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
Пример #14
0
    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
Пример #15
0
 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
Пример #16
0
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"
Пример #17
0
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
Пример #18
0
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
Пример #19
0
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
Пример #20
0
    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)
Пример #21
0
 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
Пример #22
0
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
Пример #23
0
 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
Пример #24
0
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)
Пример #25
0
 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
Пример #26
0
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
Пример #27
0
 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
Пример #28
0
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
Пример #29
0
    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}
Пример #30
0
 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