ldap try catch + magenta
parent
b9699ab078
commit
5040ab6b40
|
@ -34,7 +34,8 @@ ldap_error_status = {
|
||||||
"532":"STATUS_PASSWORD_EXPIRED",
|
"532":"STATUS_PASSWORD_EXPIRED",
|
||||||
"773":"STATUS_PASSWORD_MUST_CHANGE",
|
"773":"STATUS_PASSWORD_MUST_CHANGE",
|
||||||
"775":"USER_ACCOUNT_LOCKED",
|
"775":"USER_ACCOUNT_LOCKED",
|
||||||
"50":"LDAP_INSUFFICIENT_ACCESS"
|
"50":"LDAP_INSUFFICIENT_ACCESS",
|
||||||
|
"KDC_ERR_CLIENT_REVOKED":"KDC_ERR_CLIENT_REVOKED"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -286,12 +287,13 @@ class ldap(connection):
|
||||||
if not self.args.continue_on_success:
|
if not self.args.continue_on_success:
|
||||||
return True
|
return True
|
||||||
except SessionError as e:
|
except SessionError as e:
|
||||||
|
error, desc = e.getErrorString()
|
||||||
self.logger.error(u'{}\\{}{} {}'.format(self.domain,
|
self.logger.error(u'{}\\{}{} {}'.format(self.domain,
|
||||||
self.username,
|
self.username,
|
||||||
" from ccache" if useCache
|
" from ccache" if useCache
|
||||||
else ":%s" % (next(sub for sub in [self.nthash, password, aesKey] if sub != '') if not self.config.get('CME', 'audit_mode') else self.config.get('CME', 'audit_mode')*8),
|
else ":%s" % (next(sub for sub in [self.nthash, password, aesKey] if sub != '') if not self.config.get('CME', 'audit_mode') else self.config.get('CME', 'audit_mode')*8),
|
||||||
str(e)),
|
str(e)),
|
||||||
color='red')
|
color='magenta' if error in ldap_error_status else 'red')
|
||||||
return False
|
return False
|
||||||
except KeyError as e:
|
except KeyError as e:
|
||||||
self.logger.error(u'{}\\{}{} {}'.format(self.domain,
|
self.logger.error(u'{}\\{}{} {}'.format(self.domain,
|
||||||
|
@ -300,9 +302,11 @@ class ldap(connection):
|
||||||
else ":%s" % (next(sub for sub in [self.nthash, password, aesKey] if sub != '') if not self.config.get('CME', 'audit_mode') else self.config.get('CME', 'audit_mode')*8),
|
else ":%s" % (next(sub for sub in [self.nthash, password, aesKey] if sub != '') if not self.config.get('CME', 'audit_mode') else self.config.get('CME', 'audit_mode')*8),
|
||||||
''),
|
''),
|
||||||
color='red')
|
color='red')
|
||||||
|
return False
|
||||||
except ldap_impacket.LDAPSessionError as e:
|
except ldap_impacket.LDAPSessionError as e:
|
||||||
if str(e).find('strongerAuthRequired') >= 0:
|
if str(e).find('strongerAuthRequired') >= 0:
|
||||||
# We need to try SSL
|
# We need to try SSL
|
||||||
|
try:
|
||||||
# Connect to LDAPS
|
# Connect to LDAPS
|
||||||
self.ldapConnection = ldap_impacket.LDAPConnection('ldaps://%s' % target, self.baseDN)
|
self.ldapConnection = ldap_impacket.LDAPConnection('ldaps://%s' % target, self.baseDN)
|
||||||
self.ldapConnection.kerberosLogin(username, password, domain, self.lmhash, self.nthash,
|
self.ldapConnection.kerberosLogin(username, password, domain, self.lmhash, self.nthash,
|
||||||
|
@ -320,6 +324,16 @@ class ldap(connection):
|
||||||
else ":%s" % (next(sub for sub in [self.nthash, password, aesKey] if sub != '') if not self.config.get('CME', 'audit_mode') else self.config.get('CME', 'audit_mode')*8),
|
else ":%s" % (next(sub for sub in [self.nthash, password, aesKey] if sub != '') if not self.config.get('CME', 'audit_mode') else self.config.get('CME', 'audit_mode')*8),
|
||||||
highlight('({})'.format(self.config.get('CME', 'pwn3d_label')) if self.admin_privs else ''))
|
highlight('({})'.format(self.config.get('CME', 'pwn3d_label')) if self.admin_privs else ''))
|
||||||
|
|
||||||
|
if self.username == '':
|
||||||
|
self.username = self.get_ldap_username()
|
||||||
|
|
||||||
|
self.check_if_admin()
|
||||||
|
|
||||||
|
# Prepare success credential text
|
||||||
|
out = u'{}\\{} {}'.format(domain,
|
||||||
|
self.username,
|
||||||
|
highlight('({})'.format(self.config.get('CME', 'pwn3d_label')) if self.admin_privs else ''))
|
||||||
|
|
||||||
self.logger.extra['protocol'] = "LDAPS"
|
self.logger.extra['protocol'] = "LDAPS"
|
||||||
self.logger.extra['port'] = "636"
|
self.logger.extra['port'] = "636"
|
||||||
self.logger.success(out)
|
self.logger.success(out)
|
||||||
|
@ -328,6 +342,23 @@ class ldap(connection):
|
||||||
add_user_bh(self.username, self.domain, self.logger, self.config)
|
add_user_bh(self.username, self.domain, self.logger, self.config)
|
||||||
if not self.args.continue_on_success:
|
if not self.args.continue_on_success:
|
||||||
return True
|
return True
|
||||||
|
except ldap_impacket.LDAPSessionError as e:
|
||||||
|
errorCode = str(e).split()[-2][:-1]
|
||||||
|
self.logger.error(u'{}\\{}:{} {}'.format(self.domain,
|
||||||
|
self.username,
|
||||||
|
self.password if not self.config.get('CME', 'audit_mode') else self.config.get('CME', 'audit_mode')*8,
|
||||||
|
ldap_error_status[errorCode] if errorCode in ldap_error_status else ''),
|
||||||
|
color='magenta' if errorCode in ldap_error_status else 'red')
|
||||||
|
return False
|
||||||
|
except SessionError as e:
|
||||||
|
error, desc = e.getErrorString()
|
||||||
|
self.logger.error(u'{}\\{}{} {}'.format(self.domain,
|
||||||
|
self.username,
|
||||||
|
" from ccache" if useCache
|
||||||
|
else ":%s" % (next(sub for sub in [self.nthash, password, aesKey] if sub != '') if not self.config.get('CME', 'audit_mode') else self.config.get('CME', 'audit_mode')*8),
|
||||||
|
str(e)),
|
||||||
|
color='magenta' if error in ldap_error_status else 'red')
|
||||||
|
return False
|
||||||
else:
|
else:
|
||||||
errorCode = str(e).split()[-2][:-1]
|
errorCode = str(e).split()[-2][:-1]
|
||||||
self.logger.error(u'{}\\{}{} {}'.format(self.domain,
|
self.logger.error(u'{}\\{}{} {}'.format(self.domain,
|
||||||
|
@ -336,6 +367,7 @@ class ldap(connection):
|
||||||
else ":%s" % (next(sub for sub in [self.nthash, password, aesKey] if sub != '') if not self.config.get('CME', 'audit_mode') else self.config.get('CME', 'audit_mode')*8),
|
else ":%s" % (next(sub for sub in [self.nthash, password, aesKey] if sub != '') if not self.config.get('CME', 'audit_mode') else self.config.get('CME', 'audit_mode')*8),
|
||||||
ldap_error_status[errorCode] if errorCode in ldap_error_status else ''),
|
ldap_error_status[errorCode] if errorCode in ldap_error_status else ''),
|
||||||
color='magenta' if errorCode in ldap_error_status else 'red')
|
color='magenta' if errorCode in ldap_error_status else 'red')
|
||||||
|
return False
|
||||||
|
|
||||||
def plaintext_login(self, domain, username, password):
|
def plaintext_login(self, domain, username, password):
|
||||||
self.username = username
|
self.username = username
|
||||||
|
|
|
@ -378,6 +378,9 @@ class smb(connection):
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
self.create_conn_obj()
|
self.create_conn_obj()
|
||||||
|
except FileNotFoundError as e:
|
||||||
|
self.logger.error('CCache Error: {}'.format(e))
|
||||||
|
return False
|
||||||
except (SessionError, Exception) as e:
|
except (SessionError, Exception) as e:
|
||||||
error, desc = e.getErrorString()
|
error, desc = e.getErrorString()
|
||||||
self.logger.error(u'{}\\{}{} {} {}'.format(domain,
|
self.logger.error(u'{}\\{}{} {} {}'.format(domain,
|
||||||
|
|
Loading…
Reference in New Issue