예제 #1
0
    def test_lsa_LookupSids3_without_schannel(self):
        machine_creds = Credentials()
        machine_creds.guess(self.lp)
        machine_creds.set_machine_account()

        c = lsa.lsarpc(
            "ncacn_ip_tcp:%s[seal]" % self.server,
            self.lp,
            machine_creds)

        sids = lsa.SidArray()
        sid = lsa.SidPtr()
        # Need a set
        x = dom_sid("S-1-5-7")
        sid.sid = x
        sids.sids = [sid]
        sids.num_sids = 1
        names = lsa.TransNameArray2()
        level = lsa.LSA_LOOKUP_NAMES_ALL
        count = 0
        lookup_options = lsa.LSA_LOOKUP_OPTION_SEARCH_ISOLATED_NAMES
        client_revision = lsa.LSA_CLIENT_REVISION_2

        with self.assertRaises(NTSTATUSError) as e:
            c.LookupSids3(sids,
                          names,
                          level,
                          count,
                          lookup_options,
                          client_revision)
        if (e.exception.args[0] != NT_STATUS_ACCESS_DENIED):
            raise AssertionError("LookupSids3 without schannel must fail with ACCESS_DENIED")
예제 #2
0
    def test_lsa_LookupSids3_multiple_conns(self):
        machine_creds = Credentials()
        machine_creds.guess(self.lp)
        machine_creds.set_machine_account()

        c = lsa.lsarpc(
            "ncacn_ip_tcp:%s[schannel,seal]" % self.server,
            self.lp,
            machine_creds)

        sids = lsa.SidArray()
        sid = lsa.SidPtr()
        # Need a set
        x = dom_sid("S-1-5-7")
        sid.sid = x
        sids.sids = [sid]
        sids.num_sids = 1
        names = lsa.TransNameArray2()
        level = lsa.LSA_LOOKUP_NAMES_ALL
        count = 0
        lookup_options = lsa.LSA_LOOKUP_OPTION_SEARCH_ISOLATED_NAMES
        client_revision = lsa.LSA_CLIENT_REVISION_2

        # We want to run LookupSids3, and then again on a new
        # connection to show that we don't have an issue with the DB
        # being tied to the wrong connection.
        (domains, names, count) = c.LookupSids3(sids,
                                                names,
                                                level,
                                                count,
                                                lookup_options,
                                                client_revision)
        self.assertEqual(count, 1)
        self.assertEqual(names.count, 1)
        self.assertEqual(names.names[0].name.string,
                         "ANONYMOUS LOGON")

        c = lsa.lsarpc(
            "ncacn_ip_tcp:%s[schannel,seal]" % self.server,
            self.lp,
            machine_creds)

        (domains, names, count) = c.LookupSids3(sids,
                                                names,
                                                level,
                                                count,
                                                lookup_options,
                                                client_revision)
        self.assertEqual(count, 1)
        self.assertEqual(names.count, 1)
        self.assertEqual(names.names[0].name.string,
                         "ANONYMOUS LOGON")
예제 #3
0
def packet_samr_16(packet, conversation, context):
    # GetAliasMembership
    c = context.get_samr_context()
    s = c.get_connection()
    if c.domain_handle is None:
        packet_samr_7(packet, conversation, context)

    sids = lsa.SidArray()
    sid = lsa.SidPtr()
    sid.sid = c.domain_sid
    sids.sids = [sid]
    s.GetAliasMembership(c.domain_handle, sids)
    return True
예제 #4
0
def packet_lsarpc_76(packet, conversation, context):
    # lsa_LookupSids3
    c = context.get_lsarpc_connection()
    sids = lsa.SidArray()
    sid = lsa.SidPtr()
    # Need a set
    x = dom_sid("S-1-5-7")
    sid.sid = x
    sids.sids = [sid]
    sids.num_sids = 1
    names = lsa.TransNameArray2()
    level = 5
    count = 0
    lookup_options = 0
    client_revision = 2
    c.LookupSids3(sids, names, level, count, lookup_options, client_revision)
    return True
예제 #5
0
def packet_lsarpc_76(packet, conversation, context):
    # lsa_LookupSids3
    c = context.get_lsarpc_connection()
    sids = lsa.SidArray()
    sid = lsa.SidPtr()
    # Need a set
    x = dom_sid("S-1-5-7")
    sid.sid = x
    sids.sids = [sid]
    sids.num_sids = 1
    names = lsa.TransNameArray2()
    level = lsa.LSA_LOOKUP_NAMES_ALL
    count = 0
    lookup_options = lsa.LSA_LOOKUP_OPTION_SEARCH_ISOLATED_NAMES
    client_revision = lsa.LSA_CLIENT_REVISION_2
    c.LookupSids3(sids, names, level, count, lookup_options, client_revision)
    return True
예제 #6
0
def packet_lsarpc_15(packet, conversation, context):
    # lsa_LookupSids
    c = context.get_lsarpc_named_pipe_connection()

    objectAttr = lsa.ObjectAttribute()
    pol_handle = c.OpenPolicy2(u'', objectAttr,
                               security.SEC_FLAG_MAXIMUM_ALLOWED)

    sids = lsa.SidArray()
    sid = lsa.SidPtr()

    x = dom_sid("S-1-5-7")
    sid.sid = x
    sids.sids = [sid]
    sids.num_sids = 1
    names = lsa.TransNameArray()
    level = 5
    count = 0

    c.LookupSids(pol_handle, sids, names, level, count)
    return True
예제 #7
0
    def test_lsa_LookupSids3_multiple(self):
        machine_creds = Credentials()
        machine_creds.guess(self.lp)
        machine_creds.set_machine_account()

        c = lsa.lsarpc(
            "ncacn_ip_tcp:%s[schannel,seal]" % self.server,
            self.lp,
            machine_creds)

        sids = lsa.SidArray()
        sid = lsa.SidPtr()
        # Need a set
        x = dom_sid("S-1-5-7")
        sid.sid = x
        sids.sids = [sid]
        sids.num_sids = 1
        names = lsa.TransNameArray2()
        level = lsa.LSA_LOOKUP_NAMES_ALL
        count = 0
        lookup_options = lsa.LSA_LOOKUP_OPTION_SEARCH_ISOLATED_NAMES
        client_revision = lsa.LSA_CLIENT_REVISION_2

        # We want to run LookupSids3 multiple times on the same
        # connection as we have code to re-use the sam.ldb and we need
        # to check things work for the second request.
        (domains, names, count) = c.LookupSids3(sids, names, level, count, lookup_options, client_revision)
        self.assertEqual(count, 1)
        self.assertEqual(names.count, 1)
        self.assertEqual(names.names[0].name.string,
                         "ANONYMOUS LOGON")
        (domains2, names2, count2) = c.LookupSids3(sids, names, level, count, lookup_options, client_revision)
        self.assertEqual(count2, 1)
        self.assertEqual(names2.count, 1)
        self.assertEqual(names2.names[0].name.string,
                         "ANONYMOUS LOGON")

        # Just looking for any exceptions in the last couple of loops
        c.LookupSids3(sids, names, level, count, lookup_options, client_revision)
        c.LookupSids3(sids, names, level, count, lookup_options, client_revision)
예제 #8
0
    def test_lsa_LookupNames4_LookupSids3_multiple(self):
        """
        Test by going back and forward between real DB lookups
        name->sid->name to ensure the sam.ldb handle is fine once
        shared
        """

        machine_creds = Credentials()
        machine_creds.guess(self.lp)
        machine_creds.set_machine_account()

        c_normal = lsa.lsarpc(
            "ncacn_np:%s[seal]" % self.server,
            self.lp,
            machine_creds)

        username, domain = c_normal.GetUserName(None, None, None)

        c = lsa.lsarpc(
            "ncacn_ip_tcp:%s[schannel,seal]" % self.server,
            self.lp,
            machine_creds)

        sids  = lsa.TransSidArray3()
        names = [username]
        level = lsa.LSA_LOOKUP_NAMES_ALL
        count = 0
        lookup_options = lsa.LSA_LOOKUP_OPTION_SEARCH_ISOLATED_NAMES
        client_revision = lsa.LSA_CLIENT_REVISION_2
        (domains, sids, count) = c.LookupNames4(names,
                                                sids,
                                                level,
                                                count,
                                                lookup_options,
                                                client_revision)

        # Another lookup on the same connection, will re-used the
        # server-side implicit state handle on the connection
        (domains, sids, count) = c.LookupNames4(names,
                                                sids,
                                                level,
                                                count,
                                                lookup_options,
                                                client_revision)

        self.assertEqual(count, 1)
        self.assertEqual(sids.count, 1)

        # Now look the SIDs back up
        names = lsa.TransNameArray2()
        sid = lsa.SidPtr()
        sid.sid = sids.sids[0].sid
        lookup_sids = lsa.SidArray()
        lookup_sids.sids = [sid]
        lookup_sids.num_sids = 1
        level = lsa.LSA_LOOKUP_NAMES_ALL
        count = 1
        lookup_options = 0
        client_revision = lsa.LSA_CLIENT_REVISION_2

        (domains, names, count) = c.LookupSids3(lookup_sids,
                                                names,
                                                level,
                                                count,
                                                lookup_options,
                                                client_revision)
        self.assertEqual(count, 1)
        self.assertEqual(names.count, 1)
        self.assertEqual(names.names[0].name.string,
                         username.string)

        # And once more just to be sure, just checking for a fault
        sids  = lsa.TransSidArray3()
        names = [username]
        level = lsa.LSA_LOOKUP_NAMES_ALL
        count = 0
        lookup_options = lsa.LSA_LOOKUP_OPTION_SEARCH_ISOLATED_NAMES
        client_revision = lsa.LSA_CLIENT_REVISION_2
        (domains, sids, count) = c.LookupNames4(names,
                                                sids,
                                                level,
                                                count,
                                                lookup_options,
                                                client_revision)