Example #1
0
 def __init__(self):
     create_con_req = smbprotocol.create_contexts.SMB2CreateContextRequest
     self.fields = OrderedDict([
         ('structure_size', IntField(size=2, default=89)),
         ('oplock_level', EnumField(size=1,
                                    enum_type=RequestedOplockLevel)),
         ('flag', FlagField(size=1, flag_type=FileFlags)),
         ('create_action', EnumField(size=4, enum_type=CreateAction)),
         ('creation_time', DateTimeField(size=8)),
         ('last_access_time', DateTimeField(size=8)),
         ('last_write_time', DateTimeField(size=8)),
         ('change_time', DateTimeField(size=8)),
         ('allocation_size', IntField(size=8)),
         ('end_of_file', IntField(size=8)),
         ('file_attributes', FlagField(size=4, flag_type=FileAttributes)),
         ('reserved2', IntField(size=4)), ('file_id', BytesField(size=16)),
         ('create_contexts_offset',
          IntField(size=4,
                   default=lambda s: self._create_contexts_offset(s))),
         ('create_contexts_length',
          IntField(size=4, default=lambda s: len(s['buffer']))),
         ('buffer',
          ListField(
              size=lambda s: s['create_contexts_length'].get_value(),
              list_type=StructureField(structure_type=create_con_req),
              unpack_func=lambda s, d: self._buffer_context_list(s, d)))
     ])
     super(SMB2CreateResponse, self).__init__()
Example #2
0
    def __init__(self):
        self.fields = OrderedDict([
            ('version_number', IntField(size=2, default=3)),
            ('size', IntField(size=2)),
            ('server_type',
             FlagField(size=2, flag_type=DFSServerTypes, flag_strict=False)),
            ('referral_entry_flags',
             FlagField(size=2,
                       flag_type=DFSReferralEntryFlags,
                       flag_strict=False)),
            ('time_to_live', IntField(size=4)),

            # The follow fields depend on the ReferralEntryFlags, the actual field names are when the entry is not a
            # NameListReferral.
            ('dfs_path_offset', IntField(size=2)),  # SpecialNameOffset
            ('dfs_alternate_path_offset',
             IntField(size=2)),  # NumberOfExpandedNames
            ('network_address_offset', IntField(size=2)),  # ExpandedNameOffset
            ('service_site_guid',
             BytesField(size=lambda s: s['size'].get_value() - 18)),  # Padding
        ])
        self.dfs_path = None
        self.dfs_alternate_path = None
        self.network_address = None
        super(DFSReferralEntryV3, self).__init__()
 def __init__(self):
     self.fields = OrderedDict([
         ('ace_type', EnumField(
             size=1,
             default=AceType.SYSTEM_AUDIT_ACE_TYPE,
             enum_type=AceType
         )),
         ('ace_flags', FlagField(
             size=1,
             flag_type=AceFlags
         )),
         ('ace_size', IntField(
             size=2,
             default=lambda s: 8 + len(s['sid'])
         )),
         ('mask', FlagField(
             size=4,
             flag_type=AccessMask,
             flag_strict=False
         )),
         ('sid', StructureField(
             structure_type=SIDPacket
         ))
     ])
     super(SystemAuditAce, self).__init__()
Example #4
0
 def __init__(self):
     self.fields = OrderedDict([
         ('structure_size', IntField(size=2, default=49)),
         (
             'data_offset',
             IntField(  # offset to the buffer field
                 size=2,
                 default=0x70  # seems to be hardcoded to this value
             )),
         ('length', IntField(size=4, default=lambda s: len(s['buffer']))),
         ('offset', IntField(size=8)),  # the offset in the file of the data
         ('file_id', BytesField(size=16)),
         ('channel', FlagField(size=4, flag_type=ReadWriteChannel)),
         ('remaining_bytes', IntField(size=4)),
         ('write_channel_info_offset',
          IntField(
              size=2,
              default=lambda s: self._get_write_channel_info_offset(s))),
         ('write_channel_info_length',
          IntField(size=2,
                   default=lambda s: len(s['buffer_channel_info']))),
         ('flags', FlagField(size=4, flag_type=WriteFlags)),
         ('buffer', BytesField(size=lambda s: s['length'].get_value())),
         ('buffer_channel_info',
          BytesField(
              size=lambda s: s['write_channel_info_length'].get_value()))
     ])
     super(SMB2WriteRequest, self).__init__()
Example #5
0
 def __init__(self):
     self.fields = OrderedDict([
         ('lease_key', BytesField(size=16)),
         ('lease_state', FlagField(size=4, flag_type=LeaseState)),
         ('lease_flags', FlagField(size=4, flag_type=LeaseResponseFlags)),
         ('lease_duration', IntField(size=8))
     ])
     super(SMB2CreateResponseLease, self).__init__()
Example #6
0
 def __init__(self):
     self.fields = OrderedDict([
         ('lease_key', BytesField(size=16)),
         ('lease_state', FlagField(size=4, flag_type=LeaseState)),
         ('lease_flags', FlagField(size=4, flag_type=LeaseRequestFlags)),
         ('lease_duration', IntField(size=8)),
         ('parent_lease_key', BytesField(size=16)),
         ('epoch', BytesField(size=2)), ('reserved', IntField(size=2))
     ])
     super(SMB2CreateRequestLeaseV2, self).__init__()
Example #7
0
 def __init__(self):
     self.fields = OrderedDict([
         ('service_type',
          FlagField(size=4, flag_type=ServiceType, flag_strict=False)),
         ('current_state', EnumField(size=4, enum_type=CurrentState)),
         ('controls_accepted',
          FlagField(size=4, flag_type=ControlsAccepted, flag_strict=False)),
         ('win32_exit_code', IntField(size=4)),
         ('service_specified_exit_code', IntField(size=4)),
         ('check_point', IntField(size=4)), ('wait_hint', IntField(size=4))
     ])
     super(ServiceStatus, self).__init__()
Example #8
0
 def __init__(self):
     self.fields = OrderedDict([
         ('structure_size', IntField(size=2, default=60)),
         ('flags', FlagField(size=2, flag_type=CloseFlags)),
         ('reserved', IntField(size=4)), ('creation_time', DateTimeField()),
         ('last_access_time', DateTimeField()),
         ('last_write_time', DateTimeField()),
         ('change_time', DateTimeField()),
         ('allocation_size', IntField(size=8)),
         ('end_of_file', IntField(size=8)),
         ('file_attributes', FlagField(size=4, flag_type=FileAttributes))
     ])
     super(SMB2CloseResponse, self).__init__()
Example #9
0
 def __init__(self):
     # pep 80 char issues force me to define this here
     create_con_req = smbprotocol.create_contexts.SMB2CreateContextRequest
     self.fields = OrderedDict([
         ('structure_size', IntField(
             size=2,
             default=57,
         )),
         ('security_flags', IntField(size=1)),
         ('requested_oplock_level',
          EnumField(size=1, enum_type=RequestedOplockLevel)),
         ('impersonation_level',
          EnumField(size=4, enum_type=ImpersonationLevel)),
         ('smb_create_flags', IntField(size=8)),
         ('reserved', IntField(size=8)),
         ('desired_access', IntField(size=4)),
         ('file_attributes', IntField(size=4)),
         ('share_access', FlagField(size=4, flag_type=ShareAccess)),
         ('create_disposition',
          EnumField(size=4, enum_type=CreateDisposition)),
         ('create_options', FlagField(size=4, flag_type=CreateOptions)),
         (
             'name_offset',
             IntField(
                 size=2,
                 default=120  # (header size 64) + (structure size 56)
             )),
         ('name_length',
          IntField(size=2, default=lambda s: self._name_length(s))),
         ('create_contexts_offset',
          IntField(size=4,
                   default=lambda s: self._create_contexts_offset(s))),
         ('create_contexts_length',
          IntField(size=4, default=lambda s: len(s['buffer_contexts']))),
         # Technically these are all under buffer but we split it to make
         # things easier
         ('buffer_path',
          BytesField(size=lambda s: self._buffer_path_size(s), )),
         ('padding',
          BytesField(size=lambda s: self._padding_size(s),
                     default=lambda s: b"\x00" * self._padding_size(s))),
         ('buffer_contexts',
          ListField(
              size=lambda s: s['create_contexts_length'].get_value(),
              list_type=StructureField(structure_type=create_con_req),
              unpack_func=lambda s, d: self._buffer_context_list(s, d)))
     ])
     super(SMB2CreateRequest, self).__init__()
Example #10
0
 def __init__(self):
     self.fields = OrderedDict([
         # 0 if no more entries, otherwise offset after ea_value
         ('next_entry_offset', IntField(size=4)),
         ('flags', FlagField(
             size=1,
             flag_type=EAFlags
         )),
         ('ea_name_length', IntField(
             size=1,
             default=lambda s: len(s['ea_name']) - 1  # minus \x00
         )),
         ('ea_value_length', IntField(
             size=2,
             default=lambda s: len(s['ea_value'])
         )),
         # ea_name is ASCII byte encoded and needs a null terminator '\x00'
         ('ea_name', BytesField(
             size=lambda s: s['ea_name_length'].get_value() + 1
         )),
         ('ea_value', BytesField(
             size=lambda s: s['ea_value_length'].get_value()
         )),
         # not actually a field but each list entry must start at the 4 byte
         # alignment
         ('padding', BytesField(
             size=lambda s: self._padding_size(s),
             default=lambda s: b"\x00" * self._padding_size(s)
         ))
     ])
     super(SMB2CreateEABuffer, self).__init__()
Example #11
0
 def __init__(self):
     self.fields = OrderedDict([('file_id', BytesField(size=16)),
                                ('create_guid', UuidField(size=16)),
                                ('flags',
                                 FlagField(size=4,
                                           flag_type=DurableHandleFlags))])
     super(SMB2CreateDurableHandleReconnectV2, self).__init__()
Example #12
0
 def __init__(self):
     self.fields = OrderedDict([
         ('rpc_vers', IntField(size=1, default=5)),
         ('rpc_vers_minor', IntField(size=1, default=0)),
         ('ptype', EnumField(size=1, enum_type=PType, default=PType.BIND)),
         ('pfx_flags', FlagField(size=1, flag_type=PFlags)),
         ('packed_drep',
          StructureField(size=4, structure_type=DataRepresentationFormat)),
         ('frag_length', IntField(size=2, default=lambda s: len(s))),
         ('auth_length',
          IntField(size=2, default=lambda s: len(s['auth_verifier']))),
         ('call_id', IntField(size=4)),
         ('max_xmit_frag', IntField(size=2, default=4280)),
         ('max_recv_frag', IntField(size=2, default=4280)),
         ('assoc_group_id', IntField(size=4)),
         # p_context_list_t
         ('n_context_elem',
          IntField(size=1,
                   default=lambda s: len(s['context_elems'].get_value()))),
         ('reserved', IntField(size=1)),
         ('reserved2', IntField(size=2)),
         ('context_elems',
          ListField(
              list_count=lambda s: s['n_context_elem'].get_value(),
              list_type=StructureField(structure_type=ContextElement),
              unpack_func=lambda s, d: self._unpack_context_elems(s, d))),
         ('auth_verifier',
          BytesField(size=lambda s: s['auth_length'].get_value()))
     ])
     super(BindPDU, self).__init__()
Example #13
0
 def __init__(self):
     self.fields = OrderedDict([
         ('max_referral_level', IntField(size=2, default=4)),
         ('request_flags',
          FlagField(size=2, flag_type=DFSReferralRequestFlags)),
         ('request_data_length',
          IntField(
              size=4,
              default=lambda s: 4 + s['request_file_name_length'].get_value(
              ) + s['site_name_length'].get_value(),
          )),
         ('request_file_name_length',
          IntField(
              size=2,
              default=lambda s: len(s['request_file_name']),
          )),
         ('request_file_name',
          TextField(
              null_terminated=True,
              size=lambda s: s['request_file_name_length'].get_value(),
          )),
         ('site_name_length',
          IntField(
              size=2,
              default=lambda s: len(s['site_name']),
          )),
         ('site_name',
          TextField(
              null_terminated=True,
              size=lambda s: s['site_name_length'].get_value(),
          )),
     ])
     super(DFSReferralRequestEx, self).__init__()
Example #14
0
 def __init__(self):
     self.fields = OrderedDict([
         ('protocol_id', BytesField(
             size=4,
             default=b"\xfeSMB",
         )),
         ('structure_size', IntField(
             size=2,
             default=64,
         )),
         ('credit_charge', IntField(size=2)),
         ('channel_sequence', IntField(size=2)),
         ('reserved', IntField(size=2)),
         ('command', EnumField(
             size=2,
             enum_type=Commands
         )),
         ('credit_request', IntField(size=2)),
         ('flags', FlagField(
             size=4,
             flag_type=Smb2Flags,
         )),
         ('next_command', IntField(size=4)),
         ('message_id', IntField(size=8)),
         ('process_id', IntField(size=4)),
         ('tree_id', IntField(size=4)),
         ('session_id', IntField(size=8)),
         ('signature', BytesField(
             size=16,
             default=b"\x00" * 16,
         )),
         ('data', BytesField())
     ])
     super(SMB2HeaderRequest, self).__init__()
Example #15
0
 def __init__(self):
     self.fields = OrderedDict([
         ('structure_size', IntField(
             size=2,
             default=33
         )),
         ('file_information_class', EnumField(
             size=1,
             enum_type=FileInformationClass
         )),
         ('flags', FlagField(
             size=1,
             flag_type=QueryDirectoryFlags
         )),
         ('file_index', IntField(size=4)),
         ('file_id', BytesField(size=16)),
         ('file_name_offset', IntField(
             size=2,
             default=lambda s: 0 if len(s['buffer']) == 0 else 96
         )),
         ('file_name_length', IntField(
             size=2,
             default=lambda s: len(s['buffer'])
         )),
         ('output_buffer_length', IntField(size=4)),
         # UTF-16-LE encoded search pattern
         ('buffer', BytesField(
             size=lambda s: s['file_name_length'].get_value()
         ))
     ])
     super(SMB2QueryDirectoryRequest, self).__init__()
Example #16
0
 def __init__(self):
     self.fields = OrderedDict([
         ('structure_size', IntField(
             size=2,
             default=9,
         )),
         ('session_flags', FlagField(
             size=2,
             flag_type=SessionFlags,
         )),
         (
             'security_buffer_offset',
             IntField(
                 size=2,
                 default=72,  # (header size 64) + (response size 8)
             )),
         ('security_buffer_length',
          IntField(
              size=2,
              default=lambda s: len(s['buffer']),
          )),
         ('buffer',
          BytesField(
              size=lambda s: s['security_buffer_length'].get_value(), ))
     ])
     super(SMB2SessionSetupResponse, self).__init__()
Example #17
0
 def __init__(self):
     self.fields = OrderedDict([
         ('structure_size', IntField(
             size=2,
             default=25,
         )),
         ('flags', IntField(size=1)),
         ('security_mode', EnumField(
             size=1,
             enum_type=SecurityMode,
         )),
         ('capabilities', FlagField(
             size=4,
             flag_type=Capabilities,
         )),
         ('channel', IntField(size=4)),
         (
             'security_buffer_offset',
             IntField(
                 size=2,
                 default=88,  # (header size 64) + (response size 24)
             )),
         ('security_buffer_length',
          IntField(
              size=2,
              default=lambda s: len(s['buffer']),
          )),
         ('previous_session_id', IntField(size=8)),
         ('buffer',
          BytesField(
              size=lambda s: s['security_buffer_length'].get_value(), )),
     ])
     super(SMB2SessionSetupRequest, self).__init__()
Example #18
0
 def __init__(self):
     self.fields = OrderedDict([
         ('next_entry_offset', IntField(size=4)),
         ('file_index', IntField(size=4)),
         ('creation_time', DateTimeField(size=8)),
         ('last_access_time', DateTimeField(size=8)),
         ('last_write_time', DateTimeField(size=8)),
         ('change_time', DateTimeField(size=8)),
         ('end_of_file', IntField(size=8)),
         ('allocation_size', IntField(size=8)),
         ('file_attributes', FlagField(size=4, flag_type=FileAttributes)),
         ('file_name_length',
          IntField(size=4, default=lambda s: len(s['file_name']))),
         ('ea_size', IntField(size=4)),
         ('short_name_length',
          IntField(size=1, default=lambda s: len(s['short_name']))),
         ('reserved1', IntField(size=1)),
         ('short_name',
          BytesField(size=lambda s: s['short_name_length'].get_value())),
         ('short_name_padding',
          BytesField(size=lambda s: 24 - len(s['short_name']),
                     default=lambda s: b"\x00" *
                     (24 - len(s['short_name'])))),
         ('reserved2', IntField(size=2)), ('file_id', IntField(size=8)),
         ('file_name',
          BytesField(size=lambda s: s['file_name_length'].get_value()))
     ])
     super(FileIdBothDirectoryInformation, self).__init__()
Example #19
0
 def __init__(self):
     self.fields = OrderedDict([
         ('structure_size', IntField(size=2, default=24)),
         ('flags', FlagField(size=2, flag_type=CloseFlags)),
         ('reserved', IntField(size=4)), ('file_id', BytesField(size=16))
     ])
     super(SMB2CloseRequest, self).__init__()
Example #20
0
 def __init__(self):
     self.fields = OrderedDict([
         ('structure_size', IntField(size=2, default=16)),
         ('share_type', EnumField(
             size=1,
             enum_type=ShareType,
         )), ('reserved', IntField(size=1)),
         ('share_flags', FlagField(
             size=4,
             flag_type=ShareFlags,
         )),
         ('capabilities', FlagField(
             size=4,
             flag_type=ShareCapabilities,
         )), ('maximal_access', IntField(size=4))
     ])
     super(SMB2TreeConnectResponse, self).__init__()
Example #21
0
 def __init__(self):
     self.fields = OrderedDict([
         ('mode', FlagField(
             size=4,
             flag_type=ModeInformation,
         )),
     ])
     super(FileModeInformation, self).__init__()
Example #22
0
 def __init__(self):
     self.fields = OrderedDict([
         ('version_number', IntField(size=2, default=2)),
         ('size', IntField(size=2)),
         ('server_type', FlagField(size=2, flag_type=DFSServerTypes)),
         ('referral_entry_flags',
          FlagField(size=2, flag_type=DFSReferralEntryFlags)),
         ('proximity', IntField(size=4)),
         ('time_to_live', IntField(size=4)),
         ('dfs_path_offset', IntField(size=2)),
         ('dfs_alternate_path_offset', IntField(size=2)),
         ('network_address_offset', IntField(size=2)),
     ])
     self.dfs_path = None
     self.dfs_alternate_path = None
     self.network_address = None
     super(DFSReferralEntryV2, self).__init__()
Example #23
0
 def __init__(self):
     self.fields = OrderedDict([
         # timeout in milliseconds
         ('timeout', IntField(size=4)),
         ('flags', FlagField(size=4, flag_type=DurableHandleFlags)),
         ('reserved', IntField(size=8)),
         ('create_guid', UuidField(size=16))
     ])
     super(SMB2CreateDurableHandleRequestV2, self).__init__()
Example #24
0
 def __init__(self):
     self.fields = OrderedDict([
         ('timeout', IntField(size=4)),
         ('flags', FlagField(
             size=4,
             flag_type=DurableHandleFlags
         ))
     ])
     super(SMB2CreateDurableHandleResponseV2, self).__init__()
Example #25
0
 def __init__(self):
     self.fields = OrderedDict([
         ('field',
          FlagField(size=4,
                    flag_type=Capabilities,
                    default=Capabilities.SMB2_GLOBAL_CAP_LEASING
                    | Capabilities.SMB2_GLOBAL_CAP_ENCRYPTION)),
     ])
     super(TestFlagField.StructureTest, self).__init__()
 def __init__(self):
     self.fields = OrderedDict([
         ('structure_size', IntField(
             size=2,
             default=32,
         )),
         ('flags', FlagField(
             size=2,
             flag_type=ChangeNotifyFlags,
         )),
         ('output_buffer_length', IntField(size=4)),
         ('file_id', BytesField(size=16)),
         ('completion_filter', FlagField(
             size=4,
             flag_type=CompletionFilter,
         )),
         ('reserved', IntField(size=4)),
     ])
     super(SMB2ChangeNotifyRequest, self).__init__()
Example #27
0
 def __init__(self):
     self.fields = OrderedDict([
         ('version_number', IntField(size=2, default=1)),
         ('size', IntField(size=2)),
         ('server_type', EnumField(size=2, enum_type=DFSServerTypes)),
         ('referral_entry_flags',
          FlagField(size=2, flag_type=DFSReferralEntryFlags)),
         ('share_name', TextField(null_terminated=True)),
     ])
     super(DFSReferralEntryV1, self).__init__()
Example #28
0
 def __init__(self):
     self.fields = OrderedDict([
         ('capabilities', FlagField(
             size=4,
             flag_type=Capabilities,
         )), ('guid', UuidField()),
         ('security_mode',
          EnumField(size=2, enum_type=SecurityMode, enum_strict=False)),
         ('dialect', EnumField(size=2, enum_type=Dialects))
     ])
     super(SMB2ValidateNegotiateInfoResponse, self).__init__()
Example #29
0
 def __init__(self):
     self.fields = OrderedDict([
         # 0 if no more network interfaces
         ('next', IntField(size=4)),
         ('if_index', IntField(size=4)),
         ('capability', FlagField(size=4, flag_type=IfCapability)),
         ('reserved', IntField(size=4)),
         ('link_speed', IntField(size=8)),
         ('sock_addr_storage',
          StructureField(size=128, structure_type=SockAddrStorage))
     ])
     super(SMB2NetworkInterfaceInfo, self).__init__()
Example #30
0
 def __init__(self):
     self.fields = OrderedDict([
         ('structure_size', IntField(
             size=2,
             default=49
         )),
         ('padding', IntField(size=1)),
         ('flags', FlagField(
             size=1,
             flag_type=ReadFlags
         )),
         ('length', IntField(
             size=4
         )),
         ('offset', IntField(
             size=8
         )),
         ('file_id', BytesField(size=16)),
         ('minimum_count', IntField(
             size=4
         )),
         ('channel', FlagField(
             size=4,
             flag_type=ReadWriteChannel
         )),
         ('remaining_bytes', IntField(size=4)),
         ('read_channel_info_offset', IntField(
             size=2,
             default=lambda s: self._get_read_channel_info_offset(s)
         )),
         ('read_channel_info_length', IntField(
             size=2,
             default=lambda s: self._get_read_channel_info_length(s)
         )),
         ('buffer', BytesField(
             size=lambda s: self._get_buffer_length(s),
             default=b"\x00"
         ))
     ])
     super(SMB2ReadRequest, self).__init__()