def test_create_message_one_dialect(self): message = SMB3NegotiateRequest() message['security_mode'] = SecurityMode.SMB2_NEGOTIATE_SIGNING_ENABLED message['capabilities'] = 10 message['client_guid'] = uuid.UUID(bytes=b"\x33" * 16) message['dialects'] = [Dialects.SMB_3_1_1] con_req = SMB2NegotiateContextRequest() con_req['context_type'] = \ NegotiateContextType.SMB2_ENCRYPTION_CAPABILITIES enc_cap = SMB2EncryptionCapabilities() enc_cap['ciphers'] = [Ciphers.AES_128_GCM] con_req['data'] = enc_cap message['negotiate_context_list'] = [con_req] expected = b"\x24\x00" \ b"\x01\x00" \ b"\x01\x00" \ b"\x00\x00" \ b"\x0a\x00\x00\x00" \ b"\x33\x33\x33\x33\x33\x33\x33\x33" \ b"\x33\x33\x33\x33\x33\x33\x33\x33" \ b"\x68\x00\x00\x00" \ b"\x01\x00" \ b"\x00\x00" \ b"\x11\x03" \ b"\x00\x00" \ b"\x02\x00\x04\x00\x00\x00\x00\x00" \ b"\x01\x00\x02\x00" \ b"\x00\x00\x00\x00" actual = message.pack() assert len(message) == 56 assert actual == expected
def test_parse_message_invalid_context_type(self): actual = SMB2NegotiateContextRequest() data = b"\x03\x00" \ b"\x04\x00" \ b"\x00\x00\x00\x00" \ b"\x01\x00" \ b"\x02\x00" with pytest.raises(Exception) as exc: actual.unpack(data) assert str(exc.value) == "Enum value 3 does not exist in enum type " \ "<class 'smbprotocol.connection." \ "NegotiateContextType'>"
def test_parse_message(self): actual = SMB2NegotiateContextRequest() data = b"\x02\x00" \ b"\x04\x00" \ b"\x00\x00\x00\x00" \ b"\x01\x00" \ b"\x02\x00" actual.unpack(data) assert len(actual) == 12 assert actual['context_type'].get_value() == \ NegotiateContextType.SMB2_ENCRYPTION_CAPABILITIES assert actual['data_length'].get_value() == 4 assert actual['reserved'].get_value() == 0 assert isinstance(actual['data'].get_value(), SMB2EncryptionCapabilities) assert actual['data']['cipher_count'].get_value() == 1 assert actual['data']['ciphers'].get_value() == [Ciphers.AES_128_GCM]
def test_create_message(self): message = SMB2NegotiateContextRequest() message['context_type'] = \ NegotiateContextType.SMB2_ENCRYPTION_CAPABILITIES enc_cap = SMB2EncryptionCapabilities() enc_cap['ciphers'] = [Ciphers.AES_128_GCM] message['data'] = enc_cap expected = b"\x02\x00" \ b"\x04\x00" \ b"\x00\x00\x00\x00" \ b"\x01\x00" \ b"\x02\x00" \ b"\x00\x00\x00\x00" actual = message.pack() assert len(message) == 16 assert actual == expected
def test_create_message_3_1_1(self): message = SMB2NegotiateResponse() message['security_mode'] = SecurityMode.SMB2_NEGOTIATE_SIGNING_ENABLED message['dialect_revision'] = Dialects.SMB_3_1_1 message['server_guid'] = uuid.UUID(bytes=b"\x11" * 16) message['capabilities'] = 39 message['max_transact_size'] = 8388608 message['max_read_size'] = 8388608 message['max_write_size'] = 8388608 message['system_time'] = datetime(year=2017, month=11, day=15, hour=11, minute=32, second=12, microsecond=1616) message['server_start_time'] = datetime(year=2017, month=11, day=15, hour=11, minute=27, second=26, microsecond=349606) message['buffer'] = b"\x01\x02\x03\x04\x05\x06\x07\x08" \ b"\x09\x10" int_cap = SMB2PreauthIntegrityCapabilities() int_cap['hash_algorithms'] = [HashAlgorithms.SHA_512] int_cap['salt'] = b"\x22" * 32 negotiate_context = SMB2NegotiateContextRequest() negotiate_context['context_type'] = \ NegotiateContextType.SMB2_PREAUTH_INTEGRITY_CAPABILITIES negotiate_context['data'] = int_cap message['negotiate_context_list'] = [negotiate_context] expected = b"\x41\x00" \ b"\x01\x00" \ b"\x11\x03" \ b"\x01\x00" \ b"\x11\x11\x11\x11\x11\x11\x11\x11" \ b"\x11\x11\x11\x11\x11\x11\x11\x11" \ b"\x27\x00\x00\x00" \ b"\x00\x00\x80\x00" \ b"\x00\x00\x80\x00" \ b"\x00\x00\x80\x00" \ b"\x20\xc5\x0d\x61\x05\x5e\xd3\x01" \ b"\x7c\xbb\xca\xb6\x04\x5e\xd3\x01" \ b"\x80\x00" \ b"\x0a\x00" \ b"\x90\x00\x00\x00" \ b"\x01\x02\x03\x04\x05\x06\x07\x08" \ b"\x09\x10" \ b"\x00\x00\x00\x00\x00\x00" \ b"\x01\x00\x26\x00\x00\x00\x00\x00" \ b"\x01\x00\x20\x00\x01\x00\x22\x22" \ b"\x22\x22\x22\x22\x22\x22\x22\x22" \ b"\x22\x22\x22\x22\x22\x22\x22\x22" \ b"\x22\x22\x22\x22\x22\x22\x22\x22" \ b"\x22\x22\x22\x22\x22\x22" \ b"\x00\x00" actual = message.pack() assert len(message) == 128 assert actual == expected