Поля уровня Scapy SMB в пакете запроса на создание? - PullRequest
0 голосов
/ 28 февраля 2020

Я использую Scapy для прослушивания SMB-пакетов, поэтому я могу получить слой NBT, а также заголовок и поля SMB:

    [ NBT Session Packet ]
        TYPE      = Session Message
           RESERVED  = 0
           LENGTH    = 268
    [ SMBNegociate Protocol Request Header ]
              Start     = '\xfeSMB'
              Command   = 64
              Error_Class= 0
              Reserved  = 1
              Error_code= 0
              Flags     = 0
              Flags2    = 0
              PIDHigh   = 5
              Signature = 3145555
              Unused    = 0
              TID       = 5910
              PID       = 0
              UID       = 0
              MID       = 0
              WordCount = 255
              ByteCount = 254
     [ SMB Negotiate Protocol Request Tail ] 
                 BufferFormat= 0
                 BufferData= '\x01'
     [ SMB Negotiate Protocol Request Tail ]
                    BufferFormat= 0
                    BufferData= 

И после этого я получаю много других запросов. хвостовые слои. [Разве это не должно быть Raw data? ]

После Заголовка есть Создание / Запись / Чтение Запроса / Ответа Заголовка , и мне нужно проверить поля там.

Я могу получить код команды в заголовке, но мне нужны имя файла и другие поля, такие как FID под слоем заголовка. Заголовок Scapy SMB: https://scapy.readthedocs.io/en/latest/api/scapy.layers.smb.html#scapy .layers.smb.SMBNegociate_Protocol_Request_Header

Запрос на создание: https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-cifs/24462104-6b35-4fe4-aeaa-7c30cd727bc9

Нужно ли мне создать пользовательский слой? Я не понимаю эти слои Request Tails

Вот что у меня есть: [нюхает с tcp filter]

    if packet[TCP].sport == 445 or packet[TCP].dport == 445:
            # SMB2 packet, NBSS and TCP
            if not packet[TCP].payload is None:
                packet[TCP].decode_payload_as(NBTSession)
            else:
                return


            # Check SMB Header
            if SMBNegociate_Protocol_Request_Header in packet:
                print("SMB Req Header")
                if packet[SMBNegociate_Protocol_Request_Header].Command == 5:
                    print("Command: %d" % packet[SMBNegociate_Protocol_Request_Header].Command)
                    print(str(packet.payload.show()))

            else:
                print(str(packet.payload.show()))

Я довольно новичок в Scapy и Python тоже, может быть, это очевидная проблема. Я открыт для любых предложений. Заранее спасибо!

...