首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HeartBleed python测试脚本

HeartBleed python测试脚本
EN

Stack Overflow用户
提问于 2014-04-13 00:39:03
回答 2查看 11.2K关注 0票数 7

我遇到了测试服务器是否存在HeartBleed漏洞的this Python script

有没有人能解释一下"hello“的内容,正在发送的是什么,以及这个内容是如何构建的?

我并没有恶意使用这个脚本。我被要求测试Tomcat 7.0.2服务器的漏洞:我验证了tcnative-1.dll确实使用openssl 1.0.1d,但我尝试测试服务器的一些独立测试工具报告它没有漏洞。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-13 00:42:12

hellohb以更易读的方式定义字节串。

h2bin(x)函数完成所有工作:

代码语言:javascript
复制
def h2bin(x):
    return x.replace(' ', '').replace('\n', '').decode('hex')

因此,十六进制数字字符串删除了所有空格,然后从十六进制解码为字节:

代码语言:javascript
复制
>>> '16 03 02 00 dc'.replace(' ', '')
'16030200dc'
>>> '16 03 02 00 '.replace(' ', '').decode('hex')
'\x16\x03\x02\x00\xdc'

这只是一种使用十六进制符号和额外的空格来指定一系列字节的紧凑方式。

十六进制数据本身只是一个普通的heartbeat protocol message,以原始字节表示。hello字符串包含一个TLS 1.1 record message,由第一个字节(16十六进制,22个十进制)标识为握手记录,发送一个client_hello (第六个字节为01)。这只是设置一个TLS会话,告诉服务器客户端支持哪种密码。除了它告诉服务器客户端支持心跳扩展(消息末尾的00 0f字节对)之外,它实际上并不重要。

实际上,有趣的是hb消息:

代码语言:javascript
复制
hb = h2bin(''' 
18 03 02 00 03
01 40 00
''')

18是心跳内容类型记录,03 02标识TLS1.1协议版本。00 03表示消息的有效负载有多大;3个字节,或第二行的所有内容。

消息本身的3个字节由心跳类型(01或“request”)和消息长度(40 00,16384字节)组成,后跟no actual message。这会导致损坏的SSL服务器发送回一个包含16kb内存的心跳响应;回显不存在的0长度请求消息以及组成请求长度的内存。

票数 12
EN

Stack Overflow用户

发布于 2014-04-13 01:27:49

This page对此解释了很多。

代码语言:javascript
复制
const unsigned char good_data_2[] = {
    // TLS record
    0x16, // Content Type: Handshake
    0x03, 0x01, // Version: TLS 1.0
    0x00, 0x6c, // Length (use for bounds checking)
        // Handshake
        0x01, // Handshake Type: Client Hello
        0x00, 0x00, 0x68, // Length (use for bounds checking)
        0x03, 0x03, // Version: TLS 1.2
        // Random (32 bytes fixed length)
        0xb6, 0xb2, 0x6a, 0xfb, 0x55, 0x5e, 0x03, 0xd5,
        0x65, 0xa3, 0x6a, 0xf0, 0x5e, 0xa5, 0x43, 0x02,
        0x93, 0xb9, 0x59, 0xa7, 0x54, 0xc3, 0xdd, 0x78,
        0x57, 0x58, 0x34, 0xc5, 0x82, 0xfd, 0x53, 0xd1,
        0x00, // Session ID Length (skip past this much)
        0x00, 0x04, // Cipher Suites Length (skip past this much)
            0x00, 0x01, // NULL-MD5
            0x00, 0xff, // RENEGOTIATION INFO SCSV
        0x01, // Compression Methods Length (skip past this much)
            0x00, // NULL
        0x00, 0x3b, // Extensions Length (use for bounds checking)
            // Extension
            0x00, 0x00, // Extension Type: Server Name (check extension type)
            0x00, 0x0e, // Length (use for bounds checking)
            0x00, 0x0c, // Server Name Indication Length
                0x00, // Server Name Type: host_name (check server name type)
                0x00, 0x09, // Length (length of your data)
                // "localhost" (data your after)
                0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74,
            // Extension
            0x00, 0x0d, // Extension Type: Signature Algorithms (check extension type)
            0x00, 0x20, // Length (skip past since this is the wrong extension)
            // Data
            0x00, 0x1e, 0x06, 0x01, 0x06, 0x02, 0x06, 0x03,
            0x05, 0x01, 0x05, 0x02, 0x05, 0x03, 0x04, 0x01,
            0x04, 0x02, 0x04, 0x03, 0x03, 0x01, 0x03, 0x02,
            0x03, 0x03, 0x02, 0x01, 0x02, 0x02, 0x02, 0x03,
            // Extension
            0x00, 0x0f, // Extension Type: Heart Beat (check extension type)
            0x00, 0x01, // Length (skip past since this is the wrong extension)
            0x01 // Mode: Peer allows to send requests
};
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23033219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档