Coverage for /private/tmp/im/impacket/impacket/dcerpc/v5/drsuapi.py : 90%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
# SECUREAUTH LABS. Copyright 2018 SecureAuth Corporation. All rights reserved. # # This software is provided under under a slightly modified version # of the Apache Software License. See the accompanying LICENSE file # for more information. # # Author: Alberto Solino (@agsolino) # # Description: # [MS-DRSR] Directory Replication Service (DRS) DRSUAPI Interface implementation # # Best way to learn how to use these calls is to grab the protocol standard # so you understand what the call does, and then read the test case located # at https://github.com/SecureAuthCorp/impacket/tree/master/tests/SMB_RPC # # Some calls have helper functions, which makes it even easier to use. # They are located at the end of this file. # Helper functions start with "h"<name of the call>. # There are test cases for them too. #
except Exception: LOG.critical("Warning: You don't have any crypto installed. You need pycryptodomex") LOG.critical("See https://pypi.org/project/pycryptodomex/")
error_msg_short = hresult_errors.ERROR_MESSAGES[key][0] error_msg_verbose = hresult_errors.ERROR_MESSAGES[key][1] return 'DRSR SessionError: code: 0x%x - %s - %s' % (self.error_code, error_msg_short, error_msg_verbose) else: return 'DRSR SessionError: unknown error code: 0x%x' % self.error_code
################################################################################ # CONSTANTS ################################################################################ # 4.1.10.2.17 EXOP_ERR Codes ('Data', '<L'), )
msg = self.__class__.__name__
# 4.1.10.2.18 EXOP_REQ Codes
# 5.14 ATTRTYP
# 5.51 DSTIME
# 5.39 DRS_EXTENSIONS_INT
# dwFlagsExt
# 5.41 DRS_OPTIONS
# 5.113 LDAP_CONN_PROPERTIES
# 5.137 NTSAPI_CLIENT_GUID
# 5.139 NULLGUID
# 5.205 USN
# 4.1.4.1.2 DRS_MSG_CRACKREQ_V1
# 5.53 ENTINF
# 4.1.27.1.2 DRS_MSG_VERIFYREQ_V1
# 4.1.11.1.2 DRS_MSG_NT4_CHGLOG_REQ_V1
# 4.1.10.2.15 DRS_MSG_GETCHGREPLY_NATIVE_VERSION_NUMBER ################################################################################ # STRUCTURES ################################################################################ # 4.1.10.2.16 ENCRYPTED_PAYLOAD ('Salt','16s'), ('CheckSum','<L'), ('EncryptedData',':'), )
# 5.136 NT4SID ('Data','28s=b""'), )
# 5.40 DRS_HANDLE ('Data','20s=b""'), )
('Data',DRS_HANDLE), )
# 5.38 DRS_EXTENSIONS
('Data',BYTE_ARRAY), )
('cb',DWORD), ('rgb',BYTE_ARRAY), )
('Data',DRS_EXTENSIONS), )
# 5.39 DRS_EXTENSIONS_INT ('dwFlags','<L=0'), ('SiteObjGuid','16s=b""'), ('Pid','<L=0'), ('dwReplEpoch','<L=0'), ('dwFlagsExt','<L=0'), ('ConfigObjGUID','16s=b""'), ('dwExtCaps','<L=0'), )
# 4.1.5.1.2 DRS_MSG_DCINFOREQ_V1 ('Domain',LPWSTR), ('InfoLevel',DWORD), )
# 4.1.5.1.1 DRS_MSG_DCINFOREQ ('tag', DWORD), ) 1 : ('V1', DRS_MSG_DCINFOREQ_V1), }
# 4.1.5.1.8 DS_DOMAIN_CONTROLLER_INFO_1W ('NetbiosName',LPWSTR), ('DnsHostName',LPWSTR), ('SiteName',LPWSTR), ('ComputerObjectName',LPWSTR), ('ServerObjectName',LPWSTR), ('fIsPdc',BOOL), ('fDsEnabled',BOOL), )
('Data',DS_DOMAIN_CONTROLLER_INFO_1W_ARRAY), )
# 4.1.5.1.4 DRS_MSG_DCINFOREPLY_V1 ('cItems',DWORD), ('rItems',PDS_DOMAIN_CONTROLLER_INFO_1W_ARRAY), )
# 4.1.5.1.9 DS_DOMAIN_CONTROLLER_INFO_2W ('NetbiosName',LPWSTR), ('DnsHostName',LPWSTR), ('SiteName',LPWSTR), ('SiteObjectName',LPWSTR), ('ComputerObjectName',LPWSTR), ('ServerObjectName',LPWSTR), ('NtdsDsaObjectName',LPWSTR), ('fIsPdc',BOOL), ('fDsEnabled',BOOL), ('fIsGc',BOOL), ('SiteObjectGuid',GUID), ('ComputerObjectGuid',GUID), ('ServerObjectGuid',GUID), ('NtdsDsaObjectGuid',GUID), )
('Data',DS_DOMAIN_CONTROLLER_INFO_2W_ARRAY), )
# 4.1.5.1.5 DRS_MSG_DCINFOREPLY_V2 ('cItems',DWORD), ('rItems',PDS_DOMAIN_CONTROLLER_INFO_2W_ARRAY), )
# 4.1.5.1.10 DS_DOMAIN_CONTROLLER_INFO_3W ('NetbiosName',LPWSTR), ('DnsHostName',LPWSTR), ('SiteName',LPWSTR), ('SiteObjectName',LPWSTR), ('ComputerObjectName',LPWSTR), ('ServerObjectName',LPWSTR), ('NtdsDsaObjectName',LPWSTR), ('fIsPdc',BOOL), ('fDsEnabled',BOOL), ('fIsGc',BOOL), ('fIsRodc',BOOL), ('SiteObjectGuid',GUID), ('ComputerObjectGuid',GUID), ('ServerObjectGuid',GUID), ('NtdsDsaObjectGuid',GUID), )
('Data',DS_DOMAIN_CONTROLLER_INFO_3W_ARRAY), )
# 4.1.5.1.6 DRS_MSG_DCINFOREPLY_V3 ('cItems',DWORD), ('rItems',PDS_DOMAIN_CONTROLLER_INFO_3W_ARRAY), )
# 4.1.5.1.11 DS_DOMAIN_CONTROLLER_INFO_FFFFFFFFW ('IPAddress',DWORD), ('NotificationCount',DWORD), ('secTimeConnected',DWORD), ('Flags',DWORD), ('TotalRequests',DWORD), ('Reserved1',DWORD), ('UserName',LPWSTR), )
('Data',DS_DOMAIN_CONTROLLER_INFO_FFFFFFFFW_ARRAY), )
# 4.1.5.1.7 DRS_MSG_DCINFOREPLY_VFFFFFFFF ('cItems',DWORD), ('rItems',PDS_DOMAIN_CONTROLLER_INFO_FFFFFFFFW_ARRAY), )
# 4.1.5.1.3 DRS_MSG_DCINFOREPLY ('tag', DWORD), ) 1 : ('V1', DRS_MSG_DCINFOREPLY_V1), 2 : ('V2', DRS_MSG_DCINFOREPLY_V2), 3 : ('V3', DRS_MSG_DCINFOREPLY_V3), 0xffffffff : ('V1', DRS_MSG_DCINFOREPLY_VFFFFFFFF), }
# 4.1.4.1.2 DRS_MSG_CRACKREQ_V1
('Data',LPWSTR_ARRAY), )
('CodePage',ULONG), ('LocaleId',ULONG), ('dwFlags',DWORD), ('formatOffered',DWORD), ('formatDesired',DWORD), ('cNames',DWORD), ('rpNames',PLPWSTR_ARRAY), )
# 4.1.4.1.1 DRS_MSG_CRACKREQ ('tag', DWORD), ) 1 : ('V1', DRS_MSG_CRACKREQ_V1), }
# 4.1.4.1.3 DS_NAME_FORMAT
# 4.1.4.1.4 DS_NAME_RESULT_ITEMW ('status',DWORD), ('pDomain',LPWSTR), ('pName',LPWSTR), )
('Data',DS_NAME_RESULT_ITEMW_ARRAY), )
# 4.1.4.1.5 DS_NAME_RESULTW ('cItems',DWORD), ('rItems',PDS_NAME_RESULT_ITEMW_ARRAY), )
('Data',DS_NAME_RESULTW), )
# 4.1.4.1.7 DRS_MSG_CRACKREPLY_V1 ('pResult',PDS_NAME_RESULTW), )
# 4.1.4.1.6 DRS_MSG_CRACKREPLY ('tag', DWORD), ) 1 : ('V1', DRS_MSG_CRACKREPLY_V1), }
# 5.198 UPTODATE_CURSOR_V1 ('uuidDsa',UUID), ('usnHighPropUpdate',USN), )
# 5.200 UPTODATE_VECTOR_V1_EXT ('dwVersion',DWORD), ('dwReserved1',DWORD), ('cNumCursors',DWORD), ('dwReserved2',DWORD), ('rgCursors',UPTODATE_CURSOR_V1_ARRAY), )
('Data',UPTODATE_VECTOR_V1_EXT), )
# 5.206 USN_VECTOR ('usnHighObjUpdate',USN), ('usnReserved',USN), ('usnHighPropUpdate',USN), )
# 5.50 DSNAME
except ValueError: # We might have Unicode chars in here, let's use unichr instead LOG.debug('ValueError exception on %s' % self.fields[key]) LOG.debug('Switching to unichr()') return ''.join([chr(i) for i in self.fields[key]])
else: return NDR.__getitem__(self,key)
('structLen',ULONG), ('SidLen',ULONG), ('Guid',GUID), ('Sid',NT4SID), ('NameLen',ULONG), ('StringName', WCHAR_ARRAY), ) return self['NameLen']
('Data',DSNAME), )
('Data',PDSNAME_ARRAY), )
# 5.145 PARTIAL_ATTR_VECTOR_V1_EXT ('dwVersion',DWORD), ('dwReserved1',DWORD), ('cAttrs',DWORD), ('rgPartialAttr',ATTRTYP_ARRAY), )
('Data',PARTIAL_ATTR_VECTOR_V1_EXT), )
# 5.142 OID_t ('length',ULONG), ('elements',PBYTE_ARRAY), )
# 5.153 PrefixTableEntry ('ndx',ULONG), ('prefix',OID_t), )
('Data',PrefixTableEntry_ARRAY), )
# 5.177 SCHEMA_PREFIX_TABLE ('PrefixCount',DWORD), ('pPrefixEntry',PPrefixTableEntry_ARRAY), )
# 4.1.10.2.2 DRS_MSG_GETCHGREQ_V3 ('uuidDsaObjDest',UUID), ('uuidInvocIdSrc',UUID), ('pNC',PDSNAME), ('usnvecFrom',USN_VECTOR), ('pUpToDateVecDestV1',PUPTODATE_VECTOR_V1_EXT), ('pPartialAttrVecDestV1',PPARTIAL_ATTR_VECTOR_V1_EXT), ('PrefixTableDest',SCHEMA_PREFIX_TABLE), ('ulFlags',ULONG), ('cMaxObjects',ULONG), ('cMaxBytes',ULONG), ('ulExtendedOp',ULONG), )
# 5.131 MTX_ADDR ('mtx_namelen',ULONG), ('mtx_name',PBYTE_ARRAY), )
('Data',MTX_ADDR), )
# 4.1.10.2.3 DRS_MSG_GETCHGREQ_V4 ('uuidTransportObj',UUID), ('pmtxReturnAddress',PMTX_ADDR), ('V3',DRS_MSG_GETCHGREQ_V3), )
# 4.1.10.2.4 DRS_MSG_GETCHGREQ_V5 ('uuidDsaObjDest',UUID), ('uuidInvocIdSrc',UUID), ('pNC',PDSNAME), ('usnvecFrom',USN_VECTOR), ('pUpToDateVecDestV1',PUPTODATE_VECTOR_V1_EXT), ('ulFlags',ULONG), ('cMaxObjects',ULONG), ('cMaxBytes',ULONG), ('ulExtendedOp',ULONG), ('liFsmoInfo',ULARGE_INTEGER), )
# 4.1.10.2.5 DRS_MSG_GETCHGREQ_V7 ('uuidTransportObj',UUID), ('pmtxReturnAddress',PMTX_ADDR), ('V3',DRS_MSG_GETCHGREQ_V3), ('pPartialAttrSet',PPARTIAL_ATTR_VECTOR_V1_EXT), ('pPartialAttrSetEx1',PPARTIAL_ATTR_VECTOR_V1_EXT), ('PrefixTableDest',SCHEMA_PREFIX_TABLE), )
# 4.1.10.2.6 DRS_MSG_GETCHGREQ_V8 ('uuidDsaObjDest',UUID), ('uuidInvocIdSrc',UUID), ('pNC',PDSNAME), ('usnvecFrom',USN_VECTOR), ('pUpToDateVecDest',PUPTODATE_VECTOR_V1_EXT), ('ulFlags',ULONG), ('cMaxObjects',ULONG), ('cMaxBytes',ULONG), ('ulExtendedOp',ULONG), ('liFsmoInfo',ULARGE_INTEGER), ('pPartialAttrSet',PPARTIAL_ATTR_VECTOR_V1_EXT), ('pPartialAttrSetEx1',PPARTIAL_ATTR_VECTOR_V1_EXT), ('PrefixTableDest',SCHEMA_PREFIX_TABLE), )
# 4.1.10.2.7 DRS_MSG_GETCHGREQ_V10 ('uuidDsaObjDest',UUID), ('uuidInvocIdSrc',UUID), ('pNC',PDSNAME), ('usnvecFrom',USN_VECTOR), ('pUpToDateVecDest',PUPTODATE_VECTOR_V1_EXT), ('ulFlags',ULONG), ('cMaxObjects',ULONG), ('cMaxBytes',ULONG), ('ulExtendedOp',ULONG), ('liFsmoInfo',ULARGE_INTEGER), ('pPartialAttrSet',PPARTIAL_ATTR_VECTOR_V1_EXT), ('pPartialAttrSetEx1',PPARTIAL_ATTR_VECTOR_V1_EXT), ('PrefixTableDest',SCHEMA_PREFIX_TABLE), ('ulMoreFlags',ULONG), )
# 4.1.10.2.1 DRS_MSG_GETCHGREQ ('tag', DWORD), ) 4 : ('V4', DRS_MSG_GETCHGREQ_V4), 5 : ('V5', DRS_MSG_GETCHGREQ_V5), 7 : ('V7', DRS_MSG_GETCHGREQ_V7), 8 : ('V8', DRS_MSG_GETCHGREQ_V8), 10 : ('V10', DRS_MSG_GETCHGREQ_V10), }
# 5.16 ATTRVAL ('valLen',ULONG), ('pVal',PBYTE_ARRAY), )
('Data',ATTRVAL_ARRAY), )
# 5.17 ATTRVALBLOCK ('valCount',ULONG), ('pAVal',PATTRVAL_ARRAY), )
# 5.9 ATTR ('attrTyp',ATTRTYP), ('AttrVal',ATTRVALBLOCK), )
('Data',ATTR_ARRAY), )
# 5.10 ATTRBLOCK ('attrCount',ULONG), ('pAttr',PATTR_ARRAY), )
# 5.53 ENTINF ('pName',PDSNAME), ('ulFlags',ULONG), ('AttrBlock',ATTRBLOCK), )
('Data',ENTINF_ARRAY), )
# 5.154 PROPERTY_META_DATA_EXT ('dwVersion',DWORD), ('timeChanged',DSTIME), ('uuidDsaOriginating',UUID), ('usnOriginating',USN), )
# 5.155 PROPERTY_META_DATA_EXT_VECTOR ('cNumProps',DWORD), ('rgMetaData',PROPERTY_META_DATA_EXT_ARRAY), )
('Data',PROPERTY_META_DATA_EXT_VECTOR), )
# 5.161 REPLENTINFLIST
('pNextEntInf',NDRPOINTER), ('Entinf',ENTINF), ('fIsNCPrefix',BOOL), ('pParentGuidm',PUUID), ('pMetaDataExt',PPROPERTY_META_DATA_EXT_VECTOR), ) # ToDo: Here we should work with getData and fromString because we're cheating with pNextEntInf # Here we're changing the struct so we can represent a linked list with NDR
('Data',REPLENTINFLIST), )
# 4.1.10.2.9 DRS_MSG_GETCHGREPLY_V1 ('uuidDsaObjSrc',UUID), ('uuidInvocIdSrc',UUID), ('pNC',PDSNAME), ('usnvecFrom',USN_VECTOR), ('usnvecTo',USN_VECTOR), ('pUpToDateVecSrcV1',PUPTODATE_VECTOR_V1_EXT), ('PrefixTableSrc',SCHEMA_PREFIX_TABLE), ('ulExtendedRet',EXOP_ERR), ('cNumObjects',ULONG), ('cNumBytes',ULONG), ('pObjects',PREPLENTINFLIST), ('fMoreData',BOOL), )
# 4.1.10.2.15 DRS_COMPRESSED_BLOB ('cbUncompressedSize',DWORD), ('cbCompressedSize',DWORD), ('pbCompressedData',BYTE_ARRAY), )
# 4.1.10.2.10 DRS_MSG_GETCHGREPLY_V2 ('CompressedV1',DRS_COMPRESSED_BLOB), )
# 5.199 UPTODATE_CURSOR_V2 ('uuidDsa',UUID), ('usnHighPropUpdate',USN), ('timeLastSyncSuccess',DSTIME), )
# 5.201 UPTODATE_VECTOR_V2_EXT ('dwVersion',DWORD), ('dwReserved1',DWORD), ('cNumCursors',DWORD), ('dwReserved2',DWORD), ('rgCursors',UPTODATE_CURSOR_V2_ARRAY), )
('Data',UPTODATE_VECTOR_V2_EXT), )
# 5.211 VALUE_META_DATA_EXT_V1 ('timeCreated',DSTIME), ('MetaData',PROPERTY_META_DATA_EXT), )
# 5.215 VALUE_META_DATA_EXT_V3 ('timeCreated',DSTIME), ('MetaData',PROPERTY_META_DATA_EXT), ('unused1',DWORD), ('unused1',DWORD), ('unused1',DWORD), ('timeExpired',DSTIME), )
# 5.167 REPLVALINF_V1 ('pObject',PDSNAME), ('attrTyp',ATTRTYP), ('Aval',ATTRVAL), ('fIsPresent',BOOL), ('MetaData',VALUE_META_DATA_EXT_V1), )
retVal = NDRSTRUCT.fromString(self, data, soFar) #self.dumpRaw() return retVal
('Data', REPLVALINF_V1_ARRAY), )
# 5.168 REPLVALINF_V3 ('pObject', PDSNAME), ('attrTyp', ATTRTYP), ('Aval', ATTRVAL), ('fIsPresent', BOOL), ('MetaData', VALUE_META_DATA_EXT_V3), )
retVal = NDRSTRUCT.fromString(self, data, soFar) # self.dumpRaw() return retVal
('Data', REPLVALINF_V3_ARRAY), )
# 5.169 REPLVALINF_NATIVE
# 4.1.10.2.11 DRS_MSG_GETCHGREPLY_V6 ('uuidDsaObjSrc',UUID), ('uuidInvocIdSrc',UUID), ('pNC',PDSNAME), ('usnvecFrom',USN_VECTOR), ('usnvecTo',USN_VECTOR), ('pUpToDateVecSrc',PUPTODATE_VECTOR_V2_EXT), ('PrefixTableSrc',SCHEMA_PREFIX_TABLE), ('ulExtendedRet',EXOP_ERR), ('cNumObjects',ULONG), ('cNumBytes',ULONG), ('pObjects',PREPLENTINFLIST), ('fMoreData',BOOL), ('cNumNcSizeObjectsc',ULONG), ('cNumNcSizeValues',ULONG), ('cNumValues',DWORD), #('rgValues',PREPLVALINF_V1_ARRAY), # ToDo: Once we find out what's going on with PREPLVALINF_ARRAY get it back # Seems there's something in there that is not being parsed correctly ('rgValues',DWORD), ('dwDRSError',DWORD), )
# 4.1.10.2.14 DRS_COMP_ALG_TYPE
# 4.1.10.2.12 DRS_MSG_GETCHGREPLY_V7 ('dwCompressedVersion',DWORD), ('CompressionAlg',DRS_COMP_ALG_TYPE), ('CompressedAny',DRS_COMPRESSED_BLOB), )
# 4.1.10.2.13 DRS_MSG_GETCHGREPLY_V9 ('uuidDsaObjSrc',UUID), ('uuidInvocIdSrc',UUID), ('pNC',PDSNAME), ('usnvecFrom',USN_VECTOR), ('usnvecTo',USN_VECTOR), ('pUpToDateVecSrc',PUPTODATE_VECTOR_V2_EXT), ('PrefixTableSrc',SCHEMA_PREFIX_TABLE), ('ulExtendedRet',EXOP_ERR), ('cNumObjects',ULONG), ('cNumBytes',ULONG), ('pObjects',PREPLENTINFLIST), ('fMoreData',BOOL), ('cNumNcSizeObjectsc',ULONG), ('cNumNcSizeValues',ULONG), ('cNumValues',DWORD), #('rgValues',PREPLVALINF_V3_ARRAY), # ToDo: Once we find out what's going on with PREPLVALINF_ARRAY get it back # Seems there's something in there that is not being parsed correctly ('rgValues',DWORD), ('dwDRSError',DWORD), )
# 4.1.10.2.14 DRS_MSG_GETCHGREPLY_NATIVE
# 4.1.10.2.8 DRS_MSG_GETCHGREPLY ('tag', DWORD), ) 1 : ('V1', DRS_MSG_GETCHGREPLY_V1), 2 : ('V2', DRS_MSG_GETCHGREPLY_V2), 6 : ('V6', DRS_MSG_GETCHGREPLY_V6), 7 : ('V7', DRS_MSG_GETCHGREPLY_V7), 9 : ('V9', DRS_MSG_GETCHGREPLY_V9), }
# 4.1.27.1.2 DRS_MSG_VERIFYREQ_V1 ('dwFlags',DWORD), ('cNames',DWORD), ('rpNames',PPDSNAME_ARRAY), ('RequiredAttrs',ATTRBLOCK), ('PrefixTable',SCHEMA_PREFIX_TABLE), )
# 4.1.27.1.1 DRS_MSG_VERIFYREQ ('tag', DWORD), ) 1 : ('V1', DRS_MSG_VERIFYREQ_V1), }
# 4.1.27.1.4 DRS_MSG_VERIFYREPLY_V1 ('error',DWORD), ('cNames',DWORD), ('rpEntInf',PENTINF_ARRAY), ('PrefixTable',SCHEMA_PREFIX_TABLE), )
# 4.1.27.1.3 DRS_MSG_VERIFYREPLY ('tag', DWORD), ) 1 : ('V1', DRS_MSG_VERIFYREPLY_V1), }
# 4.1.11.1.2 DRS_MSG_NT4_CHGLOG_REQ_V1 ('dwFlags',DWORD), ('PreferredMaximumLength',DWORD), ('cbRestart',DWORD), ('pRestart',PBYTE_ARRAY), )
# 4.1.11.1.1 DRS_MSG_NT4_CHGLOG_REQ ('tag', DWORD), ) 1 : ('V1', DRS_MSG_NT4_CHGLOG_REQ_V1), }
# 4.1.11.1.5 NT4_REPLICATION_STATE ('SamSerialNumber',LARGE_INTEGER), ('SamCreationTime',LARGE_INTEGER), ('BuiltinSerialNumber',LARGE_INTEGER), ('BuiltinCreationTime',LARGE_INTEGER), ('LsaSerialNumber',LARGE_INTEGER), ('LsaCreationTime',LARGE_INTEGER), )
# 4.1.11.1.4 DRS_MSG_NT4_CHGLOG_REPLY_V1 ('cbRestart',DWORD), ('cbLog',DWORD), ('ReplicationState',NT4_REPLICATION_STATE), ('ActualNtStatus',DWORD), ('pRestart',PBYTE_ARRAY), ('pLog',PBYTE_ARRAY), )
# 4.1.11.1.3 DRS_MSG_NT4_CHGLOG_REPLY ('tag', DWORD), ) 1 : ('V1', DRS_MSG_NT4_CHGLOG_REPLY_V1), }
################################################################################ # RPC CALLS ################################################################################ # 4.1.3 IDL_DRSBind (Opnum 0) ('puuidClientDsa', PUUID), ('pextClient', PDRS_EXTENSIONS), )
('ppextServer', PDRS_EXTENSIONS), ('phDrs', DRS_HANDLE), ('ErrorCode',DWORD), )
# 4.1.25 IDL_DRSUnbind (Opnum 1) ('phDrs', DRS_HANDLE), )
('phDrs', DRS_HANDLE), ('ErrorCode',DWORD), )
# 4.1.10 IDL_DRSGetNCChanges (Opnum 3) ('hDrs', DRS_HANDLE), ('dwInVersion', DWORD), ('pmsgIn', DRS_MSG_GETCHGREQ), )
('pdwOutVersion', DWORD), ('pmsgOut', DRS_MSG_GETCHGREPLY), ('ErrorCode',DWORD), )
# 4.1.27 IDL_DRSVerifyNames (Opnum 8) ('hDrs', DRS_HANDLE), ('dwInVersion', DWORD), ('pmsgIn', DRS_MSG_VERIFYREQ), )
('pdwOutVersion', DWORD), ('pmsgOut', DRS_MSG_VERIFYREPLY), ('ErrorCode',DWORD), ) # 4.1.11 IDL_DRSGetNT4ChangeLog (Opnum 11) ('hDrs', DRS_HANDLE), ('dwInVersion', DWORD), ('pmsgIn', DRS_MSG_NT4_CHGLOG_REQ), )
('pdwOutVersion', DWORD), ('pmsgOut', DRS_MSG_NT4_CHGLOG_REPLY), ('ErrorCode',DWORD), )
# 4.1.4 IDL_DRSCrackNames (Opnum 12) ('hDrs', DRS_HANDLE), ('dwInVersion', DWORD), ('pmsgIn', DRS_MSG_CRACKREQ), )
('pdwOutVersion', DWORD), ('pmsgOut', DRS_MSG_CRACKREPLY), ('ErrorCode',DWORD), )
# 4.1.5 IDL_DRSDomainControllerInfo (Opnum 16) ('hDrs', DRS_HANDLE), ('dwInVersion', DWORD), ('pmsgIn', DRS_MSG_DCINFOREQ), )
('pdwOutVersion', DWORD), ('pmsgOut', DRS_MSG_DCINFOREPLY), ('ErrorCode',DWORD), )
################################################################################ # OPNUMs and their corresponding structures ################################################################################ 0 : (DRSBind,DRSBindResponse ), 1 : (DRSUnbind,DRSUnbindResponse ), 3 : (DRSGetNCChanges,DRSGetNCChangesResponse ), 12: (DRSCrackNames,DRSCrackNamesResponse ), 16: (DRSDomainControllerInfo,DRSDomainControllerInfoResponse ), }
################################################################################ # HELPER FUNCTIONS ################################################################################ return string
else: return string
request = DRSUnbind() request['phDrs'] = hDrs return dce.request(request)
# 2.2.11.1.3 Deriving Key1 and Key2 from a Little-Endian, Unsigned Integer Key # Let I be the little-endian, unsigned integer. # Let I[X] be the Xth byte of I, where I is interpreted as a zero-base-index array of bytes. # Note that because I is in little-endian byte order, I[0] is the least significant byte. # Key1 is a concatenation of the following values: I[0], I[1], I[2], I[3], I[0], I[1], I[2]. # Key2 is a concatenation of the following values: I[3], I[0], I[1], I[2], I[3], I[0], I[1] return transformKey(b''.join(key1)),transformKey(b''.join(key2)) else:
# Is it a Kerberos Session Key? # Extract its contents and move on sessionKey = sessionKey.contents
#chkSum = (binascii.crc32(plainText[4:])) & 0xffffffff #if unpack('<L',plainText[:4])[0] != chkSum: # print "RECEIVED 0x%x" % unpack('<L',plainText[:4])[0] # print "CALCULATED 0x%x" % chkSum
# 5.16.4 ATTRTYP-to-OID Conversion # get the last value in the original OID: the value * after the last '.'
# convert the dotted form of OID into a BER encoded binary * format. # The BER encoding of OID is described in section * 8.19 of [ITUX690]
# get the prefix of the OID else:
# search the prefix in the prefix table, if none found, add # one entry for the new prefix.
# compose the attid # mark it so that it is known to not be the whole lastValue lowerWord += 32768
# separate the ATTRTYP into two parts
# search in the prefix table to find the upperWord, if found, # construct the binary OID by appending lowerWord to the end of # found prefix.
else: lowerWord -= 32768
return None
prefixTable = [] oid0 = '1.2.840.113556.1.4.94' oid1 = '2.5.6.2' oid2 = '1.2.840.113556.1.2.1' oid3 = '1.2.840.113556.1.3.223' oid4 = '1.2.840.113556.1.5.7000.53'
o0 = MakeAttid(prefixTable, oid0) print(hex(o0)) o1 = MakeAttid(prefixTable, oid1) print(hex(o1)) o2 = MakeAttid(prefixTable, oid2) print(hex(o2)) o3 = MakeAttid(prefixTable, oid3) print(hex(o3)) o4 = MakeAttid(prefixTable, oid4) print(hex(o4)) jj = OidFromAttid(prefixTable, o0) print(jj) jj = OidFromAttid(prefixTable, o1) print(jj) jj = OidFromAttid(prefixTable, o2) print(jj) jj = OidFromAttid(prefixTable, o3) print(jj) jj = OidFromAttid(prefixTable, o4) print(jj) |