9
9
from impacket .dcerpc .v5 .rpcrt import RPC_C_AUTHN_GSS_NEGOTIATE
10
10
from impacket .nmb import NetBIOSError
11
11
from impacket .smbconnection import SessionError
12
- from nxc .logger import nxc_logger
13
12
14
13
15
14
class SamrFunc :
@@ -37,7 +36,7 @@ def __init__(self, connection):
37
36
if self .password is None :
38
37
self .password = ""
39
38
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 )
41
40
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 )
42
41
43
42
def get_builtin_groups (self , group ):
@@ -82,23 +81,13 @@ def get_local_users(self, group, domain_handle):
82
81
for sid , name in zip (member_sids , member_names , strict = True ):
83
82
users .append (f"{ name } - { sid } " )
84
83
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 } " )
86
85
return []
87
86
return users
88
87
88
+
89
89
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 ,):
102
91
self .__username = username
103
92
self .__password = password
104
93
self .__domain = domain
@@ -110,12 +99,13 @@ def __init__(
110
99
self .__remote_host = remote_host
111
100
self .__kerberos = kerberos
112
101
self .__kdcHost = kdcHost
102
+ self .logger = logger
113
103
self .dce = self .get_dce ()
114
104
self .server_handle = self .get_server_handle ()
115
105
116
106
def get_transport (self ):
117
107
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 } " )
119
109
# using a direct SMBTransport instead of DCERPCTransportFactory since we need the filename to be '\samr'
120
110
return transport .SMBTransport (
121
111
self .__remote_name ,
@@ -151,11 +141,13 @@ def get_server_handle(self):
151
141
try :
152
142
resp = samr .hSamrConnect (self .dce )
153
143
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 } " )
155
147
return None
156
148
return resp ["ServerHandle" ]
157
149
else :
158
- nxc_logger .debug ("Error creating Samr handle" )
150
+ self . logger .debug ("Error creating Samr handle" )
159
151
160
152
def get_domains (self ):
161
153
"""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):
186
178
alias_handle = self .get_alias_handle (domain_handle , alias_id )
187
179
return [member ["SidPointer" ].formatCanonical () for member in samr .hSamrGetMembersInAlias (self .dce , alias_handle )["Members" ]["Sids" ]]
188
180
181
+
189
182
class LSAQuery :
190
183
def __init__ (self , username = "" , password = "" , domain = "" , port = 445 , remote_name = "" , remote_host = "" , kdcHost = "" , aesKey = "" , kerberos = None , logger = None ):
191
184
self .__username = username
0 commit comments