@@ -89,7 +89,7 @@ def check_if_admin(self):
8989 else :
9090 if is_admin :
9191 self .admin_privs = True
92-
92+
9393 @reconnect_mssql
9494 def enum_host_info (self ):
9595 challenge = None
@@ -102,7 +102,7 @@ def enum_host_info(self):
102102 login ["ClientPID" ] = random .randint (0 , 1024 )
103103 login ["PacketSize" ] = self .conn .packetSize
104104 login ["OptionFlags2" ] = tds .TDS_INIT_LANG_FATAL | tds .TDS_ODBC_ON | tds .TDS_INTEGRATED_SECURITY_ON
105-
105+
106106 # NTLMSSP Negotiate
107107 auth = ntlm .getNTLMSSPType1 ("" , "" )
108108 login ["SSPI" ] = auth .getData ()
@@ -144,16 +144,7 @@ def print_host_info(self):
144144 self .logger .display (f"{ self .server_os } (name:{ self .hostname } ) (domain:{ self .targetDomain } )" )
145145
146146 @reconnect_mssql
147- def kerberos_login (
148- self ,
149- domain ,
150- username ,
151- password = "" ,
152- ntlm_hash = "" ,
153- aesKey = "" ,
154- kdcHost = "" ,
155- useCache = False ,
156- ):
147+ def kerberos_login (self , domain , username , password = "" , ntlm_hash = "" , aesKey = "" , kdcHost = "" , useCache = False ):
157148 self .username = username
158149 self .password = password
159150 self .domain = domain
@@ -200,29 +191,21 @@ def kerberos_login(
200191 return False
201192 except Exception :
202193 error_msg = self .handle_mssql_reply ()
203- self .logger .fail ("{ }\\ {}:{} {}" . format ( self . domain , self . username , kerb_pass , error_msg if error_msg else "" ) )
194+ self .logger .fail (f" { self . domain } \\ { self . username } :{ used_ccache } { error_msg if error_msg else '' } " )
204195 return False
205196
206197 @reconnect_mssql
207198 def plaintext_login (self , domain , username , password ):
208199 self .password = password
209200 self .username = username
210201 self .domain = domain
211-
202+
212203 try :
213- res = self .conn .login (
214- None ,
215- self .username ,
216- self .password ,
217- self .domain ,
218- None ,
219- not self .args .local_auth ,
220- )
204+ res = self .conn .login (None , self .username , self .password , self .domain , None , not self .args .local_auth )
221205 if res is not True :
222206 raise
223207 self .check_if_admin ()
224- out = f"{ self .domain } \\ { self .username } :{ process_secret (self .password )} { self .mark_pwned ()} "
225- self .logger .success (out )
208+ self .logger .success (f"{ self .domain } \\ { self .username } :{ process_secret (self .password )} { self .mark_pwned ()} " )
226209 if not self .args .local_auth and self .username != "" :
227210 add_user_bh (self .username , self .domain , self .logger , self .config )
228211 if self .admin_privs :
@@ -233,7 +216,7 @@ def plaintext_login(self, domain, username, password):
233216 return False
234217 except Exception :
235218 error_msg = self .handle_mssql_reply ()
236- self .logger .fail ("{ }\\ {}:{} {}" . format ( self .domain , self . username , process_secret (self .password ), error_msg if error_msg else "" ) )
219+ self .logger .fail (f" { self . domain } \\ { self .username } : { process_secret (self .password )} { error_msg if error_msg else '' } " )
237220 return False
238221
239222 @reconnect_mssql
@@ -242,26 +225,18 @@ def hash_login(self, domain, username, ntlm_hash):
242225 self .domain = domain
243226 self .lmhash = ""
244227 self .nthash = ""
245-
228+
246229 if ntlm_hash .find (":" ) != - 1 :
247230 self .lmhash , self .nthash = ntlm_hash .split (":" )
248231 else :
249232 self .nthash = ntlm_hash
250233
251234 try :
252- res = self .conn .login (
253- None ,
254- self .username ,
255- "" ,
256- self .domain ,
257- f"{ self .lmhash } :{ self .nthash } " ,
258- not self .args .local_auth ,
259- )
235+ res = self .conn .login (None , self .username , "" , self .domain , f"{ self .lmhash } :{ self .nthash } " , not self .args .local_auth )
260236 if res is not True :
261237 raise
262238 self .check_if_admin ()
263- out = f"{ self .domain } \\ { self .username } :{ process_secret (self .nthash )} { self .mark_pwned ()} "
264- self .logger .success (out )
239+ self .logger .success (f"{ self .domain } \\ { self .username } :{ process_secret (self .nthash )} { self .mark_pwned ()} " )
265240 if not self .args .local_auth and self .username != "" :
266241 add_user_bh (self .username , self .domain , self .logger , self .config )
267242 if self .admin_privs :
@@ -272,7 +247,7 @@ def hash_login(self, domain, username, ntlm_hash):
272247 return False
273248 except Exception :
274249 error_msg = self .handle_mssql_reply ()
275- self .logger .fail ("{ }\\ {}:{} {}" . format ( self .domain , self . username , process_secret (self .nthash ), error_msg if error_msg else "" ) )
250+ self .logger .fail (f" { self . domain } \\ { self .username } : { process_secret (self .nthash )} { error_msg if error_msg else '' } " )
276251 return False
277252
278253 def mssql_query (self ):
@@ -305,10 +280,10 @@ def execute(self, payload=None, get_output=False):
305280 if not payload :
306281 self .logger .error ("No command to execute specified!" )
307282 return None
308-
283+
309284 get_output = True if not self .args .no_output else get_output
310285 self .logger .debug (f"{ get_output = } " )
311-
286+
312287 try :
313288 exec_method = MSSQLEXEC (self .conn , self .logger )
314289 output = exec_method .execute (payload )
@@ -317,7 +292,7 @@ def execute(self, payload=None, get_output=False):
317292 self .logger .fail (f"Execute command failed, error: { e !s} " )
318293 return False
319294 else :
320- self .logger .success ("Executed command via mssqlexec" )
295+ self .logger .success ("Executed command via mssqlexec" )
321296 if output :
322297 output_lines = StringIO (output ).readlines ()
323298 for line in output_lines :
@@ -330,24 +305,24 @@ def ps_execute(self, payload=None, get_output=False, methods=None, force_ps32=Fa
330305 if not payload :
331306 self .logger .error ("No command to execute specified!" )
332307 return None
333-
308+
334309 response = []
335310 obfs = obfs if obfs else self .args .obfs
336311 encode = encode if encode else not self .args .no_encode
337312 force_ps32 = force_ps32 if force_ps32 else self .args .force_ps32
338313 get_output = True if not self .args .no_output else get_output
339-
314+
340315 self .logger .debug (f"Starting PS execute: { payload = } { get_output = } { methods = } { force_ps32 = } { obfs = } { encode = } " )
341316 amsi_bypass = self .args .amsi_bypass [0 ] if self .args .amsi_bypass else None
342317 self .logger .debug (f"AMSI Bypass: { amsi_bypass } " )
343-
318+
344319 if os .path .isfile (payload ):
345320 self .logger .debug (f"File payload set: { payload } " )
346321 with open (payload ) as commands :
347322 response = [self .execute (create_ps_command (c .strip (), force_ps32 = force_ps32 , obfs = obfs , custom_amsi = amsi_bypass , encode = encode ), get_output ) for c in commands ]
348323 else :
349324 response = [self .execute (create_ps_command (payload , force_ps32 = force_ps32 , obfs = obfs , custom_amsi = amsi_bypass , encode = encode ), get_output )]
350-
325+
351326 self .logger .debug (f"ps_execute response: { response } " )
352327 return response
353328
@@ -368,7 +343,7 @@ def put_file(self):
368343 self .logger .fail (f"Error during upload : { e } " )
369344
370345 @requires_admin
371- def get_file (self ):
346+ def get_file (self ):
372347 remote_path = self .args .get_file [0 ]
373348 download_path = self .args .get_file [1 ]
374349 self .logger .display (f'Copying "{ remote_path } " to "{ download_path } "' )
0 commit comments