def get_all_spnservices(self): try: ldap_filter = r'(&(sAMAccountType=805306369))' attributes = ['sAMAccountName', 'servicePrincipalName'] for entry in self.ldap.pagedsearch(ldap_filter, attributes): for spn in entry['attributes']['servicePrincipalName']: port = None service, t = spn.rsplit('/', 1) m = t.find(':') if m != -1: computername, port = spn.rsplit(':', 1) else: computername = t s = JackDawSPNService() s.computername = computername s.service = service s.port = port self.agent_out_q.put((LDAPAgentCommand.SPNSERVICE, s)) del s except: self.agent_out_q.put( (LDAPAgentCommand.EXCEPTION, str(traceback.format_exc()))) finally: self.agent_out_q.put((LDAPAgentCommand.SPNSERVICES_FINISHED, None))
async def get_all_spnservices(self): try: async for entry, err in self.ldap.get_all_spn_entries(): if err is not None: raise err if 'servicePrincipalName' not in entry['attributes']: continue for spn in entry['attributes']['servicePrincipalName']: port = None service_name = None service_class, t = spn.split('/',1) m = t.find(':') if m != -1: computername, port = t.rsplit(':',1) if port.find('/') != -1: port, service_name = port.rsplit('/',1) else: computername = t if computername.find('/') != -1: computername, service_name = computername.rsplit('/',1) s = JackDawSPNService() s.owner_sid = str(entry['attributes']['objectSid']) s.computername = computername s.service_class = service_class s.service_name = service_name s.port = port await self.agent_out_q.put((LDAPAgentCommand.SPNSERVICE, s)) except: await self.agent_out_q.put((LDAPAgentCommand.EXCEPTION, str(traceback.format_exc()))) finally: await self.agent_out_q.put((LDAPAgentCommand.SPNSERVICES_FINISHED, None))
def spnservice_enumerator(self): ldap_filter = r'(&(sAMAccountType=805306369))' attributes = ['sAMAccountName', 'servicePrincipalName'] for entry in self.ldap.pagedsearch(ldap_filter, attributes): for spn in entry['attributes']['servicePrincipalName']: port = None service, t = spn.rsplit('/',1) m = t.find(':') if m != -1: computername, port = spn.rsplit(':',1) else: computername = t s = JackDawSPNService() s.computername = computername s.service = service s.port = port yield s
async def get_all_spnservices(self): try: async for entry in self.ldap.get_all_spn_entries(): for spn in entry['attributes']['servicePrincipalName']: port = None service, t = spn.rsplit('/', 1) m = t.find(':') if m != -1: computername, port = spn.rsplit(':', 1) else: computername = t s = JackDawSPNService() s.owner_sid = str(entry['attributes']['objectSid']) s.computername = computername s.service = service s.port = port await self.agent_out_q.put( (LDAPAgentCommand.SPNSERVICE, s)) except: await self.agent_out_q.put( (LDAPAgentCommand.EXCEPTION, str(traceback.format_exc()))) finally: await self.agent_out_q.put( (LDAPAgentCommand.SPNSERVICES_FINISHED, None))