Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
 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'>"
Ejemplo n.º 3
0
 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]
Ejemplo n.º 4
0
    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
Ejemplo n.º 5
0
    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