def test_DRSGetNCChanges(self): # Not yet working dce, rpctransport, hDrs, DsaObjDest = self.connect() request = drsuapi.DRSGetNCChanges() request['hDrs'] = hDrs request['dwInVersion'] = 8 request['pmsgIn']['tag'] = 8 request['pmsgIn']['V8']['uuidDsaObjDest'] = DsaObjDest request['pmsgIn']['V8']['uuidInvocIdSrc'] = DsaObjDest #request['pmsgIn']['V8']['pNC'] = NULL dsName = drsuapi.DSNAME() dsName['SidLen'] = 0 dsName['Guid'] = drsuapi.NULLGUID dsName['Sid'] = '' name = 'DC=%s,DC=%s' % (self.domain.split('.')[0],self.domain.split('.')[1]) dsName['NameLen'] = len(name) dsName['StringName'] = (name + '\x00') dsName['structLen'] = len(dsName.getData()) request['pmsgIn']['V8']['pNC'] = dsName request['pmsgIn']['V8']['usnvecFrom']['usnHighObjUpdate'] = 0 request['pmsgIn']['V8']['usnvecFrom']['usnHighPropUpdate'] = 0 request['pmsgIn']['V8']['pUpToDateVecDest'] = NULL request['pmsgIn']['V8']['ulFlags'] = drsuapi.DRS_INIT_SYNC | drsuapi.DRS_PER_SYNC #| drsuapi.DRS_CRITICAL_ONLY request['pmsgIn']['V8']['cMaxObjects'] = 100 request['pmsgIn']['V8']['cMaxBytes'] = 0 request['pmsgIn']['V8']['ulExtendedOp'] = drsuapi.EXOP_REPL_OBJ | drsuapi.EXOP_REPL_SECRETS prefixTable = [] oid1 = drsuapi.MakeAttid(prefixTable, '1.2.840.113556.1.4.656') # principalName oid2 = drsuapi.MakeAttid(prefixTable, '1.2.840.113556.1.4.221') #'sAMAccountName' oid3 = drsuapi.MakeAttid(prefixTable, '1.2.840.113556.1.4.90') # 'unicodePwd' oid4 = drsuapi.MakeAttid(prefixTable, '1.2.840.113556.1.4.94') # ntPwdHistory oid5 = drsuapi.MakeAttid(prefixTable, '1.2.840.113556.1.4.160') # lmPwdHistory oid6 = drsuapi.MakeAttid(prefixTable, '1.2.840.113556.1.4.125') # supplementalCreds oid7 = drsuapi.MakeAttid(prefixTable, '1.2.840.113556.1.4.146') # objectSid request['pmsgIn']['V8']['pPartialAttrSet']['dwVersion'] = 1 request['pmsgIn']['V8']['pPartialAttrSet']['cAttrs'] = 7 request['pmsgIn']['V8']['pPartialAttrSet']['rgPartialAttr'].append(oid1) request['pmsgIn']['V8']['pPartialAttrSet']['rgPartialAttr'].append(oid2) request['pmsgIn']['V8']['pPartialAttrSet']['rgPartialAttr'].append(oid3) request['pmsgIn']['V8']['pPartialAttrSet']['rgPartialAttr'].append(oid4) request['pmsgIn']['V8']['pPartialAttrSet']['rgPartialAttr'].append(oid5) request['pmsgIn']['V8']['pPartialAttrSet']['rgPartialAttr'].append(oid6) request['pmsgIn']['V8']['pPartialAttrSet']['rgPartialAttr'].append(oid7) request['pmsgIn']['V8']['pPartialAttrSetEx1'] = NULL request['pmsgIn']['V8']['PrefixTableDest']['PrefixCount'] = len(prefixTable) request['pmsgIn']['V8']['PrefixTableDest']['pPrefixEntry'] = prefixTable resp = dce.request(request) resp.dump()
def DRSGetNCChanges(self, userEntry): if self.__drsr is None: self.__connectDrds() request = drsuapi.DRSGetNCChanges() request['hDrs'] = self.__hDrs request['dwInVersion'] = 8 request['pmsgIn']['tag'] = 8 request['pmsgIn']['V8']['uuidDsaObjDest'] = self.__NtdsDsaObjectGuid request['pmsgIn']['V8']['uuidInvocIdSrc'] = self.__NtdsDsaObjectGuid dsName = drsuapi.DSNAME() dsName['SidLen'] = 0 dsName['Guid'] = drsuapi.NULLGUID dsName['Sid'] = '' dsName['NameLen'] = len(userEntry) dsName['StringName'] = (userEntry + '\x00') dsName['structLen'] = len(dsName.getData()) request['pmsgIn']['V8']['pNC'] = dsName request['pmsgIn']['V8']['usnvecFrom']['usnHighObjUpdate'] = 0 request['pmsgIn']['V8']['usnvecFrom']['usnHighPropUpdate'] = 0 request['pmsgIn']['V8']['pUpToDateVecDest'] = NULL request['pmsgIn']['V8'][ 'ulFlags'] = drsuapi.DRS_INIT_SYNC | drsuapi.DRS_WRIT_REP request['pmsgIn']['V8']['cMaxObjects'] = 1 request['pmsgIn']['V8']['cMaxBytes'] = 0 request['pmsgIn']['V8']['ulExtendedOp'] = drsuapi.EXOP_REPL_OBJ if self.__ppartialAttrSet is None: self.__prefixTable = [] self.__ppartialAttrSet = drsuapi.PARTIAL_ATTR_VECTOR_V1_EXT() self.__ppartialAttrSet['dwVersion'] = 1 self.__ppartialAttrSet['cAttrs'] = len(NTDSHashes.ATTRTYP_TO_ATTID) for attId in NTDSHashes.ATTRTYP_TO_ATTID.values(): self.__ppartialAttrSet['rgPartialAttr'].append( drsuapi.MakeAttid(self.__prefixTable, attId)) request['pmsgIn']['V8']['pPartialAttrSet'] = self.__ppartialAttrSet request['pmsgIn']['V8']['PrefixTableDest']['PrefixCount'] = len( self.__prefixTable) request['pmsgIn']['V8']['PrefixTableDest'][ 'pPrefixEntry'] = self.__prefixTable request['pmsgIn']['V8']['pPartialAttrSetEx1'] = NULL return self.__drsr.request(request)
def aaaa_DRSGetNCChanges(self): # Not yet working dce, rpctransport, hDrs = self.connect() request = drsuapi.DRSGetNCChanges() request['hDrs'] = hDrs request['dwInVersion'] = 10 request['pmsgIn']['tag'] = 10 request['pmsgIn']['V10']['uuidDsaObjDest'] = '\xd7\xba[\xe8#\t\xcbA\x91\x1e6\x91\xd2\x01H\x15' request['pmsgIn']['V10']['uuidInvocIdSrc'] = '<\x11\xeav\xbc\xc8\x9bJ\x86bI\xf3\r\x1fm\xbf' #request['pmsgIn']['V10']['pNC'] = NULL dsName = drsuapi.DSNAME() dsName['SidLen'] = 0 dsName['Guid'] = drsuapi.NULLGUID dsName['Sid'] = '' name = 'CN=NTDS Settings,CN=FREEFLY-DC,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=FREEFLY,DC=NET' dsName['NameLen'] = len(name) dsName['StringName'] = name + '\x00' dsName['structLen'] = len(dsName.getData()) request['pmsgIn']['V10']['pNC'] = dsName request['pmsgIn']['V10']['usnvecFrom']['usnHighObjUpdate'] = 1 request['pmsgIn']['V10']['usnvecFrom']['usnHighPropUpdate'] = 1 cursor = drsuapi.UPTODATE_CURSOR_V1() cursor['uuidDsa'] = '\xd7\xba[\xe8#\t\xcbA\x91\x1e6\x91\xd2\x01H\x15' cursor['usnHighPropUpdate'] = 1 request['pmsgIn']['V10']['pUpToDateVecDest']['dwVersion'] = 0 request['pmsgIn']['V10']['pUpToDateVecDest']['cNumCursors'] = 1 request['pmsgIn']['V10']['pUpToDateVecDest']['rgCursors'].append(cursor) request['pmsgIn']['V10']['ulFlags'] = drsuapi.DRS_WRIT_REP | drsuapi.DRS_INIT_SYNC | drsuapi.DRS_PER_SYNC request['pmsgIn']['V10']['cMaxObjects'] = 512 request['pmsgIn']['V10']['cMaxBytes'] = 5357731 #request['pmsgIn']['V10']['ulExtendedOp'] = 0 #request['pmsgIn']['V10']['liFsmoInfo'] = 0 request['pmsgIn']['V10']['pPartialAttrSet'] = NULL request['pmsgIn']['V10']['pPartialAttrSetEx1'] = NULL request['pmsgIn']['V10']['PrefixTableDest']['pPrefixEntry'] = NULL #request['pmsgIn']['V10']['ulMoreFlags'] = 0 request.dump() resp = dce.request(request) resp.dump()
def aaaa_DRSVerifyNames(self): # Not Yet working dce, rpctransport, hDrs = self.connect() name = 'CN=Administrator,CN=Users,DC=FREEFLY,DC=NET' formatOffered = drsuapi.DS_NT4_ACCOUNT_NAME_SANS_DOMAIN_EX formatDesired = drsuapi.DS_USER_PRINCIPAL_NAME_FOR_LOGON resp = drsuapi.hDRSCrackNames(dce, hDrs, 0, formatOffered, formatDesired, (name,)) resp.dump() request = drsuapi.DRSVerifyNames() request['hDrs'] = hDrs request['dwInVersion'] = 1 request['pmsgIn']['tag'] = 1 request['pmsgIn']['V1']['dwFlags'] = drsuapi.DRS_VERIFY_SAM_ACCOUNT_NAMES request['pmsgIn']['V1']['cNames'] = 1 #pDsName = drsuapi.PDSNAME() dsName = drsuapi.DSNAME() dsName['SidLen'] = 0 dsName['Guid'] = drsuapi.NULLGUID dsName['Sid'] = '' dsName['NameLen'] = len(name) dsName['StringName'] = name + '\x00' dsName['structLen'] = len(dsName.getData()) request['pmsgIn']['V1']['rpNames'].append(dsName) request['pmsgIn']['V1']['RequiredAttrs']['pAttr'] = NULL #request['pmsgIn']['V1']['RequiredAttrs']['attrCount'] = 3 #attr = drsuapi.ATTR() #attr[''] = #attr[''] = #attr[''] = #request['pmsgIn']['V1']['RequiredAttrs']['pAttr'].append(attr) request['pmsgIn']['V1']['PrefixTable']['pPrefixEntry'] = NULL request.dump() resp = dce.request(request) resp.dump()
def test_DRSGetNCChanges2(self): # Not yet working dce, rpctransport, hDrs, DsaObjDest = self.connect() request = drsuapi.DRSGetNCChanges() request['hDrs'] = hDrs request['dwInVersion'] = 10 request['pmsgIn']['tag'] = 10 request['pmsgIn']['V10']['uuidDsaObjDest'] = DsaObjDest request['pmsgIn']['V10']['uuidInvocIdSrc'] = drsuapi.NULLGUID #request['pmsgIn']['V10']['pNC'] = NULL dsName = drsuapi.DSNAME() dsName['SidLen'] = 0 dsName['Guid'] = drsuapi.NULLGUID dsName['Sid'] = '' name = 'CN=Schema,CN=Configuration,DC=%s,DC=%s' % ( self.domain.split('.')[0], self.domain.split('.')[1]) dsName['NameLen'] = len(name) dsName['StringName'] = (name + '\x00') dsName['structLen'] = len(dsName.getData()) request['pmsgIn']['V10']['pNC'] = dsName request['pmsgIn']['V10']['usnvecFrom']['usnHighObjUpdate'] = 0 request['pmsgIn']['V10']['usnvecFrom']['usnHighPropUpdate'] = 0 request['pmsgIn']['V10']['pUpToDateVecDest'] = NULL request['pmsgIn']['V10'][ 'ulFlags'] = drsuapi.DRS_INIT_SYNC | drsuapi.DRS_PER_SYNC | drsuapi.DRS_WRIT_REP | drsuapi.DRS_FULL_SYNC_NOW request['pmsgIn']['V10']['cMaxObjects'] = 100 request['pmsgIn']['V10']['cMaxBytes'] = 0 request['pmsgIn']['V10']['ulExtendedOp'] = 0 request['pmsgIn']['V10']['pPartialAttrSet'] = NULL request['pmsgIn']['V10']['pPartialAttrSetEx1'] = NULL request['pmsgIn']['V10']['PrefixTableDest']['pPrefixEntry'] = NULL #request['pmsgIn']['V10']['ulMoreFlags'] = 0 resp = dce.request(request) print(resp['pmsgOut']['V6']['pNC']['StringName']) resp.dump() print('\n') self.getMoreData(dce, request, resp) dsName = drsuapi.DSNAME(isNDR64=request._isNDR64) dsName['SidLen'] = 0 dsName['Guid'] = drsuapi.NULLGUID dsName['Sid'] = '' name = 'DC=%s,DC=%s' % (self.domain.split('.')[0], self.domain.split('.')[1]) dsName['NameLen'] = len(name) dsName['StringName'] = (name + '\x00') dsName['structLen'] = len(dsName.getData()) request['pmsgIn']['V10']['pNC'] = dsName resp = dce.request(request) print(resp['pmsgOut']['V6']['pNC']['StringName']) resp.dump() print('\n') self.getMoreData(dce, request, resp) dsName = drsuapi.DSNAME(isNDR64=request._isNDR64) dsName['SidLen'] = 0 dsName['Guid'] = drsuapi.NULLGUID dsName['Sid'] = '' name = 'CN=Configuration,DC=%s,DC=%s' % (self.domain.split('.')[0], self.domain.split('.')[1]) dsName['NameLen'] = len(name) dsName['StringName'] = (name + '\x00') dsName['structLen'] = len(dsName.getData()) request['pmsgIn']['V10']['pNC'] = dsName resp = dce.request(request) print(resp['pmsgOut']['V6']['pNC']['StringName']) resp.dump() print('\n') self.getMoreData(dce, request, resp)