Example #1
0
    def from_string(self, data):
        Structure.from_string(self, data)

        if self['flags'] & NegotiateFlag.NTLMSSP_TARGET:
            target_name_offset = self['target_name_offset']
            target_name_end = self['target_name_len'] + target_name_offset
            target_name = data[target_name_offset:target_name_end]
        else:
            target_name = ''

        if self['flags'] & NegotiateFlag.NTLMSSP_VERSION:
            version = data[48:56]
        else:
            version = ''

        if self['flags'] & NegotiateFlag.NTLMSSP_TARGET_INFO:
            target_info_fields_len = struct.unpack('<H', data[40:42])[0]
            target_info_fields_offset = struct.unpack('<L', data[44:48])[0]
            target_info_fields_end = target_info_fields_offset + target_info_fields_len
            target_info = TargetInfo(
                data[target_info_fields_offset:target_info_fields_end])
        else:
            target_info = None

        self['target_name'] = target_name
        self['os_version'] = version
        self['target_info_fields'] = target_info
        return self
Example #2
0
    def from_string(self, data):
        Structure.from_string(self, data)
        # [MS-NLMP] page 27
        # Payload data can be present in any order within the Payload field,
        # with variable-length padding before or after the data

        domain_offset = self['domain_offset']
        domain_end = self['domain_len'] + domain_offset
        self['domain_name'] = data[domain_offset:domain_end]

        host_offset = self['host_offset']
        host_end = self['host_len'] + host_offset
        self['host_name'] = data[host_offset:host_end]

        user_offset = self['user_offset']
        user_end = self['user_len'] + user_offset
        self['user_name'] = data[user_offset:user_end]

        ntlm_offset = self['ntlm_offset']
        ntlm_end = self['ntlm_len'] + ntlm_offset
        self['ntlm'] = data[ntlm_offset:ntlm_end]

        lanman_offset = self['lanman_offset']
        lanman_end = self['lanman_len'] + lanman_offset
        self['lanman'] = data[lanman_offset:lanman_end]
Example #3
0
 def __init__(self):
     Structure.__init__(self)
     self['initiator_addtype'] = 0
     self['initiator_address_len'] = 0
     self['acceptor_addrtype'] = 0
     self['acceptor_address_len'] = 0
     self['application_data_len'] = 0
     self['initiator_address'] = ''
     self['acceptor_address'] = ''
     self['application_data'] = ''
Example #4
0
    def from_string(self, data):
        Structure.from_string(self, data)
        # Just in case there's more data after the TargetInfoFields
        # self['TargetInfoFields'] = self['TargetInfoFields'][:self['TargetInfoFields_len']]
        # We gotta process the TargetInfoFields
        #if self['TargetInfoFields_len'] > 0:
        #    av_pairs = AV_PAIRS(self['TargetInfoFields'][:self['TargetInfoFields_len']])
        #    self['TargetInfoFields'] = av_pairs

        return self
Example #5
0
 def __init__(self,
              flags=NegotiateFlag.NTLMSSP_NTLM_KEY,
              domain='',
              host=''):
     """
     Initializes a new NTLM Type 1 Message. This implementation always requires UNICODE. Users should avoid setting
     the legacy OEM and LM_KEY Flags unless they provide an implementation.
     """
     Structure.__init__(self)
     flags |= NegotiateFlag.NTLMSSP_UNICODE
     self['flags'] = flags
     self['domain_name'] = domain
     self['host_name'] = host
     self['os_version'] = b''
Example #6
0
 def __init__(self,
              flags,
              lm_response,
              nt_response,
              domain,
              username,
              session_key=None,
              host_name=None):
     Structure.__init__(self)
     self['flags'] = flags
     self['lanman'] = lm_response
     self['ntlm'] = nt_response
     self['domain_name'] = domain.encode('utf-16le')
     self['user_name'] = username.encode('utf-16le')
     self['host_name'] = b''
     self['version'] = b''
     self['mic'] = b''
     self['session_key'] = session_key
Example #7
0
 def get_data(self):
     if len(self.fields['os_version']) > 0:
         self['flags'] |= NegotiateFlag.NTLMSSP_VERSION
     if (self['flags'] & NegotiateFlag.NTLMSSP_VERSION
         ) == NegotiateFlag.NTLMSSP_VERSION:
         version_len = 8
     else:
         version_len = 0
     if self['target_info_fields'] is not None and type(
             self['target_info_fields']) is not str:
         raw_av_fields = self['target_info_fields'].getData()
         self['target_info_fields'] = raw_av_fields
     return Structure.get_data(self)
Example #8
0
 def get_data(self):
     if len(self.fields['host_name']) > 0:
         self['flags'] |= NegotiateFlag.NTLMSSP_WORKSTATION
     if len(self.fields['domain_name']) > 0:
         self['flags'] |= NegotiateFlag.NTLMSSP_DOMAIN
     #if len(self.fields['os_version']) > 0:
     #    self['flags'] |= NegotiateFlag.NTLMSSP_VERSION
     #if (self['flags'] & NegotiateFlag.NTLMSSP_VERSION) == NegotiateFlag.NTLMSSP_VERSION:
     #    version_len = 8
     #else:
     #   version_len = 0
     self['domain_offset'] = 64 + len(self['mic']) + len(self['version'])
     self['user_offset'] = self['domain_offset'] + len(self['domain_name'])
     self['host_offset'] = self['user_offset'] + len(self['user_name'])
     self['lanman_offset'] = self['host_offset'] + len(self['host_name'])
     self['ntlm_offset'] = self['lanman_offset'] + len(self['lanman'])
     self['session_key_offset'] = self['ntlm_offset'] + len(self['ntlm'])
     return Structure.get_data(self)
Example #9
0
 def get_data(self):
     if len(self.fields['domain_name']) > 0:
         self['flags'] |= NegotiateFlag.NTLMSSP_DOMAIN
     if len(self.fields['host_name']) > 0:
         self['flags'] |= NegotiateFlag.NTLMSSP_WORKSTATION
     if len(self.fields['os_version']) > 0:
         self['flags'] |= NegotiateFlag.NTLMSSP_VERSION
     if (self['flags'] & NegotiateFlag.NTLMSSP_VERSION
         ) == NegotiateFlag.NTLMSSP_VERSION:
         version_len = 8
     else:
         version_len = 0
     if (self['flags'] & NegotiateFlag.NTLMSSP_WORKSTATION
         ) == NegotiateFlag.NTLMSSP_WORKSTATION:
         self['domain_offset'] = 32 + version_len
     if (self['flags'] &
             NegotiateFlag.NTLMSSP_DOMAIN) == NegotiateFlag.NTLMSSP_DOMAIN:
         self['host_offset'] = 32 + len(self['domain_name']) + version_len
     return Structure.get_data(self)
Example #10
0
 def from_string(self, data):
     Structure.__init__(self)
     self['random'] = data[4:8]
     self['checksum'] = data[8:12]
     self['sequence'] = data[12:16]
Example #11
0
 def __init__(self):
     Structure.__init__(self)
Example #12
0
 def __init__(self):
     Structure.__init__(self)
     self['os_version'] = ''