Skip to content

Commit ddc00c9

Browse files
committed
Raise exception on rpc_access_denied so it doesnt crash later for unkown reasons, use provided logger instead of nxc_logger
1 parent 0129b43 commit ddc00c9

File tree

1 file changed

+11
-18
lines changed

1 file changed

+11
-18
lines changed

Diff for: nxc/protocols/smb/samrfunc.py

+11-18
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
from impacket.dcerpc.v5.rpcrt import RPC_C_AUTHN_GSS_NEGOTIATE
1010
from impacket.nmb import NetBIOSError
1111
from impacket.smbconnection import SessionError
12-
from nxc.logger import nxc_logger
1312

1413

1514
class SamrFunc:
@@ -37,7 +36,7 @@ def __init__(self, connection):
3736
if self.password is None:
3837
self.password = ""
3938

40-
self.samr_query = SAMRQuery(username=self.username, password=self.password, domain=self.domain, remote_name=self.addr, remote_host=self.host, kerberos=self.doKerberos, kdcHost=self.kdcHost, aesKey=self.aesKey)
39+
self.samr_query = SAMRQuery(username=self.username, password=self.password, domain=self.domain, remote_name=self.addr, remote_host=self.host, kerberos=self.doKerberos, kdcHost=self.kdcHost, aesKey=self.aesKey, logger=self.logger)
4140
self.lsa_query = LSAQuery(username=self.username, password=self.password, domain=self.domain, remote_name=self.addr, remote_host=self.host, kdcHost=self.kdcHost, kerberos=self.doKerberos, aesKey=self.aesKey, logger=self.logger)
4241

4342
def get_builtin_groups(self, group):
@@ -82,23 +81,13 @@ def get_local_users(self, group, domain_handle):
8281
for sid, name in zip(member_sids, member_names, strict=True):
8382
users.append(f"{name} - {sid}")
8483
except Exception as e:
85-
nxc_logger.debug(f"Error enumerating users in {group}: {e}")
84+
self.logger.debug(f"Error enumerating users in {group}: {e}")
8685
return []
8786
return users
8887

88+
8989
class SAMRQuery:
90-
def __init__(
91-
self,
92-
username="",
93-
password="",
94-
domain="",
95-
port=445,
96-
remote_name="",
97-
remote_host="",
98-
kerberos=None,
99-
kdcHost="",
100-
aesKey="",
101-
):
90+
def __init__(self, username="", password="", domain="", port=445, remote_name="", remote_host="", kerberos=None, kdcHost="", aesKey="", logger=None,):
10291
self.__username = username
10392
self.__password = password
10493
self.__domain = domain
@@ -110,12 +99,13 @@ def __init__(
11099
self.__remote_host = remote_host
111100
self.__kerberos = kerberos
112101
self.__kdcHost = kdcHost
102+
self.logger = logger
113103
self.dce = self.get_dce()
114104
self.server_handle = self.get_server_handle()
115105

116106
def get_transport(self):
117107
string_binding = rf"ncacn_np:{self.__port}[\pipe\samr]"
118-
nxc_logger.debug(f"Binding to {string_binding}")
108+
self.logger.debug(f"Binding to {string_binding}")
119109
# using a direct SMBTransport instead of DCERPCTransportFactory since we need the filename to be '\samr'
120110
return transport.SMBTransport(
121111
self.__remote_name,
@@ -151,11 +141,13 @@ def get_server_handle(self):
151141
try:
152142
resp = samr.hSamrConnect(self.dce)
153143
except samr.DCERPCException as e:
154-
nxc_logger.debug(f"Error while connecting with Samr: {e}")
144+
if "rpc_s_access_denied" in str(e):
145+
raise
146+
self.logger.debug(f"Error while connecting with Samr: {e}")
155147
return None
156148
return resp["ServerHandle"]
157149
else:
158-
nxc_logger.debug("Error creating Samr handle")
150+
self.logger.debug("Error creating Samr handle")
159151

160152
def get_domains(self):
161153
"""Calls the hSamrEnumerateDomainsInSamServer() method directly with list comprehension and extracts the "Name" value from each element in the "Buffer" list."""
@@ -186,6 +178,7 @@ def get_alias_members(self, domain_handle, alias_id):
186178
alias_handle = self.get_alias_handle(domain_handle, alias_id)
187179
return [member["SidPointer"].formatCanonical() for member in samr.hSamrGetMembersInAlias(self.dce, alias_handle)["Members"]["Sids"]]
188180

181+
189182
class LSAQuery:
190183
def __init__(self, username="", password="", domain="", port=445, remote_name="", remote_host="", kdcHost="", aesKey="", kerberos=None, logger=None):
191184
self.__username = username

0 commit comments

Comments
 (0)