@@ -345,7 +345,8 @@ def print_host_info(self):
345
345
def kerberos_login (self , domain , username , password = '' , ntlm_hash = '' , aesKey = '' , kdcHost = '' , useCache = False ):
346
346
logging .getLogger ("impacket" ).disabled = True
347
347
#Re-connect since we logged off
348
- self .create_conn_obj ()
348
+ kdchost = self .hostname if not self .kdcHost else self .kdcHost
349
+ self .create_conn_obj (kdchost )
349
350
lmhash = ''
350
351
nthash = ''
351
352
if not all ('' == s for s in [self .nthash , password , aesKey ]):
@@ -397,6 +398,15 @@ def kerberos_login(self, domain, username, password = '', ntlm_hash = '', aesKey
397
398
except (FileNotFoundError , KerberosException ) as e :
398
399
self .logger .error ('CCache Error: {}' .format (e ))
399
400
return False
401
+ except OSError as e :
402
+ self .logger .error (u'{}\\ {}{} {} {}' .format (domain ,
403
+ self .username ,
404
+ # Show what was used between cleartext, nthash, aesKey and ccache
405
+ " from ccache" if useCache
406
+ else ":%s" % (next (sub for sub in [nthash ,password ,aesKey ] if (sub != '' and sub != None ) or sub != None ) if not self .config .get ('CME' , 'audit_mode' ) else self .config .get ('CME' , 'audit_mode' )* 8 ),
407
+ str (e ),
408
+ '' ,
409
+ color = 'red' ))
400
410
except (SessionError , Exception ) as e :
401
411
error , desc = e .getErrorString ()
402
412
self .logger .error (u'{}\\ {}{} {} {}' .format (domain ,
@@ -410,7 +420,7 @@ def kerberos_login(self, domain, username, password = '', ntlm_hash = '', aesKey
410
420
if error not in smb_error_status :
411
421
self .inc_failed_login (username )
412
422
return False
413
- return False
423
+ return False
414
424
415
425
def plaintext_login (self , domain , username , password ):
416
426
#Re-connect since we logged off
@@ -523,38 +533,38 @@ def hash_login(self, domain, username, ntlm_hash):
523
533
self .logger .error ('Connection Error: {}' .format (e ))
524
534
return False
525
535
526
- def create_smbv1_conn (self ):
536
+ def create_smbv1_conn (self , kdc = '' ):
527
537
try :
528
- self .conn = SMBConnection (self .host , self .host , None , self .args .port , preferredDialect = SMB_DIALECT , timeout = self .args .smb_timeout )
538
+ self .conn = SMBConnection (self .host if not kdc else kdc , self .host if not kdc else kdc , None , self .args .port , preferredDialect = SMB_DIALECT , timeout = self .args .smb_timeout )
529
539
self .smbv1 = True
530
540
except socket .error as e :
531
541
if str (e ).find ('Connection reset by peer' ) != - 1 :
532
- logging .debug ('SMBv1 might be disabled on {}' .format (self .host ))
542
+ logging .debug ('SMBv1 might be disabled on {}' .format (self .host if not kdc else kdc ))
533
543
return False
534
544
except (Exception , NetBIOSTimeout ) as e :
535
- logging .debug ('Error creating SMBv1 connection to {}: {}' .format (self .host , e ))
545
+ logging .debug ('Error creating SMBv1 connection to {}: {}' .format (self .host if not kdc else kdc , e ))
536
546
return False
537
547
538
548
return True
539
549
540
- def create_smbv3_conn (self ):
550
+ def create_smbv3_conn (self , kdc = '' ):
541
551
try :
542
- self .conn = SMBConnection (self .host , self .host , None , self .args .port , timeout = self .args .smb_timeout )
552
+ self .conn = SMBConnection (self .host if not kdc else kdc , self .host if not kdc else kdc , None , self .args .port , timeout = self .args .smb_timeout )
543
553
self .smbv1 = False
544
554
except socket .error as e :
545
555
if str (e ).find ('Too many open files' ) != - 1 :
546
- self .logger .error ('SMBv3 connection error on {}: {}' .format (self .host , e ))
556
+ self .logger .error ('SMBv3 connection error on {}: {}' .format (self .host if not kdc else kdc , e ))
547
557
return False
548
558
except (Exception , NetBIOSTimeout ) as e :
549
- logging .debug ('Error creating SMBv3 connection to {}: {}' .format (self .host , e ))
559
+ logging .debug ('Error creating SMBv3 connection to {}: {}' .format (self .host if not kdc else kdc , e ))
550
560
return False
551
561
552
562
return True
553
563
554
- def create_conn_obj (self ):
555
- if self .create_smbv1_conn ():
564
+ def create_conn_obj (self , kdc = '' ):
565
+ if self .create_smbv1_conn (kdc ):
556
566
return True
557
- elif self .create_smbv3_conn ():
567
+ elif self .create_smbv3_conn (kdc ):
558
568
return True
559
569
560
570
return False
0 commit comments