CTF Writeup: HackTheBox — Machine Fortress
CTF

CTF Writeup: HackTheBox — Machine Fortress

AD
Admin Hacker
01 de março de 2026 3 min de leitura

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.234

O 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.txt

O 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.txt

Escalada 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.

  1. Encontramos o offset correto para o EIP (72 bytes).
  2. Vazamos o endereço da puts na GLIBC para calcular o base address.
  3. Chamamos /bin/sh usando as funções da biblioteca padrão.
python3 exploit.py | /opt/checker
# whoami
root
cat /root/root.txt

Conclusão e Mitigação

A máquina Fortress nos ensina que:

  1. Endpoints de debug nunca devem estar expostos em produção.
  2. Bancos de dados NoSQL são tão vulneráveis a injeções quanto SQL se não houver sanitização.
  3. 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.

AH

Admin Hacker

Security Researcher @ Cybersec Brasil