带有 SSLv2Record 的 Scapy Send/Sniff 数据包未正确解析

Scapy Send/Sniff Packet with SSLv2Record not Parsed Correctly

我在 scapy 中有这样一个数据包:

###[ IP ]###
  version= 4
  ihl= None
  tos= 0x0
  len= None
  id= 1
  flags=
  frag= 0
  ttl= 64
  proto= tcp
  chksum= None
  src= 127.0.0.1
  dst= 127.0.0.1
  \options\
###[ TCP ]###
 sport= 50034
 dport= https
 seq= 0
 ack= 0
 dataofs= None
 reserved= 0
 flags= S
 window= 8192
 chksum= None
 urgptr= 0
 options= {}
###[ SSL/TLS ]###
    \records\
     |###[ SSLv2 Record ]###
     |  length= 0x591
     |  content_type= 5
     |###[ Raw ]###
     |  load= '\xbf'

我做 send(packet) 然后在另一个终端(在同一台机器上),我是 运行

 a = sniff(filter = "port https", prn = lambda x:x.summary())

当我打印出收到的数据包时,它看起来像这样:

###[ Ethernet ]###
  dst= ff:ff:ff:ff:ff:ff
  src= 00:00:00:00:00:00
  type= 0x800
###[ IP ]###
  version= 4L
  ihl= 5L
  tos= 0x0
  len= 44
  id= 1
  flags=
  frag= 0L
  ttl= 64
  proto= tcp
  chksum= 0x7cc9
  src= 127.0.0.1
  dst= 127.0.0.1
  \options\
###[ TCP ]###
    sport= 50034
    dport= https
    seq= 0
    ack= 0
    dataofs= 5L
    reserved= 0L
    flags= S
    window= 8192
    chksum= 0xc15e
    urgptr= 0
    options= []
###[ SSL/TLS ]###
       \records\
###[ Raw ]###
          load= '\x05\x91\x05\xbf'

主要问题是 SSLv2Record 在数据包被嗅探后没有出现。 SSL/TLS 字段中records 列表的内容完全关闭。谁看过这个吗?如果我需要添加更多详细信息,请告诉我。

我 100% 确定我在嗅探后打印出的数据包是正确的数据包。

我相信我正在为这种类型的数据包使用正确的发送(只是发送,而不是 sendp 等)。我已经能够毫无问题地发送和嗅探没有 SSLv2Record 字段的其他数据包。

我是否发送或接收了这个数据包不正确?

这实际上是 scapy-ssl_tls 中的一个错误,已通过 PR#76 解决,其中 SSLv2Record 层无法正确序列化对象。你的数据包被序列化为 \x05\x91\x05\xbf 而它应该是 \x85\x91\x05\xbf。不同之处在于,对于有效的 SSLv2 记录,必须设置长度的 MSB。

>>> SSL('\x05\x91\x05\xbf')
<SSL  records=[] |<Raw  load='\x05\x91\x05\xbf' |>>
>>> SSL('\x85\x91\x05\xbf')
<SSL  records=[<SSLv2Record  length=0x591 content_type=5 |<Raw  load='\xbf' |>>] |>

这是检查重新反序列化的快速测试:

错误:

>>> SSL(str(SSL(records=[SSLv2Record(length=0x591, content_type=5)/"\xbf"])))
<SSL  records=[] |<Raw  load='\x05\x91\x05\xbf' |>>

正确:

>>> SSL(str(SSL(records=[SSLv2Record(length=0x591, content_type=5)/"\xbf"])))
<SSL  records=[<SSLv2Record  length=0x591 content_type=5 |<Raw  load='\xbf' |>>] |>