scapy.layers.spnego module
SPNEGO
Implements parts of:
GSSAPI SPNEGO: RFC4178 > RFC2478
GSSAPI SPNEGO NEGOEX: [MS-NEGOEX]
Note
You will find more complete documentation for this layer over at GSSAPI
- class scapy.layers.spnego.NEGOEX_BYTE_VECTOR(_pkt, /, *, ByteArrayBufferOffset=0, ByteArrayLength=0)[source]
Bases:
Packet
- aliastypes
- fields_desc
Display RFC-like schema
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | BYTEARRAYBUFFEROFFSET | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | BYTEARRAYLENGTH | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Fig. NEGOEX_BYTE_VECTOR
ByteArrayBufferOffset
0
ByteArrayLength
0
- class scapy.layers.spnego.NEGOEX_CHECKSUM(_pkt, /, *, cbHeaderLength=20, ChecksumScheme=1, ChecksumType=None, ChecksumValue=b'')[source]
Bases:
Packet
- aliastypes
- fields_desc
Display RFC-like schema
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | CBHEADERLENGTH | + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | CHECKSUMSCHEME | + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | CHECKSUMTYPE | + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | CHECKSUMVALUE | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Fig. NEGOEX_CHECKSUM
cbHeaderLength
20
ChecksumScheme
1
ChecksumType
None
ChecksumValue
b''
- class scapy.layers.spnego.NEGOEX_EXCHANGE_MESSAGE(_pkt, /, *, Signature=b'NEGOEXTS', MessageType=0, SequenceNum=0, cbHeaderLength=None, cbMessageLength=None, ConversationId=None, AuthScheme=None, ExchangeBufferOffset=0, ExchangeLen=0, Payload=[])[source]
Bases:
_NTLMPayloadPacket
- OFFSET = 64
- aliastypes
- fields_desc
Display RFC-like schema
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | SIGNATURE | + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | MESSAGETYPE | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | SEQUENCENUM | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | CBHEADERLENGTH | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | CBMESSAGELENGTH | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | CONVERSATIONID | + + | | + + | | + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | AUTHSCHEME | + + | | + + | | + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | EXCHANGEBUFFEROFFSET | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | EXCHANGELEN | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | PAYLOAD | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Fig. NEGOEX_EXCHANGE_MESSAGE
Signature
b'NEGOEXTS'
MessageType
0
SequenceNum
0
cbHeaderLength
None
cbMessageLength
None
ConversationId
None
AuthScheme
None
ExchangeBufferOffset
0
ExchangeLen
0
Payload
_NTLMPayloadField
[]
- show_indent = 0
- class scapy.layers.spnego.NEGOEX_EXTENSION_VECTOR(_pkt, /, *, ExtensionArrayOffset=0, ExtensionCount=0)[source]
Bases:
Packet
- aliastypes
- fields_desc
Display RFC-like schema
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | EXTENSIONARRAYOFFSET | + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | EXTENSIONCOUNT | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Fig. NEGOEX_EXTENSION_VECTOR
ExtensionArrayOffset
0
ExtensionCount
0
- class scapy.layers.spnego.NEGOEX_MESSAGE_HEADER(_pkt, /, *, Signature=b'NEGOEXTS', MessageType=0, SequenceNum=0, cbHeaderLength=None, cbMessageLength=None, ConversationId=None)[source]
Bases:
Packet
- aliastypes
- fields_desc
Display RFC-like schema
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | SIGNATURE | + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | MESSAGETYPE | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | SEQUENCENUM | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | CBHEADERLENGTH | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | CBMESSAGELENGTH | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | CONVERSATIONID | + + | | + + | | + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Fig. NEGOEX_MESSAGE_HEADER
Signature
b'NEGOEXTS'
MessageType
0
SequenceNum
0
cbHeaderLength
None
cbMessageLength
None
ConversationId
None
- class scapy.layers.spnego.NEGOEX_NEGO_MESSAGE(_pkt, /, *, Signature=b'NEGOEXTS', MessageType=0, SequenceNum=0, cbHeaderLength=None, cbMessageLength=None, ConversationId=None, Random=b'', ProtocolVersion=0, AuthSchemeBufferOffset=None, AuthSchemeCount=None, ExtensionBufferOffset=None, ExtensionCount=None, Payload=[])[source]
Bases:
_NTLMPayloadPacket
- OFFSET = 92
- aliastypes
- fields_desc
Display RFC-like schema
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | SIGNATURE | + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | MESSAGETYPE | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | SEQUENCENUM | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | CBHEADERLENGTH | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | CBMESSAGELENGTH | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | CONVERSATIONID | + + | | + + | | + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | RANDOM | + + | | + + | | + + | | + + | | + + | | + + | | + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | PROTOCOLVERSION | + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | AUTHSCHEMEBUFFEROFFSET | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | AUTHSCHEMECOUNT | EXTENSIONBUFFEROFFSET | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | EXTENSIONCOUNT | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | PAYLOAD | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Fig. NEGOEX_NEGO_MESSAGE
Signature
b'NEGOEXTS'
MessageType
0
SequenceNum
0
cbHeaderLength
None
cbMessageLength
None
ConversationId
None
Random
b''
ProtocolVersion
0
AuthSchemeBufferOffset
None
AuthSchemeCount
None
ExtensionBufferOffset
None
ExtensionCount
None
Payload
_NTLMPayloadField
[]
- payload_guess
Possible sublayers:
NEGOEX_NEGO_MESSAGE
- show_indent = 0
- class scapy.layers.spnego.NEGOEX_VERIFY_MESSAGE(_pkt, /, *, Signature=b'NEGOEXTS', MessageType=0, SequenceNum=0, cbHeaderLength=None, cbMessageLength=None, ConversationId=None, AuthScheme=None, Checksum=<NEGOEX_CHECKSUM |>)[source]
Bases:
Packet
- aliastypes
- fields_desc
Display RFC-like schema
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | SIGNATURE | + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | MESSAGETYPE | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | SEQUENCENUM | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | CBHEADERLENGTH | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | CBMESSAGELENGTH | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | CONVERSATIONID | + + | | + + | | + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | AUTHSCHEME | + + | | + + | | + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | CHECKSUM | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Fig. NEGOEX_VERIFY_MESSAGE
Signature
b'NEGOEXTS'
MessageType
0
SequenceNum
0
cbHeaderLength
None
cbMessageLength
None
ConversationId
None
AuthScheme
None
Checksum
<NEGOEX_CHECKSUM |>
- show_indent = 0
- class scapy.layers.spnego.SPNEGOSSP(ssps, **kwargs)[source]
Bases:
SSP
The SPNEGO SSP
- Parameters:
ssps – a dict with keys being the SSP class, and the value being a dictionary of the keyword arguments to pass it on init.
Example:
from scapy.layers.ntlm import NTLMSSP from scapy.layers.kerberos import KerberosSSP from scapy.layers.spnego import SPNEGOSSP from scapy.layers.smbserver import smbserver from scapy.libs.rfc3961 import Encryption, Key ssp = SPNEGOSSP([ NTLMSSP( IDENTITIES={ "User1": MD4le("Password1"), "Administrator": MD4le("Password123!"), } ), KerberosSSP( SPN="cifs/server2.domain.local", KEY=Key( Encryption.AES256, key=hex_bytes("5e9255c907b2f7e969ddad816eabbec8f1f7a387c7194ecc98b827bdc9421c2b") ) ) ]) smbserver(ssp=ssp)
- class CONTEXT(supported_ssps, req_flags=None, force_supported_mechtypes=None)[source]
Bases:
CONTEXT
- first_choice
- property flags
- negotiated_mechtype
- req_flags
- requested_mechtypes
- ssp
- sub_context
- supported_mechtypes
- GSS_Init_sec_context(Context: CONTEXT, val=None, req_flags: GSS_C_FLAGS | None = None)[source]
- class STATE(value, names=<not given>, *values, module=None, qualname=None, type=None, start=1, boundary=None)[source]
Bases:
STATE
- CHANGESSP = 2
- FIRST = 1
- NORMAL = 3
- auth_type = 9
- force_supported_mechtypes
- supported_ssps
- class scapy.layers.spnego.SPNEGO_MechListMIC(_pkt, /, *, value=<ASN1_STRING['']>)[source]
Bases:
ASN1_Packet
- ASN1_codec = <ASN1Codec BER[1]>
- ASN1_root = <scapy.asn1fields.ASN1F_STRING object>
- aliastypes
- class scapy.layers.spnego.SPNEGO_MechType(_pkt, /, *, oid=None)[source]
Bases:
ASN1_Packet
- ASN1_codec = <ASN1Codec BER[1]>
- ASN1_root = <scapy.asn1fields.ASN1F_OID object>
- aliastypes
- class scapy.layers.spnego.SPNEGO_MechTypes(_pkt, /, *, mechTypes=None)[source]
Bases:
ASN1_Packet
- ASN1_codec = <ASN1Codec BER[1]>
- ASN1_root = <ASN1F_SEQUENCE_OF mechTypes>
- aliastypes
- class scapy.layers.spnego.SPNEGO_Token(_pkt, /, *, value=None)[source]
Bases:
ASN1_Packet
- ASN1_codec = <ASN1Codec BER[1]>
- ASN1_root = <scapy.layers.spnego._SPNEGO_Token_Field object>
- aliastypes
- class scapy.layers.spnego.SPNEGO_negHints(_pkt, /, *, hintName=<ASN1_GENERAL_STRING['not_defined_in_RFC4178@please_ignore']>, hintAddress=None)[source]
Bases:
ASN1_Packet
- ASN1_codec = <ASN1Codec BER[1]>
- ASN1_root = <ASN1F_SEQUENCE(<scapy.asn1fields.ASN1F_optional object>, <scapy.asn1fields.ASN1F_optional object>)>
- aliastypes
- class scapy.layers.spnego.SPNEGO_negToken(_pkt, /, *, token=<SPNEGO_negTokenInit |>)[source]
Bases:
ASN1_Packet
- ASN1_codec = <ASN1Codec BER[1]>
- ASN1_root = <scapy.asn1fields.ASN1F_CHOICE object>
- aliastypes
- class scapy.layers.spnego.SPNEGO_negTokenInit(_pkt, /, *, mechTypes=None, reqFlags=None, mechToken=None, negHints=None, mechListMIC=None, _mechListMIC=None)[source]
Bases:
ASN1_Packet
- ASN1_codec = <ASN1Codec BER[1]>
- ASN1_root = <ASN1F_SEQUENCE(<scapy.asn1fields.ASN1F_optional object>, <scapy.asn1fields.ASN1F_optional object>, <scapy.asn1fields.ASN1F_optional object>, <scapy.asn1fields.ASN1F_optional object>, <scapy.asn1fields.ASN1F_optional object>, <scapy.asn1fields.ASN1F_optional object>)>
- aliastypes
- class scapy.layers.spnego.SPNEGO_negTokenResp(_pkt, /, *, negResult=0x0 <ASN1_ENUMERATED[0]>, supportedMech=<SPNEGO_MechType |>, responseToken=None, mechListMIC=None)[source]
Bases:
ASN1_Packet
- ASN1_codec = <ASN1Codec BER[1]>
- ASN1_root = <ASN1F_SEQUENCE(<scapy.asn1fields.ASN1F_optional object>, <scapy.asn1fields.ASN1F_optional object>, <scapy.asn1fields.ASN1F_optional object>, <scapy.asn1fields.ASN1F_optional object>)>
- aliastypes