使用SSLv2Record的Scapy发送/嗅探数据包未正确解析

时间:2016-04-14 12:05:43

标签: python ssl scapy

我有一个像这样的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没有显示出来。 records字段中SSL/TLS列表的内容完全关闭。谁看过这个吗?如果我需要添加更多细节,请告诉我。

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

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

我是否错误地发送或接收此数据包?

1 个答案:

答案 0 :(得分:1)

这实际上是使用PR#76解决的scapy-ssl_tls中的错误,其中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' |>>] |>