Как перевести RAW LOAD из scapy в нотацию KERBEROS, используя python

У меня есть пакет Kerberos перехвата с использованием scapy:

###[ Ethernet ]###
  dst       = 20:6a:8a:0c:1e:3f
  src       = 00:25:64:a1:2a:9d
  type      = 0x800
###[ IP ]###
     version   = 4L
     ihl       = 5L
     tos       = 0x0
     len       = 213
     id        = 48219
     flags     = DF
     frag      = 0L
     ttl       = 64
     proto     = tcp
     chksum    = 0x4aaf
     src       = 192.168.88.224
     dst       = 192.168.88.231
     \options   \
###[ TCP ]###
        sport     = 34856
        dport     = kerberos
        seq       = 2748677979
        ack       = 527108396
        dataofs   = 8L
        reserved  = 0L
        flags     = PA
        window    = 229
        chksum    = 0x6ab9
        urgptr    = 0
        options   = [('NOP', None), ('NOP', None), ('Timestamp', (8241937, 896410))]
###[ Raw ]###
           load      = '\x00\x00\x00\x9dj\x81\x9a0\x81\x97\xa1\x03\x02\x01\x05\xa2\x03\x02\x01\n\xa3\x0e0\x0c0\n\xa1\x04\x02\x02\x00\x95\xa2\x02\x04\x00\xa4{0y\xa0\x07\x03\x05\x00@\x00\x00\x10\xa1\x120\x10\xa0\x03\x02\x01\x01\xa1\t0\x07\x1b\x05admin\xa2\n\x1b\x08TEST.LAN\xa3\x1d0\x1b\xa0\x03\x02\x01\x02\xa1\x140\x12\x1b\x06krbtgt\x1b\x08TEST.LAN\xa5\x11\x18\x0f20160408162022Z\xa7\x06\x02\x04\x1f\xf2f\x81\xa8\x140\x12\x02\x01\x12\x02\x01\x11\x02\x01\x10\x02\x01\x17\x02\x01\x19\x02\x01\x1a'

И мне нужно перевести (Parses) раздел [Raw] load =\x00\x00\x ... так, как это может понравиться Wireshark, потому что я хочу манипулировать данными, хранящимися в пакете, и отправлять пакет другим измененным получателям. Я знаю, что может быть использована библиотека ASN1, но я не знаю, как. Спасибо за любую помощь

2 ответа

Вы должны быть в состоянии восстановить структуры данных Kerberos из сериализованной формы, скомпилировав спецификацию Kerberos ASN.1 в модуль pyasn1 (Python) с помощью инструмента asn1ate, а затем запустив декодер pyasn1 против вашего захвата. Это преобразует данные Kerberos в живые объекты Python, которые можно изменить в памяти и повторно сериализовать обратно в последовательность октетов.

Некоторые примеры сценариев, декодирующих другие протоколы, можно найти здесь.

Забавный факт: Scapy добавил поддержку Kerberos (документ) в версии 2.5.0!

Вот пример:

      >>> pkt[TCP].payload.show()
###[ KerberosTCPHeader ]### 
len       = 305
###[ Kerberos ]### 
    \root      \
    |###[ KRB_AS_REQ ]### 
    |  pvno      = 0x5 <ASN1_INTEGER[5]>
    |  msgType   = 'AS-REQ' 0xa <ASN1_INTEGER[10]>
    |  \padata    \
    |   |###[ PADATA ]### 
    |   |  padataType= 'PA-ENC-TIMESTAMP' 0x2 <ASN1_INTEGER[2]>
    |   |  \padataValue\
    |   |   |###[ EncryptedData ]### 
    |   |   |  etype     = 'AES-256' 0x12 <ASN1_INTEGER[18]>
    |   |   |  kvno      = None
    |   |   |  cipher    = <ASN1_STRING[b"HHM\xec\xb0\x1c\x9bb\xa1\xca\xbf\xbc?-\x1e\xd8Z\xa5\xe0\x93\xba\x83X\xa8\xce\xa3MC\x93\xaf\x93\xbf!\x1e'O\xa5\x8e\x81Hx\xdb\x9f\rz(\xd9Ns'f\r\xb4\xf3pK"]>
    |   |###[ PADATA ]### 
    |   |  padataType= 'PA-PAC-REQUEST' 0x80 <ASN1_INTEGER[128]>
    |   |  \padataValue\
    |   |   |###[ PA_PAC_REQUEST ]### 
    |   |   |  includePac= True <ASN1_BOOLEAN[-1]>
    |  \reqBody   \
    |   |###[ KRB_KDC_REQ_BODY ]### 
    |   |  kdcOptions= forwardable, renewable, canonicalize, renewable-ok <ASN1_BIT_STRING[0100000010...0000010000]=b'@\x81\x00\x10' (0 unused bit)>
    |   |  \cname     \
    |   |   |###[ PrincipalName ]### 
    |   |   |  nameType  = 'NT-PRINCIPAL' 0x1 <ASN1_INTEGER[1]>
    |   |   |  nameString= [<ASN1_GENERAL_STRING[b'win1$']>]
    |   |  realm     = <ASN1_GENERAL_STRING[b'DOMAIN.LOCAL']>
    |   |  \sname     \
    |   |   |###[ PrincipalName ]### 
    |   |   |  nameType  = 'NT-SRV-INST' 0x2 <ASN1_INTEGER[2]>
    |   |   |  nameString= [<ASN1_GENERAL_STRING[b'krbtgt']>, <ASN1_GENERAL_STRING[b'DOMAIN.LOCAL']>]
    |   |  from      = None
    |   |  till      = 2037-09-13 02:48:05 UTC <ASN1_GENERALIZED_TIME['20370913024805Z']>
    |   |  rtime     = 2037-09-13 02:48:05 UTC <ASN1_GENERALIZED_TIME['20370913024805Z']>
    |   |  nonce     = 0x701cc5d1 <ASN1_INTEGER[1880933841]>
    |   |  etype     = [0x12 <ASN1_INTEGER[18]>, 0x11 <ASN1_INTEGER[17]>, 0x17 <ASN1_INTEGER[23]>, 0x18 <ASN1_INTEGER[24]>, -0x87 <ASN1_INTEGER[-135]>, 0x3 <ASN1_INTEGER[3]>]
    |   |  \addresses \
    |   |   |###[ HostAddress ]### 
    |   |   |  addrType  = 'NetBios' 0x14 <ASN1_INTEGER[20]>
    |   |   |  address   = <ASN1_STRING[b'WIN1            ']>
    |   |  encAuthorizationData= None
    |   |  additionalTickets= None
Другие вопросы по тегам