예제 #1
0
def LocalGroupEnum():
    "Enumerates all the local groups"
    resume = 0
    nmembers = 0
    while 1:
        data, total, resume = win32net.NetLocalGroupEnum(server, 1, resume)
        for group in data:
            verbose("Found group %(name)s:%(comment)s " % group)
            memberresume = 0
            while 1:
                memberdata, total, memberresume = win32net.NetLocalGroupGetMembers(
                    server, group['name'], 2, resume)
                for member in memberdata:
                    # Just for the sake of it, we convert the SID to a username
                    username, domain, type = win32security.LookupAccountSid(
                        server, member['sid'])
                    nmembers = nmembers + 1
                    verbose(" Member %s (%s)" %
                            (username, member['domainandname']))
                if memberresume == 0:
                    break
        if not resume:
            break
    assert nmembers, "Couldnt find a single member in a single group!"
    print "Enumerated all the local groups"
예제 #2
0
    def __get_local_groups__(self):
        """
            En prévision de l'avenir.
            Sur une machine qui n'est pas contrôleur de domaine la fonction NetGroupEnum ramène un seul groupe qui
            d'appelle "None".

            On verra plus tard comment traiter ça.
                Un indicateur serveur AD / pas serveur AD ?
                On appelle ça de façon transparente si on se rend compte qu'on n'est pas sur un serveur AD ?
                On ajoute les groupes locaux aux groupes globaux si on est sur un un serveur AD ?
        """
        groups_list = []
        resume = 0
        Enr, Total, resume = win32net.NetLocalGroupEnum(
            self.server, 1, resume, 4096)
        while 1:
            for Champ in Enr:
                group_name = Champ['name'].lower()
                members_list = []
                memberresume = 0
                memberdata, total, memberresume = win32net.NetLocalGroupGetMembers(
                    self.server, group_name, 1, memberresume)

                while 1:
                    for member in memberdata:
                        members_list.append(member['name'].lower())

                    if memberresume <= 0:
                        break

                    memberdata, total, memberresume = win32net.NetLocalGroupGetMembers(
                        self.server, group_name, 1, memberresume)

                members_list.sort()
                groups_list.append([group_name, members_list])

            if resume <= 0:
                break

            Enr, Total, resume = win32net.NetLocalGroupEnum(
                self.server, 1, resume, 4096)

        return groups_list
예제 #3
0
    def _winAuthenticateUser(self):
        '''
		Authenticate a user by Windows-Login on current machine

		:raises BackendAuthenticationError: If authentication fails.
		'''
        logger.confidential(
            u"Trying to authenticate user '%s' with password '%s' by win32security"
            % (self._username, self._password))

        try:
            win32security.LogonUser(self._username, 'None', self._password,
                                    win32security.LOGON32_LOGON_NETWORK,
                                    win32security.LOGON32_PROVIDER_DEFAULT)
            if self._forceGroups is not None:
                self._userGroups = set(self._forceGroups)
                logger.info(u"Forced groups for user '%s': %s" %
                            (self._username, self._userGroups))
            else:
                gresume = 0
                while True:
                    (groups, total,
                     gresume) = win32net.NetLocalGroupEnum(None, 0, gresume)
                    for groupname in (u['name'] for u in groups):
                        logger.debug2(u"Found group '%s'" % groupname)
                        uresume = 0
                        while True:
                            (users, total,
                             uresume) = win32net.NetLocalGroupGetMembers(
                                 None, groupname, 0, uresume)
                            for sid in (u['sid'] for u in users):
                                (username, domain,
                                 type) = win32security.LookupAccountSid(
                                     None, sid)
                                if username.lower() == self._username.lower():
                                    self._userGroups.add(groupname)
                                    logger.debug(
                                        u"User {0!r} is member of group {1!r}",
                                        self._username, groupname)
                            if uresume == 0:
                                break
                        if gresume == 0:
                            break
        except Exception as e:
            raise BackendAuthenticationError(
                u"Win32security authentication failed for user '%s': %s" %
                (self._username, e))
예제 #4
0
def load_libs():
    # Load win32security
    #
    # Try to open file and ingore the result.  This gets win32security loaded and working.
    # We can then turn off WOW64 and call repeatedly.  If we turn off WOW64 first,
    # win32security will fail to work properly.
    try:
        sd = win32security.GetNamedSecurityInfo(
            ".", win32security.SE_FILE_OBJECT,
            win32security.OWNER_SECURITY_INFORMATION
            | win32security.DACL_SECURITY_INFORMATION)
    except:
        # nothing
        pass

    # Load win32net
    #
    # NetLocalGroupEnum fails with like under Windows 7 64-bit, but not XP 32-bit:
    # pywintypes.error: (127, 'NetLocalGroupEnum', 'The specified procedure could not be found.')
    dummy = win32net.NetLocalGroupEnum(None, 0, 0, 1000)
예제 #5
0
 def get_all(self):
     if not self.groups:
         try:
             level = 0
             resume = 0
             while True:
                 grouplist, total, resume = win32net.NetGroupEnum(
                     wpc.conf.remote_server, level, resume, 999999)
                 for u in grouplist:
                     try:
                         sid, name, type = wpc.conf.cache.LookupAccountName(
                             wpc.conf.remote_server, u['name'])
                         self.groups.append(Group(sid))
                     except:
                         print("[E] failed to lookup sid of %s" %
                               Group['name'])
                 if resume == 0:
                     break
         except pywintypes.error as e:
             print("[E] %s: %s" % (e[1], e[2]))
         try:
             level = 0
             resume = 0
             while True:
                 grouplist, total, resume = win32net.NetLocalGroupEnum(
                     wpc.conf.remote_server, level, resume, 999999)
                 for u in grouplist:
                     try:
                         sid, name, type = wpc.conf.cache.LookupAccountName(
                             wpc.conf.remote_server, u['name'])
                         self.groups.append(Group(sid))
                     except:
                         print("[E] failed to lookup sid of %s" %
                               Group['name'])
                 if resume == 0:
                     break
         except pywintypes.error as e:
             print("[E] %s: %s" % (e[1], e[2]))
     return self.groups
예제 #6
0
 def get_all(self):
     if self.groups == []:
         try:
             level = 0
             resume = 0
             while True:
                 grouplist, total, resume = win32net.NetGroupEnum(
                     wpc.conf.remote_server, level, resume, 999999)
                 for u in grouplist:
                     try:
                         sid, name, type = wpc.conf.cache.LookupAccountName(
                             wpc.conf.remote_server, u['name'])
                         self.groups.append(group(sid))
                     except:
                         print "[E] failed to lookup sid of %s" % group[
                             'name']
                 if resume == 0:
                     break
         except:
             print "[E] NetGroupEnum failed"
         try:
             level = 0
             resume = 0
             while True:
                 grouplist, total, resume = win32net.NetLocalGroupEnum(
                     wpc.conf.remote_server, level, resume, 999999)
                 for u in grouplist:
                     try:
                         sid, name, type = wpc.conf.cache.LookupAccountName(
                             wpc.conf.remote_server, u['name'])
                         self.groups.append(group(sid))
                     except:
                         print "[E] failed to lookup sid of %s" % group[
                             'name']
                 if resume == 0:
                     break
         except:
             print "[E] NetLocalGroupEnum failed"
     return self.groups
예제 #7
0
ws.write(0, 2, 'Group members',style0)

#Parsing hostname file and looping to create excel file
for h in hostname:
    print(h, end = '')

    #Detect empty line in computer list
    if h == '\n':
        continue

    else:
        h1 = h.strip()

        try:
            #Get local groups on sigle host, this is enum not list of groups
            l = win32net.NetLocalGroupEnum(h1, 0, 0)
        except:
            #In case that host is offline script will not stop. It will write that host is offline
            ws.write(row2, 0, h1)
            ws.write(row2, 1, 'Offline')
            row2 = row2 + 1
            continue

        #Initializing list with usernames in group
        group = []

        #Looping through key valye list l[] and creating list of groups
        for i in l[0]:
            group.append(i['name'])

        #Looping through list group[] 
예제 #8
0
def Main():
    cgiEnv = lib_common.CgiEnv()

    grph = cgiEnv.GetGraph()

    # TODO: Try this on a remote machine.
    server = None  # Run on local machine for the moment.

    # servName_or_None is for Windows functions where the local host must be None.
    # servNameNotNone is for our URLs where the hostname must be explicit.
    if not server or lib_util.IsLocalAddress(server):
        servName_or_None = None

        # So it is compatible with WMI.
        servNameNotNone = lib_uris.TruncateHostname(lib_util.currentHostname)
        # .home
        serverNode = lib_common.nodeMachine
        serverBox = lib_common.gUriGen
    else:
        servName_or_None = server
        servNameNotNone = server
        serverNode = lib_common.gUriGen.HostnameUri(server)
        serverBox = lib_common.RemoteBox(server)

    resume = 0
    numMembers = 0
    while True:
        level = 1
        data, total, resume = win32net.NetLocalGroupEnum(
            servName_or_None, level, resume)
        for group in data:
            # sys.stderr.write("Group %(name)s:%(comment)s\n" % group)

            # TODO: Not sure about the groupname syntax.
            groupName = group['name']
            # nodeGroup = lib_common.gUriGen.GroupUri( groupName )
            nodeGroup = survol_Win32_Group.MakeUri(groupName, servNameNotNone)

            grph.add((nodeGroup, pc.property_host, lib_common.nodeMachine))
            groupComment = group['comment']
            if groupComment != "":
                groupCommentMaxWidth = max(80, len(groupName))
                if len(groupComment) > groupCommentMaxWidth:
                    groupComment = groupComment[:groupCommentMaxWidth] + "..."
                grph.add((nodeGroup, pc.property_information,
                          lib_common.NodeLiteral(groupComment)))

            memberresume = 0
            while True:
                levelMember = 2
                memberData, total, memberResume = win32net.NetLocalGroupGetMembers(
                    server, group['name'], levelMember, memberresume)
                for member in memberData:
                    # Converts Sid to username
                    userName, domain, type = win32security.LookupAccountSid(
                        servName_or_None, member['sid'])
                    numMembers = numMembers + 1
                    # sys.stderr.write("    Member: %s: %s\n" % (userName, member['domainandname']))
                    # nodeUser = lib_common.gUriGen.UserUri( userName )
                    nodeUser = survol_Win32_UserAccount.MakeUri(
                        userName, servNameNotNone)

                    # TODO: Not sure about the property.
                    # TODO: Not sure about the username syntax.
                    grph.add((nodeUser, pc.property_group, nodeGroup))
                if memberResume == 0:
                    break
        if not resume:
            break

    cgiEnv.OutCgiRdf("LAYOUT_SPLINE")
예제 #9
0
def Main():
    cgiEnv = lib_common.ScriptEnvironment(can_process_remote=True)
    server = cgiEnv.GetId()

    grph = cgiEnv.GetGraph()

    if lib_util.is_local_address(server):
        serv_name_or_none = None
        server_node = lib_common.nodeMachine
    else:
        serv_name_or_none = server
        server_node = lib_uris.gUriGen.HostnameUri(server)

    try:
        lib_win32.WNetAddConnect(serv_name_or_none)
    except Exception as exc:
        # Maybe the machine is not online.
        lib_common.ErrorMessageHtml(str(exc))

    resume = 0
    num_members = 0
    try:
        while True:
            data, total, resume = win32net.NetLocalGroupEnum(
                serv_name_or_none, 1, resume)
            for group in data:
                logging.debug("Group %(name)s:%(comment)s", group)

                # TODO: Not sure about the groupname syntax.
                group_name = group['name']
                logging.debug("group_name=%s", group_name)
                node_group = survol_Win32_Group.MakeUri(group_name, server)

                grph.add((node_group, pc.property_host, server_node))
                group_comment = group['comment']
                logging.debug("group_comment=%s", group_comment)
                if group_comment != "":
                    group_comment_max_width = max(80, len(group_name))
                    if len(group_comment) > group_comment_max_width:
                        group_comment = group_comment[:
                                                      group_comment_max_width] + "..."
                    grph.add((node_group, pc.property_information,
                              lib_util.NodeLiteral(group_comment)))

                memberresume = 0
                while True:
                    member_data, total, member_resume = win32net.NetLocalGroupGetMembers(
                        serv_name_or_none, group_name, 2, memberresume)
                    for member in member_data:
                        # Converts Sid to username
                        num_members = num_members + 1
                        try:
                            user_name, domain, the_type = win32security.LookupAccountSid(
                                server, member['sid'])
                        except Exception as exc:
                            logging.warning(
                                "Server=%s LookupAccountSid Caught:%s", server,
                                str(exc))
                            continue

                        logging.debug("Member: %s: %s server=%s", user_name,
                                      member['domainandname'], server)
                        # node_user = serverBox.UserUri( user_name )
                        node_user = survol_Win32_UserAccount.MakeUri(
                            user_name, server)

                        # TODO: Not sure about the property.
                        # TODO: Not sure about the username syntax.
                        grph.add((node_user, pc.property_group, node_group))
                    if memberresume == 0:
                        break
            if not resume:
                break
    except Exception as exc:
        lib_common.ErrorMessageHtml("win32 local groups:" + str(exc))

    cgiEnv.OutCgiRdf("LAYOUT_SPLINE")
예제 #10
0
def Main():
    cgiEnv = lib_common.CgiEnv(can_process_remote=True)
    server = cgiEnv.GetId()

    grph = cgiEnv.GetGraph()

    if lib_util.IsLocalAddress(server):
        servName_or_None = None
        serverNode = lib_common.nodeMachine
    else:
        servName_or_None = server
        serverNode = lib_common.gUriGen.HostnameUri(server)

    # http://www.math.uiuc.edu/~gfrancis/illimath/windows/aszgard_mini/movpy-2.0.0-py2.4.4/movpy/lib/win32/Demos/win32netdemo.py
    # servName_or_None, imper = lib_win32.MakeImpersonate(server)

    # hostname = "Titi" for example
    try:
        lib_win32.WNetAddConnect(servName_or_None)
    except:
        # Maybe the machine is not online.
        exc = sys.exc_info()[1]
        lib_common.ErrorMessageHtml(str(exc))

    resume = 0
    numMembers = 0
    try:
        while True:
            # data, total, resume = win32net.NetLocalGroupEnum(server, 1, resume)
            data, total, resume = win32net.NetLocalGroupEnum(
                servName_or_None, 1, resume)
            for group in data:
                DEBUG("Group %(name)s:%(comment)s", group)

                # TODO: Not sure about the groupname syntax.
                groupName = group['name']
                DEBUG("groupName=%s", groupName)
                # nodeGroup = serverBox.GroupUri( groupName )
                nodeGroup = survol_Win32_Group.MakeUri(groupName, server)

                grph.add((nodeGroup, pc.property_host, serverNode))
                groupComment = group['comment']
                DEBUG("groupComment=%s", groupComment)
                if groupComment != "":
                    groupCommentMaxWidth = max(80, len(groupName))
                    if len(groupComment) > groupCommentMaxWidth:
                        groupComment = groupComment[:groupCommentMaxWidth] + "..."
                    grph.add((nodeGroup, pc.property_information,
                              lib_common.NodeLiteral(groupComment)))

                memberresume = 0
                while True:
                    # memberData, total, memberResume = win32net.NetLocalGroupGetMembers(server, group['name'], 2, resume)
                    memberData, total, memberResume = win32net.NetLocalGroupGetMembers(
                        servName_or_None, groupName, 2, memberresume)
                    for member in memberData:
                        # Converts Sid to username
                        numMembers = numMembers + 1
                        try:
                            userName, domain, type = win32security.LookupAccountSid(
                                server, member['sid'])
                        except Exception:
                            exc = sys.exc_info()[1]
                            WARNING("Server=%s Caught:%s", server, str(exc))
                            continue

                        DEBUG("Member: %s: %s server=%s", userName,
                              member['domainandname'], server)
                        # nodeUser = serverBox.UserUri( userName )
                        nodeUser = survol_Win32_UserAccount.MakeUri(
                            userName, server)

                        # TODO: Not sure about the property.
                        # TODO: Not sure about the username syntax.
                        grph.add((nodeUser, pc.property_group, nodeGroup))
                    if memberResume == 0:
                        break
            if not resume:
                break
    except Exception:
        exc = sys.exc_info()[1]
        lib_common.ErrorMessageHtml("win32 local groups:" + str(exc))

    cgiEnv.OutCgiRdf("LAYOUT_SPLINE")