2016-04-14 53 views
0

我有这样的Scapy的一个包:Scapy的发送/嗅嗅包与SSLv2Record不分析正确

###[ 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字段的其他数据包而没有问题。

是否显示不正确的发送或接收该数据包?

回答

1

这实际上是scapy-ssl_tls中的一个bug,使用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' |>>] |>