Skip to content
This repository was archived by the owner on Dec 6, 2023. It is now read-only.

Commit 193ce41

Browse files
author
mpgn
committed
SMB kerberos better you can put ip whithout fqdn
1 parent a88a6e8 commit 193ce41

File tree

1 file changed

+23
-13
lines changed

1 file changed

+23
-13
lines changed

cme/protocols/smb.py

+23-13
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,8 @@ def print_host_info(self):
345345
def kerberos_login(self, domain, username, password = '', ntlm_hash = '', aesKey = '', kdcHost = '', useCache = False):
346346
logging.getLogger("impacket").disabled = True
347347
#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)
349350
lmhash = ''
350351
nthash = ''
351352
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
397398
except (FileNotFoundError, KerberosException) as e:
398399
self.logger.error('CCache Error: {}'.format(e))
399400
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'))
400410
except (SessionError, Exception) as e:
401411
error, desc = e.getErrorString()
402412
self.logger.error(u'{}\\{}{} {} {}'.format(domain,
@@ -410,7 +420,7 @@ def kerberos_login(self, domain, username, password = '', ntlm_hash = '', aesKey
410420
if error not in smb_error_status:
411421
self.inc_failed_login(username)
412422
return False
413-
return False
423+
return False
414424

415425
def plaintext_login(self, domain, username, password):
416426
#Re-connect since we logged off
@@ -523,38 +533,38 @@ def hash_login(self, domain, username, ntlm_hash):
523533
self.logger.error('Connection Error: {}'.format(e))
524534
return False
525535

526-
def create_smbv1_conn(self):
536+
def create_smbv1_conn(self, kdc=''):
527537
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)
529539
self.smbv1 = True
530540
except socket.error as e:
531541
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))
533543
return False
534544
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))
536546
return False
537547

538548
return True
539549

540-
def create_smbv3_conn(self):
550+
def create_smbv3_conn(self, kdc=''):
541551
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)
543553
self.smbv1 = False
544554
except socket.error as e:
545555
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))
547557
return False
548558
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))
550560
return False
551561

552562
return True
553563

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):
556566
return True
557-
elif self.create_smbv3_conn():
567+
elif self.create_smbv3_conn(kdc):
558568
return True
559569

560570
return False

0 commit comments

Comments
 (0)