Fortress é uma máquina Linux de nível médio no HackTheBox que exige um bom entendimento de enumeração de serviços, exploração de vulnerabilidades em aplicações web customizadas e técnicas de post-exploitation. Neste writeup, vamos documentar o caminho para obter as flags de user e root.
Reconhecimento Inicial
Começamos com uma varredura padrão do Nmap para identificar portas abertas e serviços em execução:
nmap -sC -sV -oA nmap/fortress 10.10.11.234O resultado revelou duas portas interessantes:
- 22/tcp: SSH (OpenSSH 8.9p1)
- 80/tcp: HTTP (Nginx 1.18.0)
Enumeração Web
Ao acessar o roteador via navegador, encontramos um portal corporativo chamado "Fortress Management". Uma busca por diretórios ocultos usando ffuf revelou um endpoint /api/v1/debug.
ffuf -u http://10.10.11.234/FUZZ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txtO endpoint de debug permitia enviar comandos JSON. Após alguns testes de injeção, descobrimos uma vulnerabilidade de NoSQL Injection no campo de busca de usuários.
Exploração: User Flag
Usando o NoSQL Injection, conseguimos exfiltrar o hash da senha do usuário developer.
import requests
import string
# Script simplificado para extração de dados via NoSQLi
alphabet = string.ascii_letters + string.digits + "{}_-!"
# ... lógica de busca cega ...Após quebrar o hash usando John the Ripper e uma wordlist customizada, obtivemos a senha: super-secure-pass-2026.
Com as credenciais, acessamos via SSH:
ssh developer@10.10.11.234
cat user.txtEscalada de Privilégios: Root Flag
Dentro da máquina, realizamos uma enumeração local usando o script linpeas.sh. Notamos um binário customizado chamado /opt/checker que possuía a permissão SUID.
Ao analisar o binário com o gdb, identificamos um clássico Stack Buffer Overflow.
O Bug
O binário usava a função gets() para ler a entrada do usuário, sem verificar o tamanho do buffer (fixo em 64 bytes).
O Exploit
Como o sistema tinha ASLR ativo, mas o binário não era PIE (Position Independent Executable), usamos uma técnica de Ret2Libc.
- Encontramos o offset correto para o EIP (72 bytes).
- Vazamos o endereço da
putsna GLIBC para calcular o base address. - Chamamos
/bin/shusando as funções da biblioteca padrão.
python3 exploit.py | /opt/checker
# whoami
root
cat /root/root.txtConclusão e Mitigação
A máquina Fortress nos ensina que:
- Endpoints de debug nunca devem estar expostos em produção.
- Bancos de dados NoSQL são tão vulneráveis a injeções quanto SQL se não houver sanitização.
- Binários customizados com SUID são vetores clássicos de escalada de privilégios e devem ser auditados rigorosamente ou evitados.
Parabéns a quem submeteu esta máquina! Foi um excelente exercício de debugging e exploração de binários.
Admin Hacker
Security Researcher @ Cybersec Brasil