Python 创建有效的心跳请求

Python 创建有效的心跳请求,python,ssl,heartbleed-bug,Python,Ssl,Heartbleed Bug,我一直在处理heartbleed bug(主要是),创建无效的心跳很容易,我发送了如下消息: ### HEATBEAT ### 0x18, # Content Type (Heartbeat) 0x03, 0x01, # TLS version 0x00, 0x03, # Length # Payload 0x01, # Type (Request) 0xff, 0xff # Payload length # NO PAYLOAD ###

我一直在处理heartbleed bug(主要是),创建无效的心跳很容易,我发送了如下消息:

### HEATBEAT ###

0x18,       # Content Type (Heartbeat)
0x03, 0x01,  # TLS version
0x00, 0x03,  # Length
# Payload
0x01,       # Type (Request)
0xff, 0xff  # Payload length
            # NO PAYLOAD

### END HEARBEAT ###
然而,当我试图发送这个有效的心跳信号时,服务器没有响应

### HEATBEAT ###

0x18,       # Content Type (Heartbeat)
0x03, 0x01,  # TLS version
0x00, 0x03,  # Length
# Payload
0x01,       # Type (Request)
0x00, 0x03  # Payload length
0x68, 0x61, 0x74, # Payload: hat

### END HEARBEAT ###
我尝试过在有效负载长度上来回摆动,但没有+1或-1工作。即使长度明显高于实际长度也不起作用。你知道我做错了什么吗

这是我为任何感兴趣的人准备的(基于)

编辑:作为对@warren dew的回应,这也不起作用:

### HEATBEAT ###

0x18,       # Content Type (Heartbeat)
0x03, 0x01,  # TLS version
0x00, 0x03,  # Length
# Payload
0x01,       # Type (Request)
0x00, 0x03  # Payload length
0x68, 0x61, 0x74, # Payload: hat
0x34, 0x90, 0xf0, 0xf3, # PADDING
0xe3, 0xb4, 0x5c, 0x9c, # PADDING
0x80, 0xff, 0x95, 0x74, # PADDING
0x9d, 0x81, 0xfa, 0xa0  # PADDING
### END HEARBEAT ###
编辑:响应@warren dew,再次调整,但仍不起作用:

### HEATBEAT ###

0x18,       # Content Type (Heartbeat)
0x03, 0x01,  # TLS version
0x00, 0x16,  # Length <- Changed
# Payload
0x01,       # Type (Request)
0x00, 0x03  # Payload length
0x68, 0x61, 0x74, # Payload: hat
0x34, 0x90, 0xf0, 0xf3, # PADDING
0xe3, 0xb4, 0x5c, 0x9c, # PADDING
0x80, 0xff, 0x95, 0x74, # PADDING
0x9d, 0x81, 0xfa, 0xa0  # PADDING
### END HEARBEAT ###
热拍### 0x18,#内容类型(心跳) 0x03,0x01,#TLS版本
0x00,0x16,#Length除有效负载外,合法心跳消息还有三个字节的元数据(消息类型和有效负载长度)和至少16个字节的填充。因此,消息长度必须超过有效负载长度至少19个字节,而不仅仅是等于它。有关更多详细信息,请参阅RFC 6520。

在我看来,只有在建立tls会话之后,才允许有效的心跳请求。我已经测试过(您可以使用s_客户端或您自己的工具(可能使用BouncyCastle)在建立TLS会话后发送有效的心跳请求。 我建立了一个有效的tls会话,并以加密的心跳发送,并且能够使用java和bouncycastle引发心跳响应。 我还没有清除代码,一旦清除,我将发布它。
因此,从经验上看,即使在已损坏的OpenSSL版本中,ServerHelloDone之后的有效心跳请求也不被允许。这就是为什么在上面的示例中,心跳响应不会出现的原因。

我在请求的末尾添加了16字节的随机填充(如上面的编辑所示),请求仍然失败……消息长度仍然与有效负载长度相同。您需要将消息长度调整为正确的值,即现在的22。不幸的是,它仍然无法工作。。。编辑以添加新邮件。您不能未加密发送此邮件,因为在握手过程中无法发送此邮件。您需要先握手,然后加密发送此消息。这意味着此消息被封装在TLSChipherText结构中的TLSCompressed结构中