Cap
Introdução
Cap é uma máquina Linux do Hack The Box classificada oficialmente como Easy. A exploração começa em uma aplicação web na porta 80 que captura e disponibiliza pacotes de rede (TCP/UDP). Nela foi encontrada uma vulnerabilidade de IDOR (Insecure Direct Object Reference), que permite baixar arquivos de captura (.pcap) de outros usuários simplesmente alterando um número na URL. Um desses arquivos contém credenciais em texto claro, usadas para acessar a máquina via SSH. Para a escalação de privilégios, um binário do sistema (python3.8) possui a capability cap_setuid, o que permite obter uma shell como root.
IP: 10.10.10.245
Link: https://app.hackthebox.com/machines/Cap
Escaneamento
O primeiro passo é escanear a máquina com nmap, primeiro identificando todas as portas abertas e depois rodando detecção de serviço/versão apenas nelas.
ports=$(sudo nmap --open -p- -Pn --min-rate=1000 -T4 10.10.10.245 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//) && sudo nmap -Pn -sC -sV -p $ports 10.10.10.245
O nmap encontrou três portas abertas: 21 (FTP), 22 (SSH) e 80 (HTTP).
Enumeração
Porta 80
A página é uma aplicação web que monitora a rede da máquina. O painel aparece com sessão já autenticada como o usuário Nathan.
Ao enumerar a página, foi encontrado um botão Download que baixa um arquivo de captura de pacotes (pcap).
Analisando a requisição, foi possível identificar que a URL do download pode ser manipulada para acessar arquivos que não pertencem à sessão atual — uma clara falha de controle de acesso (IDOR).
Exploração
O aplicativo vulnerável é o painel web de monitoramento de rede na porta 80. A vulnerabilidade é um IDOR (Insecure Direct Object Reference): o endpoint /download/<id> não valida se o usuário autenticado tem permissão para acessar o arquivo referenciado pelo id, permitindo que qualquer número seja usado para baixar capturas de outras sessões.
Ao clicar no botão Download, o navegador dispara uma requisição GET para /download/<id>. Explorando o IDOR, basta iterar sobre esse id para baixar todas as capturas disponíveis:
for i in {0..10}; do wget http://10.10.10.245/download/${i} -O ${i}.pcap 2>/dev/null || break; done;
Os arquivos pcap foram baixados com sucesso.
Um dos arquivos pcap continha tráfego FTP em texto claro com credenciais de login:
nathan:Buck3tH4TF0RM3!
Essas credenciais funcionam tanto para FTP quanto para SSH, permitindo o acesso inicial à máquina como o usuário nathan.

Pós-exploração
Elevação de Privilégios
Rodando o linpeas na máquina, ele aponta um binário com capabilities Linux configuradas de forma insegura.
Confirmando manualmente com getcap:
getcap -r /usr/bin
O resultado mostra que /usr/bin/python3.8 possui a capability cap_setuid+eip. Isso significa que o binário pode chamar setuid() para assumir qualquer UID, incluindo root, mesmo sem estar rodando com a flag SUID tradicional. Segundo o GTFOBins, essa capability em um interpretador Python é suficiente para escalar diretamente para root:
python3.8 -c 'import os; os.setuid(0); os.system("/bin/bash")'
Com isso, obtemos uma shell como root e a flag final.

Anexos
- nmap — varredura de portas e detecção de serviços.
- wget — automação do download em massa dos arquivos pcap explorando o IDOR.
- Wireshark / tshark — análise dos arquivos pcap em busca de credenciais em texto claro.
- linpeas.sh — enumeração automatizada de vetores de escalação de privilégios, incluindo capabilities de binários.
- GTFOBins — referência da técnica de abuso da capability
cap_setuidno Python.
Mitigação
- Implementar controle de acesso adequado no endpoint
/download/<id>, validando no backend se o usuário autenticado é o dono do recurso solicitado (corrige o IDOR), em vez de confiar apenas em um identificador sequencial previsível. - Usar identificadores não sequenciais e não previsíveis (UUID) para recursos referenciados por URL.
- Nunca transmitir credenciais em texto claro (como no FTP); substituir por protocolos com criptografia (SFTP/FTPS) e evitar armazenar capturas de tráfego com dados sensíveis acessíveis publicamente.
- Revisar e remover capabilities desnecessárias de binários do sistema com
getcap -r /periodicamente;cap_setuidnunca deveria estar presente em um interpretador de propósito geral como o Python. - Aplicar o princípio do menor privilégio: se o Python precisa de
cap_net_bind_servicepara abrir portas privilegiadas, essa capability deve ser concedida isoladamente, semcap_setuid. - Manter senhas fortes e únicas por serviço, evitando reuso entre FTP e SSH, o que amplia o impacto de qualquer vazamento de credenciais.